diff --git a/VI3DGL/VERSION b/VI3DGL/VERSION index 428b770..e516bb9 100644 --- a/VI3DGL/VERSION +++ b/VI3DGL/VERSION @@ -1 +1 @@ -1.4.3 +1.4.5 diff --git a/VI3DGL/sync-bundle-01.txt b/VI3DGL/sync-bundle-01.txt index 8312436..d32621e 100644 --- a/VI3DGL/sync-bundle-01.txt +++ b/VI3DGL/sync-bundle-01.txt @@ -1,7 +1,7 @@ ### SYNC-TRANSFER 1/5 -- mit sync-entpacken.bat entpacken ### Base64 - NICHT von Hand bearbeiten. ### FILE: VERSION | 6 -MS40LjMK +MS40LjUK ### FILE: Wochenplan.template.html | 26380 PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVU Ri04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwg @@ -466,7 +466,7 @@ RWxlbWVudEJ5SWQoJ3dwLXNjcm9sbCcpLmlubmVySFRNTCA9CiAgICAgICAgJzxkaXYgY2xhc3M9 IndwLWxlZXItaGlud2VpcyI+PHN0cm9uZz5GZWhsZXIgYmVpbSBBdWZiYXUgZGVzIFdvY2hlbnBs YW5zPC9zdHJvbmc+PGJyPicgKwogICAgICAgIGVzY2FwZUhUTUwoZS5tZXNzYWdlIHx8IFN0cmlu ZyhlKSkgKyAnPC9kaXY+JzsKfQo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg== -### FILE: app.js | 149495 +### FILE: app.js | 149759 LyogPT09IFZJMyBER0wtUGxhbnVuZyDigJQgQW53ZW5kdW5nc2xvZ2lrIChFeGNlbC10cmV1ZXMg TGF5b3V0KQoKICAgICAgIEVTTS1NaWdyYXRpb24gbGFldWZ0IOKAlCBzaWVoZSBkb2NzL01PRFVM X0tBUlRFLm1kLiA9PT0gKi8KCnZhciBfdXBkYXRlVG9hc3RTaG93biA9IGZhbHNlOwoKaW1wb3J0 @@ -620,2476 +620,2481 @@ ZXJlbiwgc3luY0ZsYXNoVm9yc2NoYXUsIGVyc2NoZWludW5nc2JpbGRSZW5kZXJuLAogICAgZXJz Y2hlaW51bmdzVGFiV2VjaHNlbG4sIGVyc2NoZWludW5nc1R5cFp1cnVlY2tzZXR6ZW4sIGVyc2No ZWludW5nRmFyYmVUb2dnbGUKfSBmcm9tICcuL2pzL2FkbWluX2Vyc2NoZWludW5nc2JpbGQuanMn OwppbXBvcnQgeyBoaW53ZWlzZUxhZGVuLCBoaW53ZWlzZUFuemVpZ2VBa3R1YWxpc2llcmVuLCBo -aW53ZWlzZU1vZGFsT2VmZm5lbiwgaGlud2Vpc2VTaWNodGJhciwgaGlud2Vpc2VQcm90b2tvbGxS -ZW5kZXJuIH0gZnJvbSAnLi9qcy9oaW53ZWlzZS5qcyc7CmltcG9ydCB7IHN0YXRpc3Rpa0xheW91 -dFJlbmRlcm4gfSBmcm9tICcuL2pzL2FkbWluX3N0YXRpc3Rpay5qcyc7CmltcG9ydCB7IHN0YXRp -c3Rpa0J1aWxkZXJSZW5kZXJuIH0gZnJvbSAnLi9qcy9hZG1pbl9zdGF0aXN0aWtfYnVpbGRlci5q -cyc7CmltcG9ydCB7IGV4cG9ydFJlbmRlcm4gfSBmcm9tICcuL2pzL2V4cG9ydF9wbGFuLmpzJzsK -aW1wb3J0IHsgc3RhbmRhcmRyZWNodGVSZW5kZXJuIH0gZnJvbSAnLi9qcy9hZG1pbl9zdGFuZGFy -ZHJlY2h0ZS5qcyc7CgooZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgLy8gWiAo -R2xvYmFsZXIgWnVzdGFuZCkgICAgICAgICAgICAgICAgIC0+IGpzL2NvcmUvc3RhdGUuanMKICAg -IC8vIEZVTktUSU9ORU4sIGZ1bmt0aW9uc1JhbmcsIERJRU5TVEdSQURFIC0+IGpzL2NvcmUvdXRp -bC5qcwoKICAgIC8vID09PT09IENyb3NzLU1vZHVsLUhvb2tzID09PT09CiAgICAvLyBIaWVyIHJl -Z2lzdHJpZXJlbiB3aXIgRnVua3Rpb25lbiBhdXMgYXBwLmpzIGJlaSBNb2R1bGVuLCBkaWUgc2ll -CiAgICAvLyBhdWZydWZlbiBtdWVzc2VuLCBhYmVyIG5vY2ggbmljaHQgZGlyZWt0IGltcG9ydGll -cmVuIGtvZW5uZW4KICAgIC8vIChGdW5rdGlvbmVuIHdhbmRlcm4gZXJzdCBpbiBzcGFldGVyZW4g -UGhhc2VuIGluIGlocmUgTW9kdWxlKS4KICAgIC8vIEZ1bmN0aW9uLUhvaXN0aW5nIGlubmVyaGFs -YiBkZXIgSUlGRTogZGllIHJlZmVyZW56aWVydGVuIE5hbWVuCiAgICAvLyBleGlzdGllcmVuIGJl -cmVpdHMgenUgZGllc2VtIFplaXRwdW5rdC4KICAgIHBlcm1pc3Npb25Ib29rcy5hZG1pblJlbmRl -cm4gICAgICAgICAgICAgPSBhZG1pblJlbmRlcm47CiAgICBwZXJtaXNzaW9uSG9va3Mua29wZlJl -bmRlcm4gICAgICAgICAgICAgID0ga29wZlJlbmRlcm47CiAgICBwZXJtaXNzaW9uSG9va3MuZ3Jp -ZFJlbmRlcm4gICAgICAgICAgICAgID0gZ3JpZFJlbmRlcm47CiAgICAvLyBwZXJtaXNzaW9uSG9v -a3Muc3RhdGlzdGlrUmVuZGVybiArIHJlbmRlckhvb2tzLnN0YXRpc3Rpa0xhZGVuLwogICAgLy8g -bG9nYnVjaExhZGVuICsgbG9nYnVjaEhvb2tzLmFmdGVyUmVzdG9yZSB3ZXJkZW4gaW4KICAgIC8v -IG9wdGlvbmFsZU1vZHVsZUxhZGVuKCkgZ2VzZXR6dCwgc29iYWxkIGRpZSBNb2R1bGUgZ2VsYWRl -biBzaW5kLgogICAgcGVybWlzc2lvbkhvb2tzLmJlc2V0enVuZ3Nrb250cm9sbGVSZW5kZXJuID0g -YmVzZXR6dW5nc2tvbnRyb2xsZVJlbmRlcm47CiAgICBwZXJtaXNzaW9uSG9va3MuYW5zaWNodFdl -Y2hzZWxuICAgICAgICAgID0gYW5zaWNodFdlY2hzZWxuOwogICAgZGF0ZW5MYWRlbkhvb2tzLmFk -bWluSG90UmVsb2FkICAgICAgICAgICA9IGFkbWluSG90UmVsb2FkOwogICAgZGF0ZW5MYWRlbkhv -b2tzLnBsYW51bmdIb3RSZWxvYWQgICAgICAgICA9IHBsYW51bmdIb3RSZWxvYWQ7CiAgICByZW5k -ZXJIb29rcy5mZWF0dXJlSXN0QWt0aXYgICAgICAgICAgICAgID0gZmVhdHVyZUlzdEFrdGl2Owog -ICAgcmVuZGVySG9va3Muc29uZGVyVGl0ZWxBdXNUZXh0ICAgICAgICAgICA9IHNvbmRlclRpdGVs -QXVzVGV4dDsKICAgIHJlbmRlckhvb2tzLmJlc2V0enVuZ3NUYWJGYXJiZUFrdHVhbGlzaWVyZW4g -PSBiZXNldHp1bmdzVGFiRmFyYmVBa3R1YWxpc2llcmVuOwogICAgcmVuZGVySG9va3Mua29tbWVu -dGFyZUltR3JpZEFuemVpZ2VuICAgICA9IGtvbW1lbnRhcmVJbUdyaWRBbnplaWdlbjsKICAgIHJl -bmRlckhvb2tzLmJleiAgICAgICAgICAgICAgICAgICAgICAgICAgPSBiZXo7CiAgICByZW5kZXJI -b29rcy53cFJlbmRlcm4gICAgICAgICAgICAgICAgICAgID0gd3BSZW5kZXJuOwogICAgcmVuZGVy -SG9va3MucHBSZW5kZXJuICAgICAgICAgICAgICAgICAgICA9IHBwUmVuZGVybjsKICAgIHJlbmRl -ckhvb2tzLmFkbWluUmVuZGVybiAgICAgICAgICAgICAgICAgPSBhZG1pblJlbmRlcm47CiAgICBy -ZW5kZXJIb29rcy5iZXNldHp1bmdza29udHJvbGxlUmVuZGVybiAgID0gYmVzZXR6dW5nc2tvbnRy -b2xsZVJlbmRlcm47CiAgICBpbnRlcmFjdGlvbkhvb2tzLmZlYXR1cmVJc3RBa3RpdiAgICAgICAg -ID0gZmVhdHVyZUlzdEFrdGl2OwogICAgZWRpdG9ySG9va3MuZmVhdHVyZUlzdEFrdGl2ICAgICAg -ICAgICAgICA9IGZlYXR1cmVJc3RBa3RpdjsKICAgIGVkaXRvckhvb2tzLnNvbmRlckZ1ZXJEYXR1 -bSAgICAgICAgICAgICAgPSBzb25kZXJGdWVyRGF0dW07CiAgICBlZGl0b3JIb29rcy5zb25kZXJX -YXJuTW9kYWxaZWlnZW4gICAgICAgID0gc29uZGVyV2Fybk1vZGFsWmVpZ2VuOwogICAgZWRpdG9y -SG9va3MuaXN0Q29kZUFrdGl2ICAgICAgICAgICAgICAgICA9IGlzdENvZGVBa3RpdjsKICAgIGVk -aXRvckhvb2tzLmVtYWlsVm9ybGFnZW5Ib2xlbiAgICAgICAgICAgPSBlbWFpbFZvcmxhZ2VuSG9s -ZW47CiAgICBlZGl0b3JIb29rcy5lbWFpbFZvcmxhZ2VCZWZ1ZWxsZW4gICAgICAgID0gZW1haWxW -b3JsYWdlQmVmdWVsbGVuOwogICAgZWRpdG9ySG9va3MubWFpbFRyaWdnZXJGZXVlcm4gICAgICAg -ICAgICA9IG1haWxUcmlnZ2VyRmV1ZXJuOwogICAgZWRpdG9ySG9va3MuYmVzZXR6dW5nc2tvbnRy -b2xsZVJlbmRlcm4gICA9IGJlc2V0enVuZ3Nrb250cm9sbGVSZW5kZXJuOwogICAgZWRpdG9ySG9v -a3MuYmVzZXR6dW5nc2tvbnRyb2xsZVRhZ1VwZGF0ZW4gPSBiZXNldHp1bmdza29udHJvbGxlVGFn -VXBkYXRlbjsKICAgIGJlc2V0enVuZ0hvb2tzLmJleiAgICAgICAgICAgICAgICAgICAgICAgPSBi -ZXo7CiAgICBiZXNldHp1bmdIb29rcy5lbWFpbFZvcmxhZ2VuSG9sZW4gICAgICAgID0gZW1haWxW -b3JsYWdlbkhvbGVuOwogICAgYmVzZXR6dW5nSG9va3MuZW1haWxWb3JsYWdlQmVmdWVsbGVuICAg -ICA9IGVtYWlsVm9ybGFnZUJlZnVlbGxlbjsKICAgIGJlc2V0enVuZ0hvb2tzLm1haWxUcmlnZ2Vy -RmV1ZXJuICAgICAgICAgPSBtYWlsVHJpZ2dlckZldWVybjsKICAgIGVtYWlsSG9va3MuaHRtbEF1 -c0ZlbGQgICAgICAgICAgICAgICAgICAgPSBodG1sQXVzRmVsZDsKICAgIGFkbWluSG9va3MuYmVk -aWVudW5nWmVpbGVuUmVuZGVybiAgICAgICAgPSBiZWRpZW51bmdaZWlsZW5SZW5kZXJuOwogICAg -Ly8gTGl2ZS1TeW5jOiBlcmxhdWJ0IHN5bmMtY2xpZW50ICsgY2VsbC1sb2NrLCBkZW4gRWRpdG9y -IChpbiBQaGFzZSA1CiAgICAvLyBleHRyYWhpZXJ0KSB6dSBzY2hsaWVzc2VuIHVuZCBaZWxsZW4g -dmlzdWVsbCB6dSBha3R1YWxpc2llcmVuLgogICAgc3luY0hvb2tzLmVkaXRvclNjaGxpZXNzZW4g -ICAgICAgICAgICAgICA9IGVkaXRvclNjaGxpZXNzZW47CiAgICBzeW5jSG9va3MuemVsbGVWaXN1 -ZWxsQWt0dWFsaXNpZXJlbiAgICAgID0gemVsbGVWaXN1ZWxsQWt0dWFsaXNpZXJlbjsKICAgIHN5 -bmNIb29rcy5oaW53ZWlzZUFrdHVhbGlzaWVydCAgICAgICAgICAgPSBmdW5jdGlvbihsaXN0ZSkg -ewogICAgICAgIFouaGlud2Vpc2UgPSBsaXN0ZSB8fCBbXTsKICAgICAgICBoaW53ZWlzZUFuemVp -Z2VBa3R1YWxpc2llcmVuKCk7CiAgICB9OwoKICAgIC8vIHBlcnNvbmVuTmV1QXVmYmF1ZW4gLT4g -anMvY29yZS9kYXRlbkxhZGVuLmpzCgogICAgLy8gPT09PT0gSGlsZnNmdW5rdGlvbmVuID09PT09 -CiAgICAvLyBlc2NhcGVIVE1ML2VzY2FwZUF0dHIsIGRhdHVtU3RyL2RhdHVtRm9ybWF0REUvZGF0 -dW1LdXJ6REUvd29jaGVudGFnS3Vyei8KICAgIC8vIGlzdFdvY2hlbmVuZGU6IGpldHp0IGluIGpz -L2NvcmUvdXRpbC5qcyAoc2llaGUgSW1wb3J0cyBhbSBEYXRlaWFuZmFuZykuCgogICAgLy8gdG9h -c3QsIGJlc3RhZXRpZ2VuIC0+IGpzL3VpL2RpYWxvZy5qcwoKICAgIC8vIGFwaSwgYXBpUG9zdCwg -YXBpUHV0IC0+IGpzL2NvcmUvYXBpLmpzCgogICAgLy8gPT09PT0gRGF0ZW4gbGFkZW4gPT09PT0K -ICAgIC8vIEFETUlOX0xJU1RfRkVMREVSICsgYWRtaW5MaXN0ZW5Ob3JtYWxpc2llcmVuIC0+IGpz -L2NvcmUvZGF0ZW5MYWRlbi5qcwoKICAgIGZ1bmN0aW9uIGRhdGVuTGFkZW4oKSB7CiAgICAgICAg -Ly8gUGFrZXQtQyAoMjAyNi0wNS0yOSk6IFNwaW5uZXIgdWViZXIgZGllIFBsYW50YWZlbCB3YWVo -cmVuZCBkZXIKICAgICAgICAvLyBpbml0aWFsZW4gZHJlaSBBUEktQ2FsbHMuIEF1ZiBsYW5nc2Ft -ZW4gUG9saXplaS1QQ3MgZGF1ZXJ0IGRhcwogICAgICAgIC8vIGJpcyB6dSAxLTIgU2VrdW5kZW4s -IHZvcmhlciBzYWggbWFuIGJsYW5rZW4gU2NyZWVuLiBXaXJkIGltCiAgICAgICAgLy8gbmF2U2lj -aHRiYXJrZWl0QW53ZW5kZW4tQmxvY2sgYW0gRW5kZSB2b24gZGF0ZW5MYWRlbigpIHdlZy0KICAg -ICAgICAvLyBnZW5vbW1lbiAoc2llaGUgb3B0aW9uYWxlTW9kdWxlTGFkZW4udGhlbikuCiAgICAg -ICAgbGFkZU92ZXJsYXlaZWlnZW4oJ2Fuc2ljaHQtcGxhbnVuZycsICdQbGFudGFmZWwgd2lyZCBn -ZWxhZGVuIOKApicpOwogICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbYXBpKCcvYXBpL2FkbWlu -JyksIGFwaSgnL2FwaS9wbGFudW5nJyksIGFwaSgnL2FwaS9pbmZvJyldKQogICAgICAgICAgICAu -dGhlbihmdW5jdGlvbihyKSB7CiAgICAgICAgICAgICAgICBaLmFkbWluID0gYWRtaW5MaXN0ZW5O -b3JtYWxpc2llcmVuKHJbMF0pOwogICAgICAgICAgICAgICAgWi5wbGFudW5nID0gclsxXTsKICAg -ICAgICAgICAgICAgIHZhciBpbmZvID0gclsyXTsKICAgICAgICAgICAgICAgIFouYmVudXR6ZXIg -PSBpbmZvLmJlbnV0emVyOwoKICAgICAgICAgICAgICAgIFoucmVjaHRlID0gcmVjaHRlQXVzSW5m -byhpbmZvKTsKCiAgICAgICAgICAgICAgICBaLmNvZGVNYXAgPSB7fTsKICAgICAgICAgICAgICAg -IChaLmFkbWluLnNjaGljaHRjb2RlcyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihzYykgewogICAg -ICAgICAgICAgICAgICAgIFouY29kZU1hcFtzYy5jb2RlXSA9IHsgaGludGVyZ3J1bmQ6IHNjLmhp -bnRlcmdydW5kLCBzY2hyaWZ0OiBzYy5zY2hyaWZ0LCBrdWVyemVsOiBzYy5jb2RlIH07CiAgICAg -ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIFouZ3J1cHBlbk1hcCA9IHt9OwogICAgICAg -ICAgICAgICAgKFouYWRtaW4uZ3J1cHBlbiB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihncikgewog -ICAgICAgICAgICAgICAgICAgIFouZ3J1cHBlbk1hcFtnci5uYW1lXSA9IHsgaGludGVyZ3J1bmQ6 -IGdyLmhpbnRlcmdydW5kLCBzY2hyaWZ0OiBnci5zY2hyaWZ0LCBiZXplaWNobnVuZzogZ3IuYmV6 -ZWljaG51bmcgfTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIHBlcnNvbmVu -TmV1QXVmYmF1ZW4oKTsKCiAgICAgICAgICAgICAgICAvLyBNZWluZSBQZXJzb24tSUQ6IHZvbSBT -ZXJ2ZXIgYmVyZWNobmV0IChud0tlbm51bmctTWF0Y2gpLCBvZGVyCiAgICAgICAgICAgICAgICAv -LyBsb2thbCBlcm1pdHRlbG4gYWxzIEZhbGxiYWNrIChhZWx0ZXJlIFNlcnZlci1WZXJzaW9uKS4K -ICAgICAgICAgICAgICAgIFoubWVpbmVQZXJzb25JZCA9IG51bGw7CiAgICAgICAgICAgICAgICBp -ZiAoaW5mby5tZWluZVBlcnNvbklkICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBaLm1l -aW5lUGVyc29uSWQgPSBTdHJpbmcoaW5mby5tZWluZVBlcnNvbklkKTsKICAgICAgICAgICAgICAg -IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGJlbnV0emVyTG93ZXIgPSAoWi5iZW51 -dHplciB8fCAnJykudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICBaLnBlcnNvbmVu -LmZvckVhY2goZnVuY3Rpb24ocCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocC5ud0tl -bm51bmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrTG93ZXIgPSBwLm53S2Vu -bnVuZy50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtMb3dl -ciA9PT0gYmVudXR6ZXJMb3dlciB8fCBiZW51dHplckxvd2VyLmVuZHNXaXRoKCdcXCcgKyBrTG93 -ZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWi5tZWluZVBlcnNvbklkID0g -U3RyaW5nKHAuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg -ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9Cgog -ICAgICAgICAgICAgICAgLy8gVXBkYXRlLUJhbm5lcjogc2VydmVyLnBzMSBwcnVlZnQgVkVSU0lP -TiBnZWdlbiBWSTNER0wtZGlzdCBhbGxlIDYwIE1pbi4KICAgICAgICAgICAgICAgIGlmIChpbmZv -LnVwZGF0ZUF2YWlsYWJsZSAmJiAhX3VwZGF0ZVRvYXN0U2hvd24pIHsKICAgICAgICAgICAgICAg -ICAgICBfdXBkYXRlVG9hc3RTaG93biA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgdG9hc3Qo -CiAgICAgICAgICAgICAgICAgICAgICAgICdVcGRhdGUgdmVyZsO8Z2JhcjogdicgKyAoaW5mby5y -ZW1vdGVWZXJzaW9uIHx8ICc/JykgKwogICAgICAgICAgICAgICAgICAgICAgICAnIOKAlCB1cGRh -dGUuYmF0IGF1c2bDvGhyZW4gdW5kIFNlcnZlciBuZXUgc3RhcnRlbicsCiAgICAgICAgICAgICAg -ICAgICAgICAgICdpbmZvJywgeyBkYXVlcjogMjAwMDAgfQogICAgICAgICAgICAgICAgICAgICk7 -CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSWRlbnRpdGFldHMtVmVybHVz -dC1IaW53ZWlzIChTcHJpbnQgMiDigJQgRGF0ZW5tb2RlbGwtS29uc2lzdGVuegogICAgICAgICAg -ICAgICAgLy8gMjAyNi0wNS0yOCk6IHdlbm4ga2VpbmUgUGxhbi1QZXJzb24genVyIGVpbmdlbG9n -Z3RlbiBOVy1LZW5udW5nCiAgICAgICAgICAgICAgICAvLyBnZWZ1bmRlbiB3dXJkZSBVTkQgZGVy -IFVzZXIgYXVjaCBrZWluIFNVL0ZhY2hhdWZzaWNodCBpc3QgKGRpZQogICAgICAgICAgICAgICAg -Ly8gYXJiZWl0ZW4gZnVlciBhbmRlcmUsIGhhYmVuIGdnZi4gYmV3dXNzdCBrZWluZSBlaWdlbmUg -UGxhbi0KICAgICAgICAgICAgICAgIC8vIFBlcnNvbiksIHdhcm5lbiB3aXIgYWt0aXYuIEZydWVo -ZXIgZmllbGVuIFNlbGYtU2VydmljZS1GZWF0dXJlcwogICAgICAgICAgICAgICAgLy8gKE1laW4g -UHJvZmlsLCBNZWluIFNjaGljaHQtVGVhbSwgZWlnZW5lIFNjaGljaHQtSGlnaGxpZ2h0cykKICAg -ICAgICAgICAgICAgIC8vIGVpbmZhY2ggc3RpbGwgYXVzIOKAlCBkZXIgVXNlciBzYWggbGVlcmUg -S25vZXBmZSBvaG5lIEVya2xhZXJ1bmcuCiAgICAgICAgICAgICAgICBpZiAoIVoubWVpbmVQZXJz -b25JZCAmJiAhWi5yZWNodGUuaXN0U3VwZXJVc2VyICYmICFaLnJlY2h0ZS5pc3RGYWNoYXVmc2lj -aHQpIHsKICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRGVpbmUgTlctS2VubnVuZyDigJ4nICsg -KFouYmVudXR6ZXIgfHwgJz8nKSArICciIGlzdCBrZWluZXIgUGxhbi1QZXJzb24genVnZW9yZG5l -dC4gJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VpZ2VuZXMgUHJvZmlsIHVuZCDigJ5N -ZWluIFNjaGljaHQtVGVhbSIgc2luZCBkZXNoYWxiIG5pY2h0IHZlcmbDvGdiYXIg4oCUICcgKwog -ICAgICAgICAgICAgICAgICAgICAgICAgICdiaXR0ZSBkZW4gQWRtaW4gdW0gWnVvcmRudW5nIGRl -aW5lciBLZW5udW5nIGluIGRlciBQZXJzb25hbHZlcndhbHR1bmcuJywKICAgICAgICAgICAgICAg -ICAgICAgICAgICAnd2FybnVuZycsIHsgZGF1ZXI6IDEyMDAwIH0pOwogICAgICAgICAgICAgICAg -fQoKICAgICAgICAgICAgICAgIC8vIFVYLUF1ZGl0IFNwcmludCAxLjQgKDIwMjYtMDUtMjkpOiBT -ZWxmLVNlcnZpY2UtQnV0dG9ucwogICAgICAgICAgICAgICAgLy8gKFNjaGljaHQtVGVhbSwgUHJv -ZmlsLUF2YXRhcikgdmVyc3RlY2tlbiB3ZW5uIGtlaW5lIFBlcnNvbgogICAgICAgICAgICAgICAg -Ly8genVnZW9yZG5ldCDigJQgc29uc3QgY2xpY2t0IFVzZXIgdW5kIGtyaWVndCBlcnN0IGRhbm4g -ZGVuCiAgICAgICAgICAgICAgICAvLyBUb2FzdC4gRGFzIHZlcmhpbmRlcnQgIktsaWNrIOKGkiBG -ZWhsZXIiLUZyaWN0aW9uLgogICAgICAgICAgICAgICAgdmFyIGJ0blRlYW0gPSBkb2N1bWVudC5n -ZXRFbGVtZW50QnlJZCgnYnRuLXNjaGljaHR0ZWFtJyk7CiAgICAgICAgICAgICAgICBpZiAoYnRu -VGVhbSkgYnRuVGVhbS5jbGFzc0xpc3QudG9nZ2xlKCd2ZXJzdGVja3QnLCAhWi5tZWluZVBlcnNv -bklkKTsKCiAgICAgICAgICAgICAgICB0YWdlRXJ6ZXVnZW4oKTsKICAgICAgICAgICAgICAgIHRh -Z0luZm9zQmVyZWNobmVuKCk7CiAgICAgICAgICAgICAgICBaLmhldXRlU3RyID0gZGF0dW1TdHIo -bmV3IERhdGUoKSk7CgogICAgICAgICAgICAgICAgYmV6ZWljaG51bmdlbkFud2VuZGVuKCk7CiAg -ICAgICAgICAgICAgICBtYXJraWVydW5nZW5BbndlbmRlbigpOwogICAgICAgICAgICAgICAgcmV0 -dXJuIG9wdGlvbmFsZU1vZHVsZUxhZGVuKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAg -ICAgICAgICBuYXZTaWNodGJhcmtlaXRBbndlbmRlbigpOwogICAgICAgICAgICAgICAgICAgIGhl -dXRlQmxvY2tBa3R1YWxpc2llcmVuKCk7CiAgICAgICAgICAgICAgICAgICAgbGFkZU92ZXJsYXlW -ZXJzdGVja2VuKCdhbnNpY2h0LXBsYW51bmcnKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAg -ICAgICB9KQogICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAg -Ly8gQmVpIEZlaGxlciB0cm90emRlbSBPdmVybGF5IHdlZywgc29uc3Qgc2l0enQgZGVyIFVzZXIK -ICAgICAgICAgICAgICAgIC8vIHVudGVyIGRlbSBTcGlubmVyIGZlc3QuCiAgICAgICAgICAgICAg -ICBsYWRlT3ZlcmxheVZlcnN0ZWNrZW4oJ2Fuc2ljaHQtcGxhbnVuZycpOwogICAgICAgICAgICAg -ICAgdGhyb3cgZTsKICAgICAgICAgICAgfSk7CiAgICB9CgogICAgLy8gPT09PT0gT3B0aW9uYWwt -TW9kdWxlOiBTdGF0aXN0aWsgKyBMb2didWNoID09PT09CiAgICAvLyBTdGF0aXNjaGUgSW1wb3J0 -cyB3dWVyZGVuIGltIFZpZXctU291cmNlICsgTmV0d29yay1UYWIgZnVlciBBTExFCiAgICAvLyBV -c2VyIHNpY2h0YmFyIG1hY2hlbiwgZGFzcyBlcyBlaW5lbiBTdGF0aXN0aWstIHVuZCBlaW5lbiBM -b2didWNoLQogICAgLy8gQmVyZWljaCBnaWJ0LiBTdGF0dGRlc3NlbiB3ZXJkZW4gTW9kdWwgKyBN -YXJrdXAgKyBOYXYtQnV0dG9uIGVyc3QKICAgIC8vIHp1ciBMYXVmemVpdCBuYWNoZ2VsYWRlbiDi -gJQgdW5kIGF1Y2ggbnVyLCB3ZW5uIGRlciBlaW5nZWxvZ2d0ZSBVc2VyCiAgICAvLyBkaWUgamV3 -ZWlsaWdlIHNlaGVuLUJlcmVjaHRpZ3VuZyBoYXQuIFNlcnZlci1zaWRlIGJsb2NrdCB6dXNhZXR6 -bGljaAogICAgLy8gZWluIDQwNC1GaWx0ZXIgZGlyZWt0ZW4gWnVncmlmZiBhdWYgL2pzL3N0YXRp -c3Rpay5qcywgL2pzL2xvZ2J1Y2guanMsCiAgICAvLyAvZGF0YS9tYWluZnJhbWUuaHRtbCwgL2Rh -dGEvc2FuaXRpemVyLmh0bWwg4oCUIGZ1ZXIgVW5iZXJlY2h0aWd0ZSBpc3QgbmljaHRzCiAgICAv -LyBkYXZvbiBpbSBEZXZUb29scy1OZXR3b3JrLVRhYiBzaWNodGJhci4KICAgIHZhciBfb3B0TW9k -dWxlR2VsYWRlbiA9IHsgc3RhdGlzdGlrOiBmYWxzZSwgbG9nYnVjaDogZmFsc2UgfTsKICAgIGZ1 -bmN0aW9uIF9uYXZCdG5FaW5mdWVnZW4oaWQsIGxhYmVsLCBhbnNpY2h0KSB7CiAgICAgICAgaWYg -KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSkgcmV0dXJuOwogICAgICAgIHZhciBidG4gPSBk -b2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgICAgICBidG4uY2xhc3NOYW1lID0g -J25hdi1idG4nOwogICAgICAgIGJ0bi5pZCA9IGlkOwogICAgICAgIGJ0bi50ZXh0Q29udGVudCA9 -IGxhYmVsOwogICAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2RhdGEtYW5zaWNodCcsIGFuc2ljaHQp -OwogICAgICAgIHZhciBuYXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGVhZGVyLW5hdicp -OwogICAgICAgIHZhciBuYXZBZG1pbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYXYtYWRt -aW4nKTsKICAgICAgICBpZiAobmF2ICYmIG5hdkFkbWluKSBuYXYuaW5zZXJ0QmVmb3JlKGJ0biwg -bmF2QWRtaW4pOwogICAgICAgIGVsc2UgaWYgKG5hdikgbmF2LmFwcGVuZENoaWxkKGJ0bik7CiAg -ICB9CiAgICBmdW5jdGlvbiBfbWFya3VwRWluZnVlZ2VuKGh0bWwpIHsKICAgICAgICB2YXIgYW5j -aG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLW92ZXJsYXknKTsKICAgICAgICBp -ZiAoYW5jaG9yKSBhbmNob3IuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmViZWdpbicsIGh0bWwp -OwogICAgICAgIGVsc2UgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVu -ZCcsIGh0bWwpOwogICAgfQogICAgZnVuY3Rpb24gb3B0aW9uYWxlTW9kdWxlTGFkZW4oKSB7CiAg -ICAgICAgdmFyIHNlaGVuID0gKFoucmVjaHRlICYmIFoucmVjaHRlLnNlaGVuKSB8fCB7fTsKICAg -ICAgICB2YXIgZGFyZlN0YXQgPSAhIShaLnJlY2h0ZSAmJiAoWi5yZWNodGUuaXN0U3VwZXJVc2Vy -IHx8IHNlaGVuLnN0YXRpc3RpaykpOwogICAgICAgIHZhciBkYXJmTG9nICA9ICEhKFoucmVjaHRl -ICYmIChaLnJlY2h0ZS5pc3RTdXBlclVzZXIgfHwgc2VoZW4ubG9nYnVjaCkpOwogICAgICAgIHZh -ciBhdWZnYWJlbiA9IFtdOwogICAgICAgIGlmIChkYXJmU3RhdCAmJiAhX29wdE1vZHVsZUdlbGFk -ZW4uc3RhdGlzdGlrKSB7CiAgICAgICAgICAgIGF1ZmdhYmVuLnB1c2goX29wdE1vZHVsTGFkZW4o -J3N0YXRpc3RpaycsICdTdGF0aXN0aWsnLCAnL2RhdGEvbWFpbmZyYW1lLmh0bWwnLCAnLi9qcy9z -dGF0aXN0aWsuanMnLCBmdW5jdGlvbihtb2QsIGh0bWwpIHsKICAgICAgICAgICAgICAgIHN0YXRp -c3Rpa1JlbmRlcm4gICA9IG1vZC5zdGF0aXN0aWtSZW5kZXJuOwogICAgICAgICAgICAgICAgc3Rh -dGlzdGlrTGFkZW4gICAgID0gbW9kLnN0YXRpc3Rpa0xhZGVuOwogICAgICAgICAgICAgICAgc3Rh -dEZpbHRlclNldHplbiAgID0gbW9kLnN0YXRGaWx0ZXJTZXR6ZW47CiAgICAgICAgICAgICAgICBz -dGF0SW5mb1plaWdlbiAgICAgPSBtb2Quc3RhdEluZm9aZWlnZW47CiAgICAgICAgICAgICAgICBw -ZXJtaXNzaW9uSG9va3Muc3RhdGlzdGlrUmVuZGVybiA9IHN0YXRpc3Rpa1JlbmRlcm47CiAgICAg -ICAgICAgICAgICByZW5kZXJIb29rcy5zdGF0aXN0aWtMYWRlbiAgICAgICA9IHN0YXRpc3Rpa0xh -ZGVuOwogICAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGlmIChkYXJmTG9nICYmICFf -b3B0TW9kdWxlR2VsYWRlbi5sb2didWNoKSB7CiAgICAgICAgICAgIGF1ZmdhYmVuLnB1c2goX29w -dE1vZHVsTGFkZW4oJ2xvZ2J1Y2gnLCAnTG9nYnVjaCcsICcvZGF0YS9zYW5pdGl6ZXIuaHRtbCcs -ICcuL2pzL2xvZ2J1Y2guanMnLCBmdW5jdGlvbihtb2QsIGh0bWwpIHsKICAgICAgICAgICAgICAg -IGxvZ2J1Y2hMYWRlbiAgID0gbW9kLmxvZ2J1Y2hMYWRlbjsKICAgICAgICAgICAgICAgIGxvZ2J1 -Y2hGaWx0ZXJuID0gbW9kLmxvZ2J1Y2hGaWx0ZXJuOwogICAgICAgICAgICAgICAgbG9nYnVjaEhv -b2tzICAgPSBtb2QubG9nYnVjaEhvb2tzOwogICAgICAgICAgICAgICAgbG9nYnVjaEhvb2tzLmFm -dGVyUmVzdG9yZSA9IGZ1bmN0aW9uKCkgeyBkYXRlbkxhZGVuKCk7IH07CiAgICAgICAgICAgICAg -ICByZW5kZXJIb29rcy5sb2didWNoTGFkZW4gPSBsb2didWNoTGFkZW47CiAgICAgICAgICAgIH0p -KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGF1ZmdhYmVuKTsKICAgIH0K -CiAgICAvLyBHZW1laW5zYW1lciBMb2FkZXIgZnVlciBTdGF0aXN0aWsgKyBMb2didWNoOiBsYWVk -dCBKUy1Nb2R1bCArIEhUTUwtCiAgICAvLyBGcmFnbWVudCBwYXJhbGxlbCwgZnVlZ3QgZGVuIE5h -di1CdXR0b24gTlVSIGVpbiB3ZW5uIGJlaWRlcyBnZWtsYXBwdAogICAgLy8gaGF0IChzb25zdCBr -b21tdCBkZXIgVGFiIG5pY2h0IGltIERPTSBhbiB1bmQgZGVyIFVzZXIgd2FlcmUgbWl0IGVpbmVy -CiAgICAvLyBsZWVyZW4gU2VpdGUga29uZnJvbnRpZXJ0KS4gTGFkZS1GZWhsZXIgd2VyZGVuIGlu -IGRlciBCcm93c2VyLUtvbnNvbGUKICAgIC8vIHByb3Rva29sbGllcnQgKyBkZW0gU3VwZXJVc2Vy -IGFscyBUb2FzdCBhbmdlemVpZ3QuCiAgICBmdW5jdGlvbiBfb3B0TW9kdWxMYWRlbihrZXksIGxh -YmVsLCBodG1sUGZhZCwgbW9kdWxQZmFkLCBiaW5kaW5ncykgewogICAgICAgIHJldHVybiBQcm9t -aXNlLmFsbChbCiAgICAgICAgICAgIGltcG9ydChtb2R1bFBmYWQpLmNhdGNoKGZ1bmN0aW9uKGUp -IHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tWSTNdICcgKyBsYWJlbCArICctTW9k -dWwtSW1wb3J0IGZlaGxnZXNjaGxhZ2VuICgnICsgbW9kdWxQZmFkICsgJyk6JywgZSk7CiAgICAg -ICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIGZldGNo -KGh0bWxQZmFkKS50aGVuKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgICAgIGlmICghci5vaykg -eyBjb25zb2xlLmVycm9yKCdbVkkzXSAnICsgbGFiZWwgKyAnLU1hcmt1cCBIVFRQICcgKyByLnN0 -YXR1cyArICcgKCcgKyBodG1sUGZhZCArICcpJyk7IHJldHVybiAnJzsgfQogICAgICAgICAgICAg -ICAgcmV0dXJuIHIudGV4dCgpOwogICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7CiAg -ICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVkkzXSAnICsgbGFiZWwgKyAnLU1hcmt1cC1G -ZXRjaCBmZWhsZ2VzY2hsYWdlbiAoJyArIGh0bWxQZmFkICsgJyk6JywgZSk7CiAgICAgICAgICAg -ICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgIH0pCiAgICAgICAgXSkudGhlbihmdW5jdGlvbihh -cnIpIHsKICAgICAgICAgICAgdmFyIG1vZCA9IGFyclswXSwgaHRtbCA9IGFyclsxXTsKICAgICAg -ICAgICAgaWYgKCFtb2QgfHwgIWh0bWwpIHsKICAgICAgICAgICAgICAgIGlmIChaLnJlY2h0ZSAm -JiBaLnJlY2h0ZS5pc3RTdXBlclVzZXIpIHsKICAgICAgICAgICAgICAgICAgICB0b2FzdChsYWJl -bCArICcga29ubnRlIG5pY2h0IGdlbGFkZW4gd2VyZGVuIOKAlCBEZXRhaWxzIHNpZWhlIERldlRv -b2xzLUtvbnNvbGUnLCAnZmVobGVyJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg -ICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAg -IGJpbmRpbmdzKG1vZCwgaHRtbCk7CiAgICAgICAgICAgICAgICBfbWFya3VwRWluZnVlZ2VuKGh0 -bWwpOwogICAgICAgICAgICAgICAgX25hdkJ0bkVpbmZ1ZWdlbignbmF2LScgKyBrZXksIGxhYmVs -LCBrZXkpOwogICAgICAgICAgICAgICAgX29wdE1vZHVsZUdlbGFkZW5ba2V5XSA9IHRydWU7CiAg -ICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1tWSTNdICcgKyBsYWJlbCArICctTW9kdWwgZ2Vs -YWRlbicpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xl -LmVycm9yKCdbVkkzXSAnICsgbGFiZWwgKyAnLUJpbmRpbmdzL01hcmt1cCBmZWhsZ2VzY2hsYWdl -bjonLCBlKTsKICAgICAgICAgICAgICAgIGlmIChaLnJlY2h0ZSAmJiBaLnJlY2h0ZS5pc3RTdXBl -clVzZXIpIHsKICAgICAgICAgICAgICAgICAgICB0b2FzdChsYWJlbCArICcgSW5pdGlhbGlzaWVy -dW5nIGZlaGxnZXNjaGxhZ2VuIOKAlCBEZXRhaWxzIHNpZWhlIERldlRvb2xzLUtvbnNvbGUnLCAn -ZmVobGVyJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAg -IH0KCiAgICAvLyBIb3QtUmVsb2FkOiBhZG1pbi5qc29uIHd1cmRlIGF1ZiBkZW0gU2hhcmUgZ2Vh -ZW5kZXJ0IChhbmRlcmVyIFNVIGhhdAogICAgLy8gZ2VzcGVpY2hlcnQpLiBXaXIgaG9sZW4gQWRt -aW4tRGF0ZW4gKyBSZWNodGUgbmV1IHVuZCByZW5kZXJuIGRpZQogICAgLy8gcmVsZXZhbnRlbiBC -ZXJlaWNoZS4gRGVyIFRhYi1XZWNoc2VsIHdpcmQgbmljaHQgYXVzZ2Vsb2VzdDsgVXNlcgogICAg -Ly8gPT09PT0gVXBkYXRlLUJlcmVpY2ggKFN1cGVyVXNlcik6IFN0YXR1cywgQ2hhbmdlbG9nLCBG -b3J0c2Nocml0dCwgU2VsYnN0dGVzdCA9PT09PQogICAgdmFyIF91cGRhdGVQb2xsVGltZXIgPSBu -dWxsOwogICAgZnVuY3Rpb24gX3VwZEVzYyhzKSB7IHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxl -bWVudCgnZGl2Jyk7IGQudGV4dENvbnRlbnQgPSBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKTsg -cmV0dXJuIGQuaW5uZXJIVE1MOyB9CiAgICAvLyBFc2NhcGluZyB6dWVyc3QgKFhTUy1zaWNoZXIp -LCBkYW5uIG51ciAqKmZldHQqKiBhbHMgPHN0cm9uZz4genVsYXNzZW4uCiAgICBmdW5jdGlvbiBf -dXBkSW5saW5lKHMpIHsgcmV0dXJuIF91cGRFc2MocykucmVwbGFjZSgvXCpcKihbXipdKylcKlwq -L2csICc8c3Ryb25nPiQxPC9zdHJvbmc+Jyk7IH0KICAgIGZ1bmN0aW9uIF91cGRNZChtZCkgewog -ICAgICAgIHZhciBvdXQgPSBbXSwgaW5VbCA9IGZhbHNlOwogICAgICAgIFN0cmluZyhtZCkuc3Bs -aXQoJ1xuJykuZm9yRWFjaChmdW5jdGlvbihsbikgewogICAgICAgICAgICB2YXIgdCA9IGxuLnJl -cGxhY2UoL1xzKyQvLCAnJyk7CiAgICAgICAgICAgIGlmICgvXiN7MSw2fVxzLy50ZXN0KHQpKSB7 -IGlmIChpblVsKSB7IG91dC5wdXNoKCc8L3VsPicpOyBpblVsID0gZmFsc2U7IH0gdmFyIGwgPSBN -YXRoLm1pbih0Lm1hdGNoKC9eIysvKVswXS5sZW5ndGggKyAyLCA2KTsgb3V0LnB1c2goJzxoJyAr -IGwgKyAnPicgKyBfdXBkSW5saW5lKHQucmVwbGFjZSgvXiMrXHMvLCAnJykpICsgJzwvaCcgKyBs -ICsgJz4nKTsgfQogICAgICAgICAgICBlbHNlIGlmICgvXlstKl1ccy8udGVzdCh0KSkgeyBpZiAo -IWluVWwpIHsgb3V0LnB1c2goJzx1bD4nKTsgaW5VbCA9IHRydWU7IH0gb3V0LnB1c2goJzxsaT4n -ICsgX3VwZElubGluZSh0LnJlcGxhY2UoL15bLSpdXHMvLCAnJykpICsgJzwvbGk+Jyk7IH0KICAg -ICAgICAgICAgZWxzZSBpZiAodCA9PT0gJycpIHsgaWYgKGluVWwpIHsgb3V0LnB1c2goJzwvdWw+ -Jyk7IGluVWwgPSBmYWxzZTsgfSB9CiAgICAgICAgICAgIGVsc2UgeyBpZiAoaW5VbCkgeyBvdXQu -cHVzaCgnPC91bD4nKTsgaW5VbCA9IGZhbHNlOyB9IG91dC5wdXNoKCc8cD4nICsgX3VwZElubGlu -ZSh0KSArICc8L3A+Jyk7IH0KICAgICAgICB9KTsKICAgICAgICBpZiAoaW5VbCkgb3V0LnB1c2go -JzwvdWw+Jyk7CiAgICAgICAgcmV0dXJuIG91dC5qb2luKCcnKTsKICAgIH0KICAgIGZ1bmN0aW9u -IHVwZGF0ZUJlcmVpY2hSZW5kZXJuKCkgewogICAgICAgIHZhciBib3ggPSBkb2N1bWVudC5nZXRF -bGVtZW50QnlJZCgndXBkYXRlLXN0YXR1cy1ib3gnKTsKICAgICAgICBpZiAoIWJveCkgcmV0dXJu -OwogICAgICAgIHZhciBjbEJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGRhdGUtY2hh -bmdlbG9nJyk7CiAgICAgICAgdmFyIGFrdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1 -cGRhdGUtYWt0aW9uJyk7CiAgICAgICAgdmFyIHN0YXJ0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVu -dEJ5SWQoJ2J0bi11cGRhdGUtc3RhcnQnKTsKICAgICAgICBpZiAoc3RhcnRCdG4pIHN0YXJ0QnRu -Lm9uY2xpY2sgPSBfdXBkYXRlU3RhcnRLbGljazsKICAgICAgICBib3guY2xhc3NOYW1lID0gJ3Vw -ZGF0ZS1ib3gnOwogICAgICAgIGJveC50ZXh0Q29udGVudCA9ICdQcsO8ZmUgUmVwb3NpdG9yeSDi -gKYnOwogICAgICAgIGNsQm94LmNsYXNzTGlzdC5hZGQoJ3ZlcnN0ZWNrdCcpOwogICAgICAgIGFr -dGlvbi5jbGFzc0xpc3QuYWRkKCd2ZXJzdGVja3QnKTsKICAgICAgICBhcGkoJy9hcGkvdXBkYXRl -L3N0YXR1cycpLnRoZW4oZnVuY3Rpb24oZCkgewogICAgICAgICAgICBpZiAoZC5tYWludGVuYW5j -ZSAmJiBkLm1haW50ZW5hbmNlLmxvY2tlZCkgeyBfdXBkYXRlRm9ydHNjaHJpdHRQb2xsZW4oKTsg -fQogICAgICAgICAgICB2YXIgbG9rYWwgPSBkLmxvY2FsVmVyc2lvbiB8fCAnPycsIHJlbW90ZSA9 -IGQucmVtb3RlVmVyc2lvbiB8fCAnPyc7CiAgICAgICAgICAgIGlmIChkLnVwZGF0ZUF2YWlsYWJs -ZSkgewogICAgICAgICAgICAgICAgYm94LmNsYXNzTmFtZSA9ICd1cGRhdGUtYm94IHVwZGF0ZS1i -b3gtd2Fybic7CiAgICAgICAgICAgICAgICBib3guaW5uZXJIVE1MID0gJzxzdHJvbmc+VXBkYXRl -IHZlcmbDvGdiYXI6PC9zdHJvbmc+IGFrdHVlbGwgdicgKyBfdXBkRXNjKGxva2FsKSArICcgJnJh -cnI7IG5ldSA8c3Ryb25nPnYnICsgX3VwZEVzYyhyZW1vdGUpICsgJzwvc3Ryb25nPic7CiAgICAg -ICAgICAgICAgICB2YXIgY2wgPSBkLmNoYW5nZWxvZyB8fCB7fSwgaHRtbCA9ICcnOwogICAgICAg -ICAgICAgICAgaWYgKGNsLmZvcm1hdCA9PT0gJ21hcmtkb3duJykgeyBodG1sID0gJzxoND5Jbmhh -bHQgZGllc2VzIFVwZGF0ZXM8L2g0PicgKyBfdXBkTWQoY2wudGV4dCk7IH0KICAgICAgICAgICAg -ICAgIGVsc2UgaWYgKGNsLmZvcm1hdCA9PT0gJ2ZpbGVzJykgeyBodG1sID0gJzxoND5EaWVzZSBE -YXRlaWVuIHdlcmRlbiBha3R1YWxpc2llcnQgKCcgKyAoY2wuZmlsZXMgfHwgW10pLmxlbmd0aCAr -ICcpPC9oND48dWwgY2xhc3M9InVwZGF0ZS1maWxlbGlzdCI+JyArIChjbC5maWxlcyB8fCBbXSku -bWFwKGZ1bmN0aW9uKGYpIHsgcmV0dXJuICc8bGk+JyArIF91cGRFc2MoZikgKyAnPC9saT4nOyB9 -KS5qb2luKCcnKSArICc8L3VsPic7IH0KICAgICAgICAgICAgICAgIGVsc2UgeyBodG1sID0gJzxw -PicgKyBfdXBkRXNjKGNsLnRleHQgfHwgJycpICsgJzwvcD4nOyB9CiAgICAgICAgICAgICAgICBj -bEJveC5pbm5lckhUTUwgPSBodG1sOyBjbEJveC5jbGFzc0xpc3QucmVtb3ZlKCd2ZXJzdGVja3Qn -KTsKICAgICAgICAgICAgICAgIGFrdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCd2ZXJzdGVja3QnKTsK -ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGJveC5jbGFzc05hbWUgPSAndXBk -YXRlLWJveCB1cGRhdGUtYm94LW9rJzsKICAgICAgICAgICAgICAgIGJveC5pbm5lckhUTUwgPSAn -JiMxMDAwMzsgQWxsZXMgaW4gT3JkbnVuZyAmbWRhc2g7IFZlcnNpb24gdicgKyBfdXBkRXNjKGxv -a2FsKSArICcgaXN0IGFrdHVlbGwuJzsKICAgICAgICAgICAgfQogICAgICAgIH0pLmNhdGNoKGZ1 -bmN0aW9uKGUpIHsKICAgICAgICAgICAgYm94LmNsYXNzTmFtZSA9ICd1cGRhdGUtYm94IHVwZGF0 -ZS1ib3gtZXJyJzsKICAgICAgICAgICAgYm94LnRleHRDb250ZW50ID0gJ1VwZGF0ZS1TdGF0dXMg -bmljaHQgYWJydWZiYXI6ICcgKyBlLm1lc3NhZ2U7CiAgICAgICAgfSk7CiAgICB9CiAgICBmdW5j -dGlvbiBfdXBkYXRlU3RhcnRLbGljaygpIHsKICAgICAgICBpZiAoIXdpbmRvdy5jb25maXJtKCdV -cGRhdGUgamV0enQgaW5zdGFsbGllcmVuP1xuXG5FcyB3aXJkIHp1ZXJzdCBlaW5lIHZvbGxzdMOk -bmRpZ2UgU2ljaGVydW5nIGVyc3RlbGx0LCBkYW5uIGRhcyBVcGRhdGUgZWluZ2VzcGllbHQgdW5k -IGVpbiBTZWxic3R0ZXN0IGF1c2dlZsO8aHJ0LiBXw6RocmVuZCBkZXMgVm9yZ2FuZ3MgaXN0IGRh -cyBTeXN0ZW0gZ2VzcGVycnQuJykpIHJldHVybjsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50 -QnlJZCgndXBkYXRlLWFrdGlvbicpLmNsYXNzTGlzdC5hZGQoJ3ZlcnN0ZWNrdCcpOwogICAgICAg -IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGRhdGUtZm9ydHNjaHJpdHQnKS5jbGFzc0xpc3Qu -cmVtb3ZlKCd2ZXJzdGVja3QnKTsKICAgICAgICBhcGlQb3N0KCcvYXBpL3VwZGF0ZS9zdGFydCcs -IHt9KS50aGVuKGZ1bmN0aW9uKGQpIHsKICAgICAgICAgICAgaWYgKGQgJiYgZC5zdGFydGVkID09 -PSBmYWxzZSkgdG9hc3QoJ1VwZGF0ZSBsw6R1ZnQgYmVyZWl0cy4nLCAnaW5mbycpOwogICAgICAg -ICAgICBfdXBkYXRlRm9ydHNjaHJpdHRQb2xsZW4oKTsKICAgICAgICB9KS5jYXRjaChmdW5jdGlv -bihlKSB7IHRvYXN0KCdVcGRhdGUtU3RhcnQgZmVobGdlc2NobGFnZW46ICcgKyBlLm1lc3NhZ2Us -ICdmZWhsZXInKTsgX3VwZGF0ZUZvcnRzY2hyaXR0UG9sbGVuKCk7IH0pOwogICAgfQogICAgZnVu -Y3Rpb24gX3VwZGF0ZUZvcnRzY2hyaXR0UG9sbGVuKCkgewogICAgICAgIHZhciBmb3J0ID0gZG9j -dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZS1mb3J0c2Nocml0dCcpOwogICAgICAgIGlmIChm -b3J0KSBmb3J0LmNsYXNzTGlzdC5yZW1vdmUoJ3ZlcnN0ZWNrdCcpOwogICAgICAgIHZhciBiYXIg -PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLXByb2dyZXNzLWJhcicpOwogICAgICAg -IHZhciB0eHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLXByb2dyZXNzLXRleHQn -KTsKICAgICAgICB2YXIgbG9nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLWxv -ZycpOwogICAgICAgIHZhciBzdEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZS1z -ZWxmdGVzdCcpOwogICAgICAgIGlmIChfdXBkYXRlUG9sbFRpbWVyKSBjbGVhckludGVydmFsKF91 -cGRhdGVQb2xsVGltZXIpOwogICAgICAgIGZ1bmN0aW9uIHRpY2soKSB7CiAgICAgICAgICAgIGFw -aSgnL2FwaS91cGRhdGUvcHJvZ3Jlc3MnKS50aGVuKGZ1bmN0aW9uKGQpIHsKICAgICAgICAgICAg -ICAgIGJhci5zdHlsZS53aWR0aCA9IChkLnBlcmNlbnQgfHwgMCkgKyAnJSc7CiAgICAgICAgICAg -ICAgICBiYXIuY2xhc3NOYW1lID0gJ3VwZGF0ZS1wcm9ncmVzcy1iYXInICsgKGQuc3RhdGUgPT09 -ICdmYWlsZWQnID8gJyB1cGRhdGUtcHJvZ3Jlc3MtZmFpbCcgOiAoZC5zdGF0ZSA9PT0gJ2RvbmUn -ID8gJyB1cGRhdGUtcHJvZ3Jlc3MtZG9uZScgOiAnJykpOwogICAgICAgICAgICAgICAgdHh0LnRl -eHRDb250ZW50ID0gJ1snICsgKGQucGVyY2VudCB8fCAwKSArICclXSAnICsgKGQubWVzc2FnZSB8 -fCAnJyk7CiAgICAgICAgICAgICAgICBpZiAoZC5sb2cpIGxvZ0VsLnRleHRDb250ZW50ID0gZC5s -b2cubWFwKGZ1bmN0aW9uKGwpIHsgcmV0dXJuIGwubXNnOyB9KS5qb2luKCdcbicpOwogICAgICAg -ICAgICAgICAgaWYgKGQuc2VsZnRlc3QgJiYgZC5zZWxmdGVzdC5sZW5ndGgpIHsKICAgICAgICAg -ICAgICAgICAgICBzdEVsLmlubmVySFRNTCA9ICc8aDQ+U2VsYnN0dGVzdDwvaDQ+JyArIGQuc2Vs -ZnRlc3QubWFwKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8 -ZGl2IGNsYXNzPSJzdC1yb3cgJyArIChyLm9rID8gJ3N0LW9rJyA6ICdzdC1mYWlsJykgKyAnIj4n -ICsgKHIub2sgPyAnJiMxMDAwMzsnIDogJyYjMTAwMDc7JykgKyAnICcgKyBfdXBkRXNjKHIubmFt -ZSkgKyAnIDxzcGFuIGNsYXNzPSJzdC1kZXRhaWwiPicgKyBfdXBkRXNjKHIuZGV0YWlsKSArICc8 -L3NwYW4+PC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKTsKICAgICAgICAg -ICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChkLnN0YXRlID09PSAnZG9uZScpIHsKICAgICAg -ICAgICAgICAgICAgICBjbGVhckludGVydmFsKF91cGRhdGVQb2xsVGltZXIpOyBfdXBkYXRlUG9s -bFRpbWVyID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB0b2FzdCgnVXBkYXRlIGFiZ2VzY2hs -b3NzZW46IHYnICsgKGQudG9WZXJzaW9uIHx8ICcnKSArICcg4oCUIFN5c3RlbSBmcmVpZ2VnZWJl -bi4nLCAnZXJmb2xnJywgeyBkYXVlcjogMTIwMDAgfSk7CiAgICAgICAgICAgICAgICAgICAgc2V0 -VGltZW91dCh1cGRhdGVCZXJlaWNoUmVuZGVybiwgMTgwMCk7CiAgICAgICAgICAgICAgICB9IGVs -c2UgaWYgKGQuc3RhdGUgPT09ICdmYWlsZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgY2xlYXJJ -bnRlcnZhbChfdXBkYXRlUG9sbFRpbWVyKTsgX3VwZGF0ZVBvbGxUaW1lciA9IG51bGw7CiAgICAg -ICAgICAgICAgICAgICAgdHh0LnRleHRDb250ZW50ID0gJ0ZFSExHRVNDSExBR0VOOiAnICsgKGQu -ZXJyb3IgfHwgJycpICsgJyDigJQgdm9yaGVyaWdlciBTdGFuZCB3aWVkZXJoZXJnZXN0ZWxsdC4n -OwogICAgICAgICAgICAgICAgICAgIHRvYXN0KCdVcGRhdGUgZmVobGdlc2NobGFnZW4g4oCUIGF1 -dG9tYXRpc2NoZXIgUm9sbGJhY2sgYXVzZ2Vmw7xocnQuJywgJ2ZlaGxlcicsIHsgZGF1ZXI6IDE1 -MDAwIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbigp -IHt9KTsKICAgICAgICB9CiAgICAgICAgdGljaygpOwogICAgICAgIF91cGRhdGVQb2xsVGltZXIg -PSBzZXRJbnRlcnZhbCh0aWNrLCAxMDAwKTsKICAgIH0KCiAgICAvLyBibGVpYnQgZG9ydCwgd28g -ZXIgZ2VyYWRlIGlzdC4gV2VubiBnZXJhZGUgZWluIENoZWNrLU1vZGFsIG9kZXIKICAgIC8vIElt -cGVyc29uYXRpb24tQmFubmVyIGFrdGl2IGlzdCwgdWViZXJzcHJpbmdlbiB3aXIgZGllIEFrdHVh -bGlzaWVydW5nLAogICAgLy8gZGFtaXQga2VpbmUgQXJiZWl0IHZlcmxvcmVuIGdlaHQgYnp3LiBk -ZXIgVGVzdC1Lb250ZXh0IGludGFrdCBibGVpYnQuCiAgICBmdW5jdGlvbiBhZG1pbkhvdFJlbG9h -ZCgpIHsKICAgICAgICBpZiAoZGlydHlBa3RpdmUgJiYgZGlydHlBa3RpdmUoKS5sZW5ndGggPiAw -KSByZXR1cm47ICAvLyBVc2VyIGJlYXJiZWl0ZXQgZ2VyYWRlIHdhcwogICAgICAgIGlmIChpbXBl -cnNvbmF0aW9uQWt0aXYoKSkgcmV0dXJuOyAgLy8gaW0gSW1wZXJzb25hdGlvbnMtTW9kdXMKICAg -ICAgICBQcm9taXNlLmFsbChbYXBpKCcvYXBpL2FkbWluJyksIGFwaSgnL2FwaS9pbmZvJyldKS50 -aGVuKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgdmFyIGFkbWluTmV1ID0gYWRtaW5MaXN0ZW5O -b3JtYWxpc2llcmVuKHJbMF0pOwogICAgICAgICAgICB2YXIgaW5mbyA9IHJbMV07CiAgICAgICAg -ICAgIHZhciByb2xsZW5EaWZmID0gKFoucmVjaHRlICYmIFoucmVjaHRlLnJvbGxlKSAhPT0gaW5m -by5yb2xsZTsKICAgICAgICAgICAgWi5hZG1pbiA9IGFkbWluTmV1OwogICAgICAgICAgICBaLnJl -Y2h0ZSA9IHJlY2h0ZUF1c0luZm8oaW5mbyk7CiAgICAgICAgICAgIC8vIENvZGUtTWFwICsgR3J1 -cHBlbi1NYXAgbmV1IGF1ZmJhdWVuLCBmYWxscyBTY2hpY2h0Y29kZXMvR3J1cHBlbiBtaXQtZ2Vh -ZW5kZXJ0IHd1cmRlbgogICAgICAgICAgICBaLmNvZGVNYXAgPSB7fTsKICAgICAgICAgICAgKFou -YWRtaW4uc2NoaWNodGNvZGVzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHNjKSB7CiAgICAgICAg -ICAgICAgICBaLmNvZGVNYXBbc2MuY29kZV0gPSB7IGhpbnRlcmdydW5kOiBzYy5oaW50ZXJncnVu -ZCwgc2NocmlmdDogc2Muc2NocmlmdCwga3VlcnplbDogc2MuY29kZSB9OwogICAgICAgICAgICB9 -KTsKICAgICAgICAgICAgWi5ncnVwcGVuTWFwID0ge307CiAgICAgICAgICAgIChaLmFkbWluLmdy -dXBwZW4gfHwgW10pLmZvckVhY2goZnVuY3Rpb24oZ3IpIHsKICAgICAgICAgICAgICAgIFouZ3J1 -cHBlbk1hcFtnci5uYW1lXSA9IHsgaGludGVyZ3J1bmQ6IGdyLmhpbnRlcmdydW5kLCBzY2hyaWZ0 -OiBnci5zY2hyaWZ0LCBiZXplaWNobnVuZzogZ3IuYmV6ZWljaG51bmcgfTsKICAgICAgICAgICAg -fSk7CiAgICAgICAgICAgIGJlemVpY2hudW5nZW5BbndlbmRlbigpOwogICAgICAgICAgICBtYXJr -aWVydW5nZW5BbndlbmRlbigpOwogICAgICAgICAgICAvLyBPcHRpb25hbC1Nb2R1bGUgbmFjaGxh -ZGVuLCBmYWxscyBkZXIgVXNlciBnZXJhZGUgZnJpc2NoCiAgICAgICAgICAgIC8vIFN0YXRpc3Rp -ay0vTG9nYnVjaC1SZWNodGUgYmVrb21tZW4gaGF0IChpZGVtcG90ZW50OiBiZXJlaXRzCiAgICAg -ICAgICAgIC8vIGdlbGFkZW5lIE1vZHVsZSB3ZXJkZW4gdWViZXJzcHJ1bmdlbikuCiAgICAgICAg -ICAgIG9wdGlvbmFsZU1vZHVsZUxhZGVuKCk7CiAgICAgICAgICAgIG5hdlNpY2h0YmFya2VpdEFu -d2VuZGVuKCk7CiAgICAgICAgICAgIGFkbWluU3VidGFiRmlsdGVyQW53ZW5kZW4oKTsKICAgICAg -ICAgICAgaWYgKHR5cGVvZiBhZG1pblJlbmRlcm4gPT09ICdmdW5jdGlvbicpIGFkbWluUmVuZGVy -bigpOwogICAgICAgICAgICAvLyBUYWctSW5mb3MgKEZlaWVydGFnZSwgRmVyaWVuLCBTb25kZXJ0 -ZXJtaW5lKSBhdWYgQmFzaXMgZGVyIG5ldWVuCiAgICAgICAgICAgIC8vIGFkbWluLmpzb24gbmV1 -IGJlcmVjaG5lbiwgZGFtaXQgYWxsZSBhbmRlcmVuIFVzZXIgZGllIEFlbmRlcnVuZ2VuCiAgICAg -ICAgICAgIC8vIG9obmUgRjUgc2VoZW4g4oCUIGtvcGZSZW5kZXJuIGxpZXN0IGF1cyBaLnRhZ0lu -Zm9zLgogICAgICAgICAgICBpZiAodHlwZW9mIHRhZ0luZm9zQmVyZWNobmVuID09PSAnZnVuY3Rp -b24nKSB0YWdJbmZvc0JlcmVjaG5lbigpOwogICAgICAgICAgICBpZiAodHlwZW9mIGtvcGZSZW5k -ZXJuID09PSAnZnVuY3Rpb24nKSBrb3BmUmVuZGVybigpOwogICAgICAgICAgICBpZiAocm9sbGVu -RGlmZikgdG9hc3QoJ0RlaW5lIFJlY2h0ZSB3dXJkZW4gZ2VyYWRlIGFrdHVhbGlzaWVydCcsICdp -bmZvJyk7CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7IC8qIHN0dW1tIOKAlCBWZXJzdWNo -IHNwYWV0ZXIgdWViZXIgbmFlY2hzdGVuIEhlYXJ0YmVhdCAqLyB9KTsKICAgIH0KCiAgICAvLyBw -bGFudW5nSG90UmVsb2FkOiBsZWljaHRnZXdpY2h0aWdlIFZhcmlhbnRlIGZ1ZXIgcGxhbnVuZy5q -c29uLW10aW1lLQogICAgLy8gQWVuZGVydW5nZW4uIFdpcmQgdm9tIGhlYXJ0YmVhdC13b3JrZXIg -Z2V0cmlnZ2VydCwgc29iYWxkIHBsYW51bmcuanNvbgogICAgLy8gc2VydmVyc2VpdGlnIHZlcmFl -bmRlcnQgd3VyZGUuIExpdmUtU3luYyBkZWNrdCBaZWxsLS9Lb21tZW50YXItVXBkYXRlcwogICAg -Ly8gYmVyZWl0cyBhYiDigJQgaGllciBnZWh0IGVzIG51ciBkYXJ1bSwgZWlnZW5lIGVkaXRSZWNo -dGUvc2VoZW4tCiAgICAvLyBBZW5kZXJ1bmdlbiBtaXR6dWJla29tbWVuLiBEYWhlciBwb2xsZW4g -d2lyIG51ciAvYXBpL2luZm8gdW5kIHNjaGF1ZW4sCiAgICAvLyBvYiB1bnNlcmUgZWlnZW5lbiBS -ZWNodGUgc2ljaCBhZW5kZXJuOyB3ZW5uIGphLCBuZXUgcmVuZGVybi4KICAgIC8vIChDaGVycnkt -UGljayAxYWVmZTI2IEJ1ZyAjMy4pCiAgICBmdW5jdGlvbiBwbGFudW5nSG90UmVsb2FkKCkgewog -ICAgICAgIGlmIChkaXJ0eUFrdGl2ZSAmJiBkaXJ0eUFrdGl2ZSgpLmxlbmd0aCA+IDApIHJldHVy -bjsKICAgICAgICBpZiAoaW1wZXJzb25hdGlvbkFrdGl2KCkpIHJldHVybjsKICAgICAgICBhcGko -Jy9hcGkvaW5mbycpLnRoZW4oZnVuY3Rpb24oaW5mbykgewogICAgICAgICAgICBpZiAoIWluZm8p -IHJldHVybjsKICAgICAgICAgICAgaWYgKGluZm8udXBkYXRlQXZhaWxhYmxlICYmICFfdXBkYXRl -VG9hc3RTaG93bikgewogICAgICAgICAgICAgICAgX3VwZGF0ZVRvYXN0U2hvd24gPSB0cnVlOwog -ICAgICAgICAgICAgICAgdG9hc3QoCiAgICAgICAgICAgICAgICAgICAgJ1VwZGF0ZSB2ZXJmw7xn -YmFyOiB2JyArIChpbmZvLnJlbW90ZVZlcnNpb24gfHwgJz8nKSArCiAgICAgICAgICAgICAgICAg -ICAgJyDigJQgdXBkYXRlLmJhdCBhdXNmw7xocmVuIHVuZCBTZXJ2ZXIgbmV1IHN0YXJ0ZW4nLAog -ICAgICAgICAgICAgICAgICAgICdpbmZvJywgeyBkYXVlcjogMjAwMDAgfQogICAgICAgICAgICAg -ICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgYWx0UmVjaHRlID0gWi5yZWNodGUg -fHwge307CiAgICAgICAgICAgIHZhciBhbHRTZXJpYWwgPSBKU09OLnN0cmluZ2lmeSh7CiAgICAg -ICAgICAgICAgICBzZWhlbjogICAgIGFsdFJlY2h0ZS5zZWhlbiwKICAgICAgICAgICAgICAgIGVk -aXRpZXJlbjogYWx0UmVjaHRlLmVkaXRpZXJlbiwKICAgICAgICAgICAgICAgIHJvbGxlOiAgICAg -YWx0UmVjaHRlLnJvbGxlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgbmV1U2VyaWFs -ID0gSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgc2VoZW46ICAgICBpbmZvLnNlaGVu -LAogICAgICAgICAgICAgICAgZWRpdGllcmVuOiBpbmZvLmVkaXRpZXJlbiwKICAgICAgICAgICAg -ICAgIHJvbGxlOiAgICAgaW5mby5yb2xsZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYg -KGFsdFNlcmlhbCA9PT0gbmV1U2VyaWFsKSByZXR1cm47ICAvLyBuaWNodHMgUmVsZXZhbnRlcyBn -ZWFlbmRlcnQKICAgICAgICAgICAgWi5yZWNodGUgPSByZWNodGVBdXNJbmZvKGluZm8pOwogICAg -ICAgICAgICBuYXZTaWNodGJhcmtlaXRBbndlbmRlbigpOwogICAgICAgICAgICBhZG1pblN1YnRh -YkZpbHRlckFud2VuZGVuKCk7CiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0ZW5HcmlkUmVuZGVy -biA9PT0gJ2Z1bmN0aW9uJykgZGF0ZW5HcmlkUmVuZGVybigpOwogICAgICAgICAgICBpZiAodHlw -ZW9mIG5hbWVuUmVuZGVybiA9PT0gJ2Z1bmN0aW9uJykgbmFtZW5SZW5kZXJuKCk7CiAgICAgICAg -ICAgIHRvYXN0KCdEZWluZSBSZWNodGUgd3VyZGVuIGdlcmFkZSBha3R1YWxpc2llcnQnLCAnaW5m -bycpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCkgeyAvKiBzdHVtbSDigJQgbmFlY2hzdGVy -IEhlYXJ0YmVhdCB2ZXJzdWNodCdzIHdpZWRlciAqLyB9KTsKICAgIH0KCiAgICAvLyBoZXV0ZUJs -b2NrQWt0dWFsaXNpZXJlbiAtPiBqcy9jb3JlL2RhdGVuTGFkZW4uanMKICAgIC8vCiAgICAvLyA9 -PT09PSBTaWNodGJhcmtlaXQgU3RhdGlzdGlrIC8gTG9nYnVjaCAvIEFkbWluaXN0cmF0aW9uIC8g -QmFja3VwcyA9PT09PQogICAgLy8gZGFyZkFkbWluVGFiL2RhcmZTdGF0aXN0aWsvZGFyZkxvZ2J1 -Y2gsCiAgICAvLyBkYXJmQWRtaW5TdWJ0YWIvZGFyZlN0YXRpc3Rpa1N1YiwKICAgIC8vIGJlcmVj -aG5lRmFjaGF1ZnNpY2h0UmVjaHRlL2JlcmVjaG5lUmVndWxhZXJSZWNodGUsCiAgICAvLyBpbXBl -cnNvbmF0ZSotRnVua3Rpb25lbiAoNSksCiAgICAvLyBBRE1JTl9TVUJUQUJTX05JRU1BTFNfRlVF -Ul9GQUNIQVVGU0lDSFQsIGFkbWluU3VidGFiRmlsdGVyQW53ZW5kZW4sCiAgICAvLyBkYXJmWmVs -bGVFZGl0aWVyZW4sIG5hdlNpY2h0YmFya2VpdEFud2VuZGVuCiAgICAvLyAgIC0+IGpzL2NvcmUv -cGVybWlzc2lvbnMuanMKCiAgICAvLyB0YWdlRXJ6ZXVnZW4sIHRhZ0luZm9zQmVyZWNobmVuLCBz -dGFlcmtlQmVyZWNobmVuIC0+IGpzL2dyaWQvcmVuZGVyLmpzCgogICAgLy8gRnVlaHJ1bmdzLUxv -Z2lrIChmdWVocnVuZ3NTY2hpY2h0LCBmdWVocnVuZ3NaYWVobGVuLCBkZ2xzSW5TY2hpY2h0LCBh -a3RpdmVGdWVocnVuZywgRlVFSFJVTkdfU09MTCksCiAgICAvLyBWZXJhbnR3b3J0dW5nc3dlY2hz -ZWwtU2FtbWVsLU1haWwgKHZlcmFudHdvcnR1bmdzV2VjaHNlbERpYWxvZ1plaWdlbi9FbWFpbE9l -ZmZuZW4sIGludGVybiBpbiBlZGl0b3IuanMpLAogICAgLy8gZ2VzYW10dmVyYW50d29ydGxpY2hF -bWFpbCwgZnVlaHJ1bmdzVW50ZXJiZXNldHp1bmdQcnVlZmVuIC0+IGpzL2dyaWQvZWRpdG9yLmpz -CiAgICAvLwogICAgLy8gaXN0V2FjaGxlaXR1bmdBa3R1ZWxsZXJVc2VyLCB1bnRlcmJlc2V0enVu -Z0FuYWx5c2VWaTMsIHp1RGF0dW1TY3JvbGxlbiwKICAgIC8vIHVudGVyYmVzZXR6dW5nV2FybnVu -Z1plaWdlbiAtPiBqcy9ncmlkL2ludGVyYWN0aW9uLmpzCgogICAgLy8gPT09PT0gQmVzZXR6dW5n -c2tvbnRyb2xsZSAoR2VzYW10dmVyYW50d29ydGxpY2hlLCBIZWFkZXItVGFiKSA9PT09PQogICAg -Ly8gYmVzZXR6dW5nSG9va3MsIGJlc2V0enVuZ3NBbmFseXNlLCBkZWZpeml0QnJpZWZpbmdPZWZm -bmVuLAogICAgLy8gYmVzZXR6dW5nc1RhYkZhcmJlQWt0dWFsaXNpZXJlbiwgZ2VzYW10dmVyYW50 -d29ydGxpY2hWb3JuYW1lRXJtaXR0ZWxuLAogICAgLy8gYmVzZXR6dW5nc2tvbnRyb2xsZVJlbmRl -cm4sIGJlc2V0enVuZ3Nrb250cm9sbGVFdmVudHNBdWZoYWVuZ2VuLAogICAgLy8gZnJlaVBlcnNv -bmVuRnVlciwgYmVzZXR6dW5nTWFpbE1vZGFsIC0+IGpzL2Jlc2V0enVuZy9iZXNldHp1bmcuanMK -CiAgICAvLyBzY2hyYWZmdXJCZXJlY2huZW4sIGdyaWRSZW5kZXJuIC0+IGpzL2dyaWQvcmVuZGVy -LmpzCgogICAgLy8ga29wZlJlbmRlcm4sIG5hbWVuUmVuZGVybiwgZGF0ZW5HcmlkUmVuZGVybiwg -emVsbGVWaXN1ZWxsQWt0dWFsaXNpZXJlbiwgc3RhZXJrZVplbGxlQWt0dWFsaXNpZXJlbiAtPiBq -cy9ncmlkL3JlbmRlci5qcwoKICAgIC8vIGVkaXRvciAoTW9kdWwtU3RhdGUpLCBlZGl0b3JPZWZm -bmVuLCBlZGl0b3JTY2hsaWVzc2VuLCBlZGl0b3JBdXN3YWhsLCBuYWNoYmFyRGF0dW0sIHNjaGlj -aHRUeXAsIHJ1aGV6ZWl0UHJ1ZWZlbiAtPiBqcy9ncmlkL2VkaXRvci5qcwoKICAgIC8vIHNjcm9s -bFN5bmMsIHp1bUhldXRpZ2VuRGF0dW0sIGFuc2ljaHRXZWNoc2VsbiAtPiBqcy9ncmlkL3JlbmRl -ci5qcwoKICAgIC8vID09PT09IEFkbWluIChrb25zb2xpZGllcnQ6IERpc3BhdGNoZXIgKyBQZXJz -b25lbiArIExpc3RlbiArCiAgICAvLyAgIEJlemVpY2hudW5nZW4gKyBCYWNrdXBzICsgU2NoaWNo -dGNvZGVzICsgRmVhdHVyZXMgKyBTdXBlclVzZXIgKwogICAgLy8gICBGYWNoYXVmc2ljaHQgKyBT -dWItU2ljaHRiYXJrZWl0KSAtPiBqcy9hZG1pbi9hZG1pbi5qcwoKICAgIC8vID09PT09IFN0YXRp -c3RpayA9PT09PSAtPiBqcy9zdGF0aXN0aWsuanMKICAgIC8vID09PT09IFdvY2hlbnBsYW4gKyBQ -ZXJzb25lbi1QbGFuID09PT09IC0+IGpzL3dvY2hlbnBsYW4vd29jaGVucGxhbi5qcwogICAgLy8g -PT09PT0gSW5mb3JtYXRpb25zZmVuc3RlciA9PT09PQoKICAgIC8vIERlZmF1bHQtQmVkaWVudW5n -cy1IaW53ZWlzZSDigJQgZ3JlaWZlbiB3ZW5uIGFkbWluLmJlZGllbnVuZ3N0ZXh0ZSBsZWVyCiAg -ICAvLyBvZGVyIG5pY2h0IHZvcmhhbmRlbiBpc3QuIEplZGUgWmVpbGUgd2lyZCBhbHMgZWlnZW5l -ciBMaXN0ZW5laW50cmFnCiAgICAvLyBnZXJlbmRlcnQ7IEZvcm1hdCAiVGl0ZWw6IFRleHQiIC0+ -IFRpdGVsIGZldHQuCiAgICB2YXIgQkVESUVOVU5HX0RFRkFVTFQgPQogICAgICAgICdQbGFudW5n -OiBBdWYgZWluZSBaZWxsZSBrbGlja2VuIHVtIGRlbiBTY2hpY2h0Y29kZSB6dSDDpG5kZXJuLiBL -b21tZW50YXIgw7xiZXIgZGFzIEVpbmdhYmVmZWxkIGltIEVkaXRvci5cbicgKwogICAgICAgICdX -b2NoZW5wbGFuOiBER0wgdW5kIFdERi9GQlAgZ2V0cmVubnQgZGFyZ2VzdGVsbHQsIG1pdCBEaWVu -c3RudW1tZXJuLiAqIG1hcmtpZXJ0IEJlc2V0enVuZyBhdXMgZGVtIEZ1bmt0aW9uc2Jlc2V0enVu -Z3NwbGFuLlxuJyArCiAgICAgICAgJ1BlcnMuIFBsYW46IEphaHJlc8O8YmVyc2ljaHQgZsO8ciBl -aW5lIGVpbnplbG5lIFBlcnNvbiBtaXQgTW9uYXRza2FsZW5kZXJuLlxuJyArCiAgICAgICAgJ0hl -dXRlLUJ1dHRvbjogU2Nyb2xsdCB6dW0gaGV1dGlnZW4gRGF0dW0uXG4nICsKICAgICAgICAnQmFj -a3VwOiBFcnN0ZWxsdCBlaW5lIFNpY2hlcnVuZ3Nrb3BpZSBkZXIgYWt0dWVsbGVuIFBsYW51bmcu -XG4nICsKICAgICAgICAnVmVyYW50d29ydGxpY2g6IERpZSByYW5naMO2Y2hzdGUgUGVyc29uIHBy -byBTY2hpY2h0IHdpcmQgZ29sZGZhcmJlbiBtYXJraWVydC5cbicgKwogICAgICAgICdLb21tZW50 -YXJlOiBaZWxsZW4gbWl0IEtvbW1lbnRhciBoYWJlbiBlaW4gZ29sZGVuZXMgRHJlaWVjayBvYmVu -IHJlY2h0cy5cbicgKwogICAgICAgICdCYWRnZXMgaW0gSGVhZGVyOiDwn46CIEdlYnVydHN0YWcs -IOKaoCBXYXJudW5nLCDihLkgSGlud2VpcyDigJQgZGlyZWt0IGFtIGpld2VpbGlnZW4gVGFnLic7 -CgogICAgZnVuY3Rpb24gYmVkaWVudW5nWmVpbGVuUmVuZGVybih0eHQpIHsKICAgICAgICB2YXIg -cXVlbGxlID0gdHh0IHx8ICcnOwogICAgICAgIGlmICghcXVlbGxlLnRyaW0oKSkgcmV0dXJuICcn -OwogICAgICAgIHJldHVybiBxdWVsbGUuc3BsaXQoL1xyP1xuLykubWFwKGZ1bmN0aW9uKHplaWxl -KSB7CiAgICAgICAgICAgIHplaWxlID0gemVpbGUudHJpbSgpOwogICAgICAgICAgICBpZiAoIXpl -aWxlKSByZXR1cm4gJyc7CiAgICAgICAgICAgIHZhciBtID0gemVpbGUubWF0Y2goL14oW146XXsy -LDQwfSk6XHMqKC4rKSQvKTsKICAgICAgICAgICAgaWYgKG0pIHsKICAgICAgICAgICAgICAgIHJl -dHVybiAnPGxpPjxzdHJvbmc+JyArIGVzY2FwZUhUTUwobVsxXSkgKyAnOjwvc3Ryb25nPiAnICsg -ZXNjYXBlSFRNTChtWzJdKSArICc8L2xpPic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0 -dXJuICc8bGk+JyArIGVzY2FwZUhUTUwoemVpbGUpICsgJzwvbGk+JzsKICAgICAgICB9KS5maWx0 -ZXIoQm9vbGVhbikuam9pbignJyk7CiAgICB9CgogICAgLy8gR3J1cHBpZXJ0IGRpZSBTY2hpY2h0 -Y29kZXMgbmFjaCBkZXIgdm9yaGFuZGVuZW4gS2F0ZWdvcmllLUxvZ2lrIHVuZAogICAgLy8gbGll -ZmVydCBIVE1MIGZ1ZXIgZWluIDMtc3BhbHRpZ2VzIFJhc3RlciBwcm8gR3J1cHBlLgogICAgZnVu -Y3Rpb24gc2NoaWNodGNvZGVMZWdlbmRlSHRtbCgpIHsKICAgICAgICB2YXIgbGlzdGUgPSAoWi5h -ZG1pbi5zY2hpY2h0Y29kZXMgfHwgW10pLmZpbHRlcihpc3RDb2RlQWt0aXYpOwogICAgICAgIHZh -ciBncnVwcGVuID0ge307CiAgICAgICAgbGlzdGUuZm9yRWFjaChmdW5jdGlvbihzYykgewogICAg -ICAgICAgICB2YXIgayA9IHNjaGljaHRjb2RlS2F0ZWdvcmllKHNjLmNvZGUpOwogICAgICAgICAg -ICBpZiAoIWdydXBwZW5bay5rZXldKSBncnVwcGVuW2sua2V5XSA9IHsgbGFiZWw6IGsubGFiZWws -IGl0ZW1zOiBbXSB9OwogICAgICAgICAgICBncnVwcGVuW2sua2V5XS5pdGVtcy5wdXNoKHNjKTsK -ICAgICAgICB9KTsKICAgICAgICBmdW5jdGlvbiB0aWxlKHNjKSB7CiAgICAgICAgICAgIHJldHVy -biAnPGRpdiBjbGFzcz0ic2MtbGVnZW5kZS16ZWxsZSI+JyArCiAgICAgICAgICAgICAgICAnPHNw -YW4gY2xhc3M9InNjLWxlZ2VuZGUtZmFyYmZlbGQiIHN0eWxlPSJiYWNrZ3JvdW5kOicgKyBlc2Nh -cGVBdHRyKHNjLmhpbnRlcmdydW5kIHx8ICcjODg4JykgKyAnO2NvbG9yOicgKyBlc2NhcGVBdHRy -KHNjLnNjaHJpZnQgfHwgJyNmZmYnKSArICciPicgKyBlc2NhcGVIVE1MKHNjLmNvZGUpICsgJzwv -c3Bhbj4nICsKICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz0ic2MtbGVnZW5kZS10ZXh0Ij48 -c3Ryb25nPicgKyBlc2NhcGVIVE1MKHNjLmNvZGUpICsgJzwvc3Ryb25nPjxicj48c3BhbiBzdHls -ZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCkiPicgKyBlc2NhcGVIVE1M -KHNjLmJlemVpY2hudW5nIHx8ICcnKSArICc8L3NwYW4+PC9zcGFuPicgKwogICAgICAgICAgICAg -ICAgJzwvZGl2Pic7CiAgICAgICAgfQogICAgICAgIHZhciBodG1sID0gJyc7CiAgICAgICAgT2Jq -ZWN0LmtleXMoZ3J1cHBlbikuc29ydCgpLmZvckVhY2goZnVuY3Rpb24oaykgewogICAgICAgICAg -ICB2YXIgZyA9IGdydXBwZW5ba107CiAgICAgICAgICAgIGcuaXRlbXMuc29ydChmdW5jdGlvbihh -LCBiKSB7IHJldHVybiAoYS5jb2RlIHx8ICcnKS5sb2NhbGVDb21wYXJlKGIuY29kZSB8fCAnJywg -J2RlJyk7IH0pOwogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzYy1sZWdlbmRlLWdy -dXBwZSI+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ic2MtbGVnZW5kZS10aXRlbCI+ -JyArIGVzY2FwZUhUTUwoZy5sYWJlbCkgKyAnIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo1MDA7 -b3BhY2l0eTowLjYiPignICsgZy5pdGVtcy5sZW5ndGggKyAnKTwvc3Bhbj48L2Rpdj4nICsKICAg -ICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzYy1sZWdlbmRlLWdyaWQiPicgKyBnLml0ZW1zLm1h -cCh0aWxlKS5qb2luKCcnKSArICc8L2Rpdj4nICsKICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAg -ICAgfSk7CiAgICAgICAgcmV0dXJuIGh0bWw7CiAgICB9CgogICAgZnVuY3Rpb24gaW5mb0ZlbnN0 -ZXJaZWlnZW4oKSB7CiAgICAgICAgdmFyIGluZm9CbG9jayA9ICcnOwogICAgICAgIGlmIChaLmFk -bWluLmluZm90ZXh0KSB7CiAgICAgICAgICAgIGluZm9CbG9jayArPSAnPGRpdiBjbGFzcz0iaW5m -by1rYXJ0ZSBpbmZvLWthcnRlLWluZm8iPjxzdHJvbmc+SW5mb3RleHQ6PC9zdHJvbmc+PGJyPicg -KwogICAgICAgICAgICAgICAgaHRtbEF1c0ZlbGQoWi5hZG1pbi5pbmZvdGV4dCkgKyAnPC9kaXY+ -JzsKICAgICAgICB9CiAgICAgICAgaWYgKFouYWRtaW4uc3VwcG9ydGluZm8pIHsKICAgICAgICAg -ICAgaW5mb0Jsb2NrICs9ICc8ZGl2IGNsYXNzPSJpbmZvLWthcnRlIGluZm8ta2FydGUtc3VwcG9y -dCI+PHN0cm9uZz5TdXBwb3J0Ojwvc3Ryb25nPjxicj4nICsKICAgICAgICAgICAgICAgIGh0bWxB -dXNGZWxkKFouYWRtaW4uc3VwcG9ydGluZm8pICsgJzwvZGl2Pic7CiAgICAgICAgfQogICAgICAg -IC8vIEFuc3ByZWNocGFydG5lcjogUGVyc29uZW4gbWl0IEZsYWcgaXN0QW5zcHJlY2hwYXJ0bmVy -PXRydWUuIFNlaXQKICAgICAgICAvLyAyMDI2LTA1LTI1IG9obmUgRnVua3Rpb25zLSBvZGVyIERp -ZW5zdGdydXBwZW4tR2F0aW5nICh0aGVvcmV0aXNjaAogICAgICAgIC8vIGthbm4gamVkZSBQZXJz -b24gYWxzIEFuc3ByZWNocGFydG5lciBiZW5hbm50IHdlcmRlbikuIERpZSBhbHRlbgogICAgICAg -IC8vIEZlbGRlciBGdW5rdGlvbi5pblBsYW51bmcgdW5kIERpZW5zdGdydXBwZS5kYXJmQW5zcHJl -Y2hwYXJ0bmVyCiAgICAgICAgLy8gd2VyZGVuIGhpZXIgbmljaHQgbWVociBhdXNnZXdlcnRldC4K -ICAgICAgICB2YXIgYXBMaXN0ZSA9IChaLnBsYW51bmcucGVyc29uZW4gfHwgW10pCiAgICAgICAg -ICAgIC5maWx0ZXIoZnVuY3Rpb24ocCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHAuaXN0QW5z -cHJlY2hwYXJ0bmVyICYmICFwLmdlbG9lc2NodEFtOwogICAgICAgICAgICB9KQogICAgICAgICAg -ICAuc29ydChmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgICAgICAgICB2YXIgcmEgPSAoKFouYWRt -aW4uZnVua3Rpb25lbiB8fCBbXSkuZmluZChmdW5jdGlvbih4KSB7IHJldHVybiB4LmNvZGUgPT09 -IGEuZnVua3Rpb247IH0pIHx8IHt9KS5yYW5nOwogICAgICAgICAgICAgICAgdmFyIHJiID0gKCha -LmFkbWluLmZ1bmt0aW9uZW4gfHwgW10pLmZpbmQoZnVuY3Rpb24oeCkgeyByZXR1cm4geC5jb2Rl -ID09PSBiLmZ1bmt0aW9uOyB9KSB8fCB7fSkucmFuZzsKICAgICAgICAgICAgICAgIGlmIChyYSA9 -PSBudWxsKSByYSA9IDk5OwogICAgICAgICAgICAgICAgaWYgKHJiID09IG51bGwpIHJiID0gOTk7 -CiAgICAgICAgICAgICAgICBpZiAocmEgIT09IHJiKSByZXR1cm4gcmEgLSByYjsKICAgICAgICAg -ICAgICAgIHJldHVybiAoKGEubmFtZSB8fCAnJykgKyAnICcgKyAoYS52b3JuYW1lIHx8ICcnKSku -bG9jYWxlQ29tcGFyZSgoKGIubmFtZSB8fCAnJykgKyAnICcgKyAoYi52b3JuYW1lIHx8ICcnKSks -ICdkZScpOwogICAgICAgICAgICB9KTsKICAgICAgICBpZiAoYXBMaXN0ZS5sZW5ndGggPiAwKSB7 -CiAgICAgICAgICAgIC8vIE1haWwtQnV0dG9uIHBybyBBbnNwcmVjaHBhcnRuZXI6IG9lZmZuZXQg -T3V0bG9vayAobWFpbHRvOikKICAgICAgICAgICAgLy8gbWl0IHZvcmJlZnVlbGx0ZW0gQmV0cmVm -ZiArIEVpbmxlaXR1bmcuIEJvZHkgbnV0enQgZGllCiAgICAgICAgICAgIC8vIGR0LiBBbnJlZGUg -KyBCZXp1ZyBhdWYgZGllIFNjaGljaHRwbGFudW5nOyBBYnNlbmRlciB3aXJkIGluCiAgICAgICAg -ICAgIC8vIGRlciBNYWlsLVNpZ25hdHVyIGxlZXIgZ2VsYXNzZW4sIHdlaWwgT3V0bG9vayBkYXMg -c2VsYnN0CiAgICAgICAgICAgIC8vIGFuaGFlbmd0LgogICAgICAgICAgICB2YXIgYXBwVGl0ZWwg -PSBiZXooJ2FwcC50aXRlbCcpOwogICAgICAgICAgICB2YXIgYXBIdG1sID0gYXBMaXN0ZS5tYXAo -ZnVuY3Rpb24ocCkgewogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAoKHAuZGllbnN0Z3JhZCA/ -IHAuZGllbnN0Z3JhZCArICcgJyA6ICcnKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo -cC52b3JuYW1lID8gcC52b3JuYW1lICsgJyAnIDogJycpICsgKHAubmFtZSB8fCAnJykpLnRyaW0o -KTsKICAgICAgICAgICAgICAgIHZhciB6ZWlsZSA9ICc8c3Ryb25nPicgKyBlc2NhcGVIVE1MKG5h -bWUpICsgJzwvc3Ryb25nPic7CiAgICAgICAgICAgICAgICB2YXIgcmVjaHRzID0gW107CiAgICAg -ICAgICAgICAgICBpZiAocC5mdW5rdGlvbikgcmVjaHRzLnB1c2goZXNjYXBlSFRNTChwLmZ1bmt0 -aW9uKSk7CiAgICAgICAgICAgICAgICBpZiAocC5vZSkgICAgICAgcmVjaHRzLnB1c2goZXNjYXBl -SFRNTChwLm9lKSk7CiAgICAgICAgICAgICAgICBpZiAocC50ZWxlZm9uKSAgcmVjaHRzLnB1c2go -J1RlbC4gPHN0cm9uZz4nICsgZXNjYXBlSFRNTChwLnRlbGVmb24pICsgJzwvc3Ryb25nPicpOwog -ICAgICAgICAgICAgICAgaWYgKHJlY2h0cy5sZW5ndGgpIHplaWxlICs9ICcg4oCUICcgKyByZWNo -dHMuam9pbignLCAnKTsKICAgICAgICAgICAgICAgIHZhciBtYWlsQnRuID0gJyc7CiAgICAgICAg -ICAgICAgICBpZiAocC5lbWFpbCkgewogICAgICAgICAgICAgICAgICAgIHZhciBhbnJlZGUgPSAo -cC52b3JuYW1lID8gcC52b3JuYW1lICsgJyAnICsgKHAubmFtZSB8fCAnJykgOiAocC5uYW1lIHx8 -ICcnKSkudHJpbSgpOwogICAgICAgICAgICAgICAgICAgIHZhciBiZXRyZWZmID0gJ0FuZnJhZ2Ug -enVyIFNjaGljaHRwbGFudW5nIOKAlCAnICsgYXBwVGl0ZWw7CiAgICAgICAgICAgICAgICAgICAg -dmFyIGJvZHkgPSAnSGFsbG8gJyArIGFucmVkZSArICcsXG5cbicgKwogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJ2ljaCBoYWJlIGVpbmUgRnJhZ2UgenVyIFNjaGljaHRwbGFudW5nIHVu -ZCBtZWxkZSBtaWNoIGJlaSBEaXIsIHdlaWwgRHUgYWxzIEFuc3ByZWNocGFydG5lciBoaW50ZXJs -ZWd0IGJpc3QuXG5cbicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1toaWVyIGt1 -cnogQW5saWVnZW4gYmVzY2hyZWliZW5dXG5cbicgKwogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJ1ZpZWxlbiBEYW5rIHVuZCB2aWVsZSBHcsO8w59lJzsKICAgICAgICAgICAgICAgICAg -ICB2YXIgaHJlZiA9ICdtYWlsdG86JyArIGVuY29kZVVSSUNvbXBvbmVudChwLmVtYWlsKSArCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnP3N1YmplY3Q9JyArIGVuY29kZVVSSUNvbXBv -bmVudChiZXRyZWZmKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJmJvZHk9JyAr -IGVuY29kZVVSSUNvbXBvbmVudChib2R5KTsKICAgICAgICAgICAgICAgICAgICBtYWlsQnRuID0g -JyA8YSBjbGFzcz0iaW5mby1hcC1tYWlsYnRuIiBocmVmPSInICsgZXNjYXBlQXR0cihocmVmKSAr -ICciJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdGl0bGU9IkUtTWFpbCBhbiAn -ICsgZXNjYXBlQXR0cihuYW1lKSArICcgKCcgKyBlc2NhcGVBdHRyKHAuZW1haWwpICsgJykgw7Zm -Zm5lbiI+TWFpbDwvYT4nOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg -ICAgICBtYWlsQnRuID0gJyA8c3BhbiBjbGFzcz0iaW5mby1hcC1rZWlubWFpbCIgdGl0bGU9Iktl -aW5lIEUtTWFpbC1BZHJlc3NlIGhpbnRlcmxlZ3QiPuKAlCBrZWluZSBFLU1haWwg4oCUPC9zcGFu -Pic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJzxsaSBzdHlsZT0i -bWFyZ2luLWJvdHRvbTo0cHgiPicgKyB6ZWlsZSArIG1haWxCdG4gKyAnPC9saT4nOwogICAgICAg -ICAgICB9KS5qb2luKCcnKTsKICAgICAgICAgICAgaW5mb0Jsb2NrICs9ICc8ZGl2IGNsYXNzPSJp -bmZvLWthcnRlIGluZm8ta2FydGUtc3VwcG9ydCI+JyArCiAgICAgICAgICAgICAgICAnPHN0cm9u -Zz5BbnNwcmVjaHBhcnRuZXI6PC9zdHJvbmc+JyArCiAgICAgICAgICAgICAgICAnPHVsIHN0eWxl -PSJtYXJnaW46NnB4IDAgMCAxOHB4O3BhZGRpbmc6MDtsaXN0LXN0eWxlOmRpc2MiPicgKyBhcEh0 -bWwgKyAnPC91bD48L2Rpdj4nOwogICAgICAgIH0KCiAgICAgICAgLy8gQWxsZ2VtZWluZSBIaWxm -ZSDigJQgb3B0aW9uYWwgYXVzIGFkbWluLmpzb24uaGlsZmV0ZXh0IChSaWNoLVRleHQpCiAgICAg -ICAgdmFyIGhpbGZlQmxvY2sgPSAnJzsKICAgICAgICBpZiAoWi5hZG1pbi5oaWxmZXRleHQgJiYg -U3RyaW5nKFouYWRtaW4uaGlsZmV0ZXh0KS50cmltKCkpIHsKICAgICAgICAgICAgaGlsZmVCbG9j -ayA9ICc8aDMgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtaGVhZGluZyk7bWFyZ2luLWJvdHRvbTo4 -cHg7bWFyZ2luLXRvcDoxMnB4Ij5BbGxnZW1laW5lIEhpbGZlPC9oMz4nICsKICAgICAgICAgICAg -ICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjY7bWFyZ2luLWJv -dHRvbToxNnB4Ij4nICsKICAgICAgICAgICAgICAgIGh0bWxBdXNGZWxkKFouYWRtaW4uaGlsZmV0 -ZXh0KSArICc8L2Rpdj4nOwogICAgICAgIH0KCiAgICAgICAgLy8gQmVkaWVudW5nIOKAlCBhdXMg -YWRtaW4uanNvbi5iZWRpZW51bmdzdGV4dGUgKFJpY2gtVGV4dCBvZGVyIFBsYWluKSwKICAgICAg -ICAvLyBzb25zdCBEZWZhdWx0LiBXZW5uIEhUTUwgdm9yaGFuZGVuIChlbnRoYWVsdCA8dWw+Lzxs -aT4pLCBkaXJla3QgZWluZnVlZ2VuOwogICAgICAgIC8vIHNvbnN0IFplaWxlbi16dS1CdWxsZXRz -LVVtd2FuZGx1bmcuCiAgICAgICAgdmFyIGJlZGllbnVuZ1F1ZWxsZSA9IFouYWRtaW4uYmVkaWVu -dW5nc3RleHRlOwogICAgICAgIHZhciBiZWRpZW51bmc7CiAgICAgICAgaWYgKGJlZGllbnVuZ1F1 -ZWxsZSAmJiBTdHJpbmcoYmVkaWVudW5nUXVlbGxlKS50cmltKCkpIHsKICAgICAgICAgICAgaWYg -KC88XC8/KHVsfG9sfGxpKVxiL2kudGVzdChiZWRpZW51bmdRdWVsbGUpKSB7CiAgICAgICAgICAg -ICAgICAvLyBTY2hvbiBmZXJ0aWdlcyBIVE1MIG1pdCBMaXN0ZW4g4oCUIGRpcmVrdCB1ZWJlcm5l -aG1lbiAoc2FuaXRpemVkKS4KICAgICAgICAgICAgICAgIC8vIENTUy1SZWdlbG4gZnVlciAuaW5m -by1hYnNjaG5pdHQgdWwvbGkgc3RldWVybiBFaW5ydWVja3VuZyAmIEFic3RhbmQuCiAgICAgICAg -ICAgICAgICBiZWRpZW51bmcgPSBzYW5pdGl6ZVJpY2hIdG1sKGJlZGllbnVuZ1F1ZWxsZSk7CiAg -ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBiZWRpZW51bmcgPSAnPHVsPicgKyBi -ZWRpZW51bmdaZWlsZW5SZW5kZXJuKGJlZGllbnVuZ1F1ZWxsZSkgKyAnPC91bD4nOwogICAgICAg -ICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmVkaWVudW5nID0gJzx1bD4nICsg -YmVkaWVudW5nWmVpbGVuUmVuZGVybihCRURJRU5VTkdfREVGQVVMVCkgKyAnPC91bD4nOwogICAg -ICAgIH0KCiAgICAgICAgLy8gV2Vya3pldWdlLVNla3Rpb24gKFVYLUF1ZGl0IFNwcmludCAyLjUs -IDIwMjYtMDUtMjkpOiBTeW5jLUNoZWNrCiAgICAgICAgLy8gdW5kIERpYWdub3NlLVNlaXRlIGV4 -aXN0aWVyZW4gYWxzIC9zeW5jLWNoZWNrLmh0bWwgYnp3LgogICAgICAgIC8vIC9kaWFnbm9zZS5o -dG1sLCBzaW5kIGFiZXIgdm9uIGtlaW5lciBhbmRlcmVuIFN0ZWxsZSBpbiBkZXIgQXBwCiAgICAg -ICAgLy8gdmVybGlua3QuIEhpZXIgaW4gZGVyIEluZm8tTW9kYWwgYXVmbmVobWVuLCBkYW1pdCBB -ZG1pbnMrU1Ugc2llCiAgICAgICAgLy8gb2huZSBVUkwtVGlwcGVyZWkgb2VmZm5lbiBrb2VubmVu -LgogICAgICAgIHZhciB3ZXJremV1Z2VCbG9jayA9ICcnOwogICAgICAgIGlmIChkYXJmQWRtaW5U -YWIoKSkgewogICAgICAgICAgICB3ZXJremV1Z2VCbG9jayA9ICc8ZGl2IGNsYXNzPSJpbmZvLWFi -c2Nobml0dCI+PGgzPldlcmt6ZXVnZTwvaDM+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBzdHls -ZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXAiPicgKwogICAgICAgICAgICAg -ICAgICAgICc8YSBjbGFzcz0iYnRuIGJ0bi1zZWsiIGhyZWY9Ii9zeW5jLWNoZWNrLmh0bWwiIHRh -cmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiB0aXRsZT0iTW9kdWwtTGFkZS1EaWFnbm9zZTog -cHJ1ZWZ0LCBvYiBhbGxlIEpTL0NTUy1EYXRlaWVuIGZlaGxlcmZyZWkgZ2VsYWRlbiB3ZXJkZW4i -PlN5bmMtQ2hlY2sgw7ZmZm5lbjwvYT4nICsKICAgICAgICAgICAgICAgICAgICAnPGEgY2xhc3M9 -ImJ0biBidG4tc2VrIiBocmVmPSIvZGlhZ25vc2UuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0i -bm9vcGVuZXIiIHRpdGxlPSJTeXN0ZW0tRGlhZ25vc2U6IFNlcnZlci1WZXJzaW9uLCBIZWFydGJl -YXQsIFBlcm1pc3Npb25zIj5EaWFnbm9zZSDDtmZmbmVuPC9hPicgKwogICAgICAgICAgICAgICAg -JzwvZGl2PicgKwogICAgICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAgfQoKICAgICAgICAv -LyBUYXN0YXR1cmt1ZXJ6ZWwtU2VrdGlvbiAoVVgtQXVkaXQgU3ByaW50IDMuNywgMjAyNi0wNS0y -OSk6CiAgICAgICAgLy8gUG93ZXItVXNlci1Eb2t1IGltIEluZm8tTW9kYWwsIGRhbWl0IGRpZSB2 -b3JoYW5kZW5lbiBTaG9ydGN1dHMKICAgICAgICAvLyAoRVNDIGZ1ZXIgTW9kYWwsIFRhYiBmdWVy -IEZva3VzLVRyYXAsIEVudGVyIHp1bSBTcGVpY2hlcm4sCiAgICAgICAgLy8gRG9wcGVsa2xpY2sg -aW0gR3JpZCkgZGlzY292ZXJhYmxlIHdlcmRlbi4KICAgICAgICB2YXIgdGFzdGF0dXJCbG9jayA9 -CiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJpbmZvLWFic2Nobml0dCI+PGgzPlRhc3RhdHVya8O8 -cnplbDwvaDM+JyArCiAgICAgICAgICAgICAgICAnPHRhYmxlIGNsYXNzPSJpbmZvLXNob3J0Y3V0 -cyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzx0cj48dGg+VGFzdGVua29tYmluYXRpb248L3Ro -Pjx0aD5XaXJrdW5nPC90aD48L3RyPicgKwogICAgICAgICAgICAgICAgICAgICc8dHI+PHRkPjxr -YmQ+RXNjPC9rYmQ+PC90ZD48dGQ+U2NobGllc3N0IGRhcyBvYmVyc3RlIE1vZGFsIChMSUZPIGJl -aSB2ZXJzY2hhY2h0ZWx0ZW4gRGlhbG9nZW4pPC90ZD48L3RyPicgKwogICAgICAgICAgICAgICAg -ICAgICc8dHI+PHRkPjxrYmQ+VGFiPC9rYmQ+IC8gPGtiZD5TaGlmdCtUYWI8L2tiZD48L3RkPjx0 -ZD5Gb2t1cyBpbm5lcmhhbGIgZGVzIE1vZGFscyB3ZWl0ZXIgLyB6dXJ1ZWNrIChGb2N1cy1UcmFw -KTwvdGQ+PC90cj4nICsKICAgICAgICAgICAgICAgICAgICAnPHRyPjx0ZD48a2JkPkVudGVyPC9r -YmQ+PC90ZD48dGQ+SW0gTW9kYWw6IFNwZWljaGVybi4gSW0gS29tbWVudGFyLUVkaXRvcjogS29t -bWVudGFyIGhpbnp1ZnVlZ2VuPC90ZD48L3RyPicgKwogICAgICAgICAgICAgICAgICAgICc8dHI+ -PHRkPjxrYmQ+TGlua3NrbGljazwva2JkPiBhdWYgWmVsbGU8L3RkPjx0ZD5aZWxsZSBtYXJraWVy -ZW4gKGF1c3dhZWhsZW4pPC90ZD48L3RyPicgKwogICAgICAgICAgICAgICAgICAgICc8dHI+PHRk -PjxrYmQ+UmVjaHRza2xpY2s8L2tiZD4gYXVmIFplbGxlPC90ZD48dGQ+U2NoaWNodC1FZGl0b3Ig -b2VmZm5lbiAoQXVzbMO2c2UtQWt0aW9uIGltIEJhY2tlbmQgZWluc3RlbGxiYXI6IExpbmtzLS9S -ZWNodHMtL01hdXNyYWQtL0RvcHBlbGtsaWNrKTwvdGQ+PC90cj4nICsKICAgICAgICAgICAgICAg -ICAgICAnPHRyPjx0ZD48a2JkPktsaWNrPC9rYmQ+IGF1ZiBUYWctSGVhZGVyPC90ZD48dGQ+VGFn -LURldGFpbC1Nb2RhbCAoYWxsZSBQZXJzb25lbiBhbSBUYWcpPC90ZD48L3RyPicgKwogICAgICAg -ICAgICAgICAgICAgICc8dHI+PHRkPjxrYmQ+SG92ZXI8L2tiZD4gYXVmIEtvbW1lbnRhci1NYXJr -ZXI8L3RkPjx0ZD5Lb21tZW50YXItUG9wb3ZlciAoMjUwIG1zIFZlcnpvZWdlcnVuZyk8L3RkPjwv -dHI+JyArCiAgICAgICAgICAgICAgICAgICAgJzx0cj48dGQ+PGtiZD5EcmFnPC9rYmQ+IGF1ZiBG -aWxsLUhhbmRsZTwvdGQ+PHRkPldlcnQgbmFjaCBsaW5rcy9yZWNodHMgaW4gZGVyc2VsYmVuIFpl -aWxlIGtvcGllcmVuIChFeGNlbC1hZWhubGljaDsga2VpbiBBdXNmdWVsbGVuIG5hY2ggb2Jlbi91 -bnRlbik8L3RkPjwvdHI+JyArCiAgICAgICAgICAgICAgICAnPC90YWJsZT4nICsKICAgICAgICAg -ICAgJzwvZGl2Pic7CgogICAgICAgIHZhciBrb2VycGVyID0gJzxkaXYgc3R5bGU9ImxpbmUtaGVp -Z2h0OjEuNyI+JyArCiAgICAgICAgICAgIChpbmZvQmxvY2sgPyBpbmZvQmxvY2sgOiAnJykgKwog -ICAgICAgICAgICAoaGlsZmVCbG9jayA/ICc8ZGl2IGNsYXNzPSJpbmZvLWFic2Nobml0dCI+JyAr -IGhpbGZlQmxvY2sgKyAnPC9kaXY+JyA6ICcnKSArCiAgICAgICAgICAgIChiZWRpZW51bmcKICAg -ICAgICAgICAgICAgID8gJzxkaXYgY2xhc3M9ImluZm8tYWJzY2huaXR0Ij48aDM+QmVkaWVudW5n -PC9oMz4nICsgYmVkaWVudW5nICsgJzwvZGl2PicKICAgICAgICAgICAgICAgIDogJycpICsKICAg -ICAgICAgICAgJzxkaXYgY2xhc3M9ImluZm8tYWJzY2huaXR0Ij48aDM+U2NoaWNodGNvZGUtTGVn -ZW5kZTwvaDM+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ic2MtbGVnZW5kZS1jb250 -YWluZXIiPicgKyBzY2hpY2h0Y29kZUxlZ2VuZGVIdG1sKCkgKyAnPC9kaXY+JyArCiAgICAgICAg -ICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgdGFzdGF0dXJCbG9jayArCiAgICAgICAgICAgIHdl -cmt6ZXVnZUJsb2NrICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImluZm8tZnVzcyI+JyArCiAg -ICAgICAgICAgICAgICBlc2NhcGVIVE1MKGJleignYXBwLnRpdGVsJykpICsgJyAnICsgKFouYWRt -aW4uamFociB8fCAnJykgKyAnIOKAlCBCZW51dHplcjogJyArIGVzY2FwZUhUTUwoWi5iZW51dHpl -cikgKwogICAgICAgICAgICAnPC9kaXY+PC9kaXY+JzsKCiAgICAgICAgbW9kYWxaZWlnZW4oJ0lu -Zm9ybWF0aW9uICYgSGlsZmUnLCBrb2VycGVyLAogICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPSJi -dXR0b24iIGNsYXNzPSJidG4gYnRuLXNlayIgaWQ9ImluZm8taW1wcmVzc3VtLWJ0biI+SW1wcmVz -c3VtPC9idXR0b24+JyArCiAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9 -ImJ0biBidG4tcHJpbWFlciIgaWQ9ImluZm8tc2NobGllc3Nlbi1idG4iPlNjaGxpZcOfZW48L2J1 -dHRvbj4nLAogICAgICAgICAgICBudWxsLCBudWxsLCB7IHJlaW5lckRpYWxvZzogdHJ1ZSB9KTsK -ICAgICAgICB2YXIgYnRuSW1wcmVzc3VtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luZm8t -aW1wcmVzc3VtLWJ0bicpOwogICAgICAgIGlmIChidG5JbXByZXNzdW0pIGJ0bkltcHJlc3N1bS5h -ZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGltcHJlc3N1bU1vZGFsT2VmZm5lbik7CiAgICAgICAg -dmFyIGJ0blNjaGxpZXNzZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5mby1zY2hsaWVz -c2VuLWJ0bicpOwogICAgICAgIGlmIChidG5TY2hsaWVzc2VuKSBidG5TY2hsaWVzc2VuLmFkZEV2 -ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7IG1vZGFsU2NobGllc3Nlbih0cnVlKTsg -fSk7CiAgICB9CgogICAgLy8gQmF1dCBkZW4gdm9yYXVzZ2VmdWVsbHRlbiBTdXBwb3J0LU1haWwt -Qm9keS4gUGxhaW4tVGV4dCwga2xhcgogICAgLy8gc3RydWt0dXJpZXJ0IGluIEFic2Nobml0dGVu -IOKAlCBVc2VyIHNvbGwgZGllIEx1ZWVrZW4gYXVzZnVlbGxlbiwKICAgIC8vIHN0YXR0IHZvbiBO -dWxsIGFuIHp1IHNjaHJlaWJlbi4gQXV0by1TZWt0aW9uIGFtIEVuZGUgaXN0IG1pdAogICAgLy8g -TGl2ZS1EYXRlbiB2b3JiZWZ1ZWxsdCAoTlctS2VubnVuZywgYWt0dWVsbGUgQW5zaWNodCwgQnJv -d3NlciwKICAgIC8vIEF1ZmxvZXN1bmcsIEJ1aWxkLUphaHIpLCBkYW1pdCBQaGlsaXBwIG5pY2h0 -IG1laHJmYWNoIG5hY2hmcmFnZW4KICAgIC8vIG11c3MuCiAgICBmdW5jdGlvbiBfbWFpbFBsYXR6 -aGFsdGVyRXJzZXR6ZW4odGVtcGxhdGUpIHsKICAgICAgICB2YXIgamV0enQgPSBuZXcgRGF0ZSgp -OwogICAgICAgIHZhciBwYWQgPSBmdW5jdGlvbihuKSB7IHJldHVybiAobiA8IDEwID8gJzAnIDog -JycpICsgbjsgfTsKICAgICAgICB2YXIgYWt0aXYgPSAnJzsKICAgICAgICB0cnkgeyBha3RpdiA9 -IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3ZpMy5ha3RpdmVBbnNpY2h0JykgfHwgJ3BsYW51bmcn -OyB9IGNhdGNoIChlKSB7IGFrdGl2ID0gJ3BsYW51bmcnOyB9CiAgICAgICAgdmFyIGN0eCA9IHsK -ICAgICAgICAgICAgJ3tud19rZW5udW5nfSc6ICAgICAgIFouYmVudXR6ZXIgfHwgJz8nLAogICAg -ICAgICAgICAne2FrdHVlbGxlX2Fuc2ljaHR9JzogYWt0aXYsCiAgICAgICAgICAgICd7ZGF0dW19 -JzogICAgICAgICAgICBwYWQoamV0enQuZ2V0RGF0ZSgpKSArICcuJyArIHBhZChqZXR6dC5nZXRN -b250aCgpICsgMSkgKyAnLicgKyBqZXR6dC5nZXRGdWxsWWVhcigpLAogICAgICAgICAgICAne3Vo -cnplaXR9JzogICAgICAgICAgcGFkKGpldHp0LmdldEhvdXJzKCkpICsgJzonICsgcGFkKGpldHp0 -LmdldE1pbnV0ZXMoKSksCiAgICAgICAgICAgICd7YXVmbG9lc3VuZ30nOiAgICAgICAod2luZG93 -LmlubmVyV2lkdGggfHwgJz8nKSArICd4JyArICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgJz8nKSwK -ICAgICAgICAgICAgJ3thcHBfamFocn0nOiAgICAgICAgIFN0cmluZygoWi5hZG1pbiAmJiBaLmFk -bWluLmphaHIpID8gWi5hZG1pbi5qYWhyIDogbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpKSwKICAg -ICAgICAgICAgJ3ticm93c2VyfSc6ICAgICAgICAgIChuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVz -ZXJBZ2VudCkgPyBuYXZpZ2F0b3IudXNlckFnZW50LnN1YnN0cmluZygwLCAxMjApIDogJz8nCiAg -ICAgICAgfTsKICAgICAgICB2YXIgb3V0ID0gdGVtcGxhdGU7CiAgICAgICAgT2JqZWN0LmtleXMo -Y3R4KS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsgb3V0ID0gb3V0LnNwbGl0KGspLmpvaW4oY3R4W2td -KTsgfSk7CiAgICAgICAgcmV0dXJuIG91dDsKICAgIH0KICAgIGZ1bmN0aW9uIHN1cHBvcnRNYWls -Qm9keUJhdWVuKCkgewogICAgICAgIHZhciB0ZW1wbGF0ZSA9IChaLmFkbWluICYmIFouYWRtaW4u -c3VwcG9ydE1haWxUZXh0ICYmIFN0cmluZyhaLmFkbWluLnN1cHBvcnRNYWlsVGV4dCkudHJpbSgp -KQogICAgICAgICAgICA/IFouYWRtaW4uc3VwcG9ydE1haWxUZXh0CiAgICAgICAgICAgIDogU1VQ -UE9SVF9NQUlMX0RFRkFVTFQ7CiAgICAgICAgcmV0dXJuIF9tYWlsUGxhdHpoYWx0ZXJFcnNldHpl -bih0ZW1wbGF0ZSk7CiAgICB9CiAgICBmdW5jdGlvbiBidWdSZXBvcnRNYWlsQm9keUJhdWVuKCkg -ewogICAgICAgIHZhciB0ZW1wbGF0ZSA9IChaLmFkbWluICYmIFouYWRtaW4uYnVnUmVwb3J0TWFp -bFRleHQgJiYgU3RyaW5nKFouYWRtaW4uYnVnUmVwb3J0TWFpbFRleHQpLnRyaW0oKSkKICAgICAg -ICAgICAgPyBaLmFkbWluLmJ1Z1JlcG9ydE1haWxUZXh0CiAgICAgICAgICAgIDogQlVHUkVQT1JU -X01BSUxfREVGQVVMVDsKICAgICAgICByZXR1cm4gX21haWxQbGF0emhhbHRlckVyc2V0emVuKHRl -bXBsYXRlKTsKICAgIH0KCiAgICAvLyBCdWctUmVwb3J0LU1vZGFsIGhpbnRlciBkZW0gSGVhZGVy -LUJ1dHRvbiDigJ5CdWdSZXBvcnQiLiBTcGllZ2VsdCBkaWUKICAgIC8vIFN1cHBvcnQtQW5mcmFn -ZSAoSW1wcmVzc3VtLU1vZGFsKSwgYWJlciB6dWdlc3BpdHp0IGF1ZiBCVUdTL1Byb2JsZW1lOgog -ICAgLy8gZWluIHZvcnN0cnVrdHVyaWVydGVzIG1haWx0bzogYW4gUEhLIFJvZXNnZW4uCiAgICBm -dW5jdGlvbiBidWdSZXBvcnRNb2RhbE9lZmZuZW4oKSB7CiAgICAgICAgdmFyIG1haWx0byA9ICdt -YWlsdG86cGhpbGlwcC5yb2VzZ2VuQHBvbGl6ZWkubnJ3LmRlJwogICAgICAgICAgICArICc/c3Vi -amVjdD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KCdWSTMgREdMIFBsYW51bmcgLSBCVUcgLyBQcm9i -bGVtIChEb3J0bXVuZCknKQogICAgICAgICAgICArICcmYm9keT0nICsgZW5jb2RlVVJJQ29tcG9u -ZW50KGJ1Z1JlcG9ydE1haWxCb2R5QmF1ZW4oKSk7CiAgICAgICAgdmFyIGtvZXJwZXIgPQogICAg -ICAgICAgICAnPGRpdiBjbGFzcz0iYnVncmVwb3J0LWJveCI+JyArCiAgICAgICAgICAgICAgICAn -PGRpdiBjbGFzcz0iYnVncmVwb3J0LWJveC10aXRlbCI+QnVnIG9kZXIgUHJvYmxlbSBtZWxkZW48 -L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8cCBjbGFzcz0iYnVncmVwb3J0LWJveC10ZXh0Ij5F -dHdhcyBmdW5rdGlvbmllcnQgbmljaHQgd2llIGVyd2FydGV0PyBNaXQgZGVtIEJ1dHRvbiB1bnRl -biDDtmZmbmV0IHNpY2ggZWluZSA8c3Ryb25nPnZvcnN0cnVrdHVyaWVydGUgRS1NYWlsPC9zdHJv -bmc+IGFuIFBISyBSb2VzZ2VuIChOVzA1MzYwOSkuIEJpdHRlIGFsbGUgQWJzY2huaXR0ZSBhdXNm -w7xsbGVuIOKAlCBiZXNvbmRlcnMgZGllIDxzdHJvbmc+U2Nocml0dGUgenVtIFJlcHJvZHV6aWVy -ZW48L3N0cm9uZz4gdW5kIG1pbmRlc3RlbnMgPHN0cm9uZz5laW5lbiBTY3JlZW5zaG90PC9zdHJv -bmc+IGRlciBGZWhsZXJzdGVsbGUuIERpZSB0ZWNobmlzY2hlbiBJbmZvcyBhbSBFbmRlIGJpdHRl -IHVudmVyw6RuZGVydCBsYXNzZW4sIHNpZSBoZWxmZW4gYmVpIGRlciBFaW5ncmVuenVuZy48L3A+ -JyArCiAgICAgICAgICAgICAgICAnPGEgY2xhc3M9ImJ0biBidWdyZXBvcnQtbWFpbC1idG4iIGhy -ZWY9IicgKyBlc2NhcGVBdHRyKG1haWx0bykgKyAnIj4nICsKICAgICAgICAgICAgICAgICAgICAn -QnVnIHBlciBFLU1haWwgbWVsZGVuIChPdXRsb29rIMO2ZmZuZW4pJyArCiAgICAgICAgICAgICAg -ICAnPC9hPicgKwogICAgICAgICAgICAnPC9kaXY+JzsKICAgICAgICB2YXIgZnVzcyA9ICc8YnV0 -dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2VrIiBpZD0iYnVncmVwb3J0LXNjaGxp -ZXNzZW4tYnRuIj5TY2hsaWXDn2VuPC9idXR0b24+JzsKICAgICAgICBtb2RhbFplaWdlbignQnVn -IC8gUHJvYmxlbSBtZWxkZW4nLCBrb2VycGVyLCBmdXNzLCBudWxsLCBudWxsLCB7IHJlaW5lckRp -YWxvZzogdHJ1ZSB9KTsKICAgICAgICB2YXIgc2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn -YnVncmVwb3J0LXNjaGxpZXNzZW4tYnRuJyk7CiAgICAgICAgaWYgKHNiKSBzYi5hZGRFdmVudExp -c3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgeyBtb2RhbFNjaGxpZXNzZW4odHJ1ZSk7IH0pOwog -ICAgfQoKICAgIC8vIEltcHJlc3N1bXMtTW9kYWwgbWl0IE5vdGZhbGwtQm94ICsgdm9yYXVzZ2Vm -dWVsbHRlbSBtYWlsdG86LUJ1dHRvbi4KICAgIC8vIEluaGFsdDogYWRtaW4uanNvbi5pbXByZXNz -dW0gKGZhbGxzIGxlZXIsIElNUFJFU1NVTV9ERUZBVUxUIGF1cyBhZG1pbi5qcykuCiAgICBmdW5j -dGlvbiBpbXByZXNzdW1Nb2RhbE9lZmZuZW4oKSB7CiAgICAgICAgdmFyIGluaGFsdCA9IChaLmFk -bWluICYmIFouYWRtaW4uaW1wcmVzc3VtICYmIFN0cmluZyhaLmFkbWluLmltcHJlc3N1bSkudHJp -bSgpKQogICAgICAgICAgICA/IHNhbml0aXplUmljaEh0bWwoWi5hZG1pbi5pbXByZXNzdW0pCiAg -ICAgICAgICAgIDogc2FuaXRpemVSaWNoSHRtbChJTVBSRVNTVU1fREVGQVVMVCk7CiAgICAgICAg -dmFyIG1haWx0byA9ICdtYWlsdG86cGhpbGlwcC5yb2VzZ2VuQHBvbGl6ZWkubnJ3LmRlJwogICAg -ICAgICAgICArICc/c3ViamVjdD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KCdWSTMgREdMIFBsYW51 -bmcgLSBEb3J0bXVuZCcpCiAgICAgICAgICAgICsgJyZib2R5PScgKyBlbmNvZGVVUklDb21wb25l -bnQoc3VwcG9ydE1haWxCb2R5QmF1ZW4oKSk7CgogICAgICAgIHZhciBub3RmYWxsQm94ID0KICAg -ICAgICAgICAgJzxkaXYgY2xhc3M9ImltcHJlc3N1bS1ub3RmYWxsIj4nICsKICAgICAgICAgICAg -ICAgICc8ZGl2IGNsYXNzPSJpbXByZXNzdW0tbm90ZmFsbC10aXRlbCI+Tm90ZmFsbC1Sw7xja2Zh -bGxlYmVuZTwvZGl2PicgKwogICAgICAgICAgICAgICAgJzxwIGNsYXNzPSJpbXByZXNzdW0tbm90 -ZmFsbC10ZXh0Ij5EaWUgTlctS2VubnVuZyA8Y29kZT5OVzA1MzYwOTwvY29kZT4gKDxzdHJvbmc+ -UEhLIFJvZXNnZW48L3N0cm9uZz4pIGlzdCBpbSBTZXJ2ZXIgaGFydCBhbHMgU3VwZXJVc2VyIGhp -bnRlcmxlZ3QgdW5kIGdpbHQgYXVjaCBkYW5uLCB3ZW5uIGRpZSBTdXBlclVzZXItTGlzdGUgbGVl -ciBvZGVyIHVubGVzYmFyIGlzdC4gQmVpIFByb2JsZW1lbiBtaXQgUmVjaHRlbiwgQnVncyBvZGVy -IEZyYWdlbiB6dXIgQW53ZW5kdW5nIHN0ZWh0IFBISyBSb2VzZ2VuIGFscyBBbnNwcmVjaHBhcnRu -ZXIgdW5kIFLDvGNrZmFsbGViZW5lIGJlcmVpdC48L3A+JyArCiAgICAgICAgICAgICAgICAnPGEg -Y2xhc3M9ImJ0biBidG4tcHJpbWFlciBpbXByZXNzdW0tbWFpbC1idG4iIGhyZWY9IicgKyBlc2Nh -cGVBdHRyKG1haWx0bykgKyAnIj4nICsKICAgICAgICAgICAgICAgICAgICAnU3VwcG9ydC1BbmZy -YWdlIHBlciBFLU1haWwgKE91dGxvb2sgw7ZmZm5lbiknICsKICAgICAgICAgICAgICAgICc8L2E+ -JyArCiAgICAgICAgICAgICc8L2Rpdj4nOwoKICAgICAgICB2YXIga29lcnBlciA9ICc8ZGl2IGNs -YXNzPSJpbXByZXNzdW0taW5oYWx0IiBzdHlsZT0ibGluZS1oZWlnaHQ6MS42Ij4nICsgaW5oYWx0 -ICsgJzwvZGl2PicgKyBub3RmYWxsQm94OwogICAgICAgIHZhciBmdXNzID0gJzxidXR0b24gdHlw -ZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVyIiBpZD0iaW1wcmVzc3VtLXNjaGxpZXNz -ZW4tYnRuIj5TY2hsaWXDn2VuPC9idXR0b24+JzsKICAgICAgICBtb2RhbFplaWdlbignSW1wcmVz -c3VtJywga29lcnBlciwgZnVzcywgbnVsbCwgbnVsbCwgeyByZWluZXJEaWFsb2c6IHRydWUgfSk7 -CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltcHJlc3N1bS1zY2hsaWVzc2VuLWJ0 -bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIG1v -ZGFsU2NobGllc3Nlbih0cnVlKTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvLyA9PT09PSBMb2di -dWNoID09PT09IC0+IGpzL2xvZ2J1Y2guanMKICAgIC8vID09PT09IEV4Y2VsLUltcG9ydGVyID09 -PT09IC0+IGpzL2ltcG9ydC9leGNlbC1pbXBvcnQuanMKICAgIC8vID09PT09IEV2ZW50LUxpc3Rl -bmVyID09PT09CiAgICAvLyBUb3AtTGV2ZWwtV3JhcHBlci4gRGllIGRyZWkgU3ViLUZ1bmt0aW9u -ZW4gc2luZCBpbSBCb290c3RyYXAtU2NvcGUKICAgIC8vIGRlZmluaWVydCB1bmQgZ3JlaWZlbiB2 -aWEgQ2xvc3VyZSBhdWYgYWxsZXMgaW4gZGVyIElJRkUgenUuCgogICAgZnVuY3Rpb24gZXZlbnRM -aXN0ZW5lckVpbnJpY2h0ZW4oKSB7CiAgICAgICAgZ3JpZExpc3RlbmVyRWlucmljaHRlbigpOwog -ICAgICAgIGFkbWluTGlzdGVuZXJFaW5yaWNodGVuKCk7CiAgICAgICAgcmVzdExpc3RlbmVyRWlu -cmljaHRlbigpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdyaWRMaXN0ZW5lckVpbnJpY2h0ZW4oKSB7 -CiAgICAgICAgLy8gRGlydHktVHJhY2tpbmc6IGFsbGUgYmVhcmJlaXRiYXJlbiBBZG1pbi1TZWt0 -aW9uZW4gYW5tZWxkZW4gKwogICAgICAgIC8vIERlbGVnYXRlZC1MaXN0ZW5lciwgZGVyIElucHV0 -cy9DaGFuZ2VzIGFuIGRlbiBwYXNzZW5kZW4gRGlydHktS2V5CiAgICAgICAgLy8gcm91dGV0LiBT -aWVoZSBkaXJ0eVJlZ2lzdHJpZXJlL2RpcnR5UHJ1ZWZlbiBvYmVuLgogICAgICAgIGRpcnR5VHJh -Y2tlckVpbnJpY2h0ZW4oKTsKCiAgICAgICAgLy8gTmF2aWdhdGlvbgogICAgICAgIGRvY3VtZW50 -LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uYXYtYnRuJykuZm9yRWFjaChmdW5jdGlvbihidG4pIHsKICAg -ICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAg -ICAgICAgICAgICAvLyBWb3IgSGVhZGVyLVRhYi1XZWNoc2VsOiBDaGVjay1Nb2RhbCBiZWkgdW5n -ZXNwZWljaGVydGVuIEFlbmRlcnVuZ2VuCiAgICAgICAgICAgICAgICBkaXJ0eVBydWVmZW4oZnVu -Y3Rpb24oKSB7IGFuc2ljaHRXZWNoc2VsbihidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWFuc2ljaHQn -KSk7IH0pOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICBiZXNldHp1bmdza29u -dHJvbGxlRXZlbnRzQXVmaGFlbmdlbigpOwoKICAgICAgICAvLyBBZG1pbi1UYWJzIChTaWRlYmFy -KQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hZG1pbi1uYXYtYnRuJykuZm9y -RWFjaChmdW5jdGlvbihidG4pIHsKICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns -aWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBkaXJ0eVBydWVmZW4oZnVuY3Rpb24o -KSB7CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFkbWlu -LW5hdi1idG4nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpIHsgYi5jbGFzc0xpc3QucmVtb3ZlKCdha3Rp -dicpOyB9KTsKICAgICAgICAgICAgICAgICAgICBidG4uY2xhc3NMaXN0LmFkZCgnYWt0aXYnKTsK -ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWRtaW4tdGFi -JykuZm9yRWFjaChmdW5jdGlvbih0KSB7IHQuY2xhc3NMaXN0LmFkZCgndmVyc3RlY2t0Jyk7IH0p -OwogICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1h -ZG1pbi10YWInKTsKICAgICAgICAgICAgICAgICAgICB2YXIgdGFiID0gZG9jdW1lbnQuZ2V0RWxl -bWVudEJ5SWQoJ2FkbWluLXRhYi0nICsgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRh -YikgdGFiLmNsYXNzTGlzdC5yZW1vdmUoJ3ZlcnN0ZWNrdCcpOwogICAgICAgICAgICAgICAgICAg -IC8vIEhpbndlaXNlLVByb3Rva29sbCBsYXp5IGxhZGVuLCBzb2JhbGQgZGVyIFN1Yi1UYWIgYWt0 -aXYgd2lyZC4KICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2hpbndlaXNlLXByb3Rv -a29sbCcpIGhpbndlaXNlUHJvdG9rb2xsUmVuZGVybigpOwogICAgICAgICAgICAgICAgICAgIC8v -IEVyc2NoZWludW5nc2JpbGQ6IGRlZmVuc2l2ZXIgcmUtcmVuZGVyIGJlaW0gS2xpY2sgYXVmIGRl -bgogICAgICAgICAgICAgICAgICAgIC8vIFN1Yi1UYWIsIGRhbWl0IGRlciBFZGl0b3IgYXVjaCBk -YW5uIGVyc2NoZWludCwgd2VubgogICAgICAgICAgICAgICAgICAgIC8vIGFkbWluUmVuZGVybigp -IHZvciBkZW0gZXJzdGVuIFRhYi1Td2l0Y2ggbm9jaCBuaWNodCBsaWVmLgogICAgICAgICAgICAg -ICAgICAgIGlmIChuYW1lID09PSAnZXJzY2hlaW51bmdzYmlsZCcpIGVyc2NoZWludW5nc2JpbGRS -ZW5kZXJuKCk7CiAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGlzdGlrLUxheW91dDogcmUtcmVu -ZGVybiBiZWltIFRhYi1XZWNoc2VsLCBkYW1pdCBmcmlzY2gKICAgICAgICAgICAgICAgICAgICAv -LyBnZWJhdXRlIEJhdWthc3Rlbi1LYWNoZWxuIHNvZm9ydCBpbSBSYXN0ZXIgZXJzY2hlaW5lbi4K -ICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3N0YXRpc3Rpay1sYXlvdXQnKSBzdGF0 -aXN0aWtMYXlvdXRSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGlzdGlrLUJ1 -aWxkZXI6IGxhenkgcmVuZGVybiAoRW5naW5lIGJhdXQgRmFrdGVudGFiZWxsZSkuCiAgICAgICAg -ICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdzdGF0aXN0aWstYnVpbGRlcicpIHN0YXRpc3Rpa0J1 -aWxkZXJSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICAgICAgLy8gRXhjZWwtRXhwb3J0OiBsYXp5 -IHJlbmRlcm4sIHdlbm4gZGVyIFRhYiBha3RpdiB3aXJkLgogICAgICAgICAgICAgICAgICAgIGlm -IChuYW1lID09PSAnZXhwb3J0JykgZXhwb3J0UmVuZGVybigpOwogICAgICAgICAgICAgICAgICAg -IC8vIFN0YW5kYXJkcmVjaHRlIChVc2VyKTogbGF6eSByZW5kZXJuLgogICAgICAgICAgICAgICAg -ICAgIGlmIChuYW1lID09PSAnc3RhbmRhcmRyZWNodGUnKSBzdGFuZGFyZHJlY2h0ZVJlbmRlcm4o -KTsKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUtQmVyZWljaCAoU3VwZXJVc2VyKTogU3Rh -dHVzIGxhZGVuLCBzb2JhbGQgYWt0aXYuCiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09 -ICd1cGRhdGUnKSB1cGRhdGVCZXJlaWNoUmVuZGVybigpOwogICAgICAgICAgICAgICAgICAgIC8v -IERyYWZ0LVJlc3RvcmUtQmFubmVyIGFuYmlldGVuLCBmYWxscyBmdWVyIGRpZXNlbiBUYWIgZWlu -CiAgICAgICAgICAgICAgICAgICAgLy8gQXV0by1TYXZlLURyYWZ0IGltIGxvY2FsU3RvcmFnZSBs -aWVndCAoUGhhc2UgOSkuCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhZG1pbkRyYWZ0 -QmFubmVyQW5iaWV0ZW4gPT09ICdmdW5jdGlvbicpIGFkbWluRHJhZnRCYW5uZXJBbmJpZXRlbihu -YW1lKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAg -ICAgICBhZG1pblN1YnRhYkZpbHRlckFud2VuZGVuKCk7CgogICAgICAgIC8vIEFkbWluLVN1Yi1O -YXZpZ2F0aW9uIChpbm5lcmhhbGIgZWluZXMgVG9wLVRhYnMpLgogICAgICAgIC8vIEtsaWNrIGF1 -ZiBlaW5lbiAuYWRtaW4tc3VibmF2LWJ0biBzY2hhbHRldCBpbSB1bXNjaGxpZXNzZW5kZW4gLmFk -bWluLXRhYgogICAgICAgIC8vIHp3aXNjaGVuIFN1Yi1TZWt0aW9uZW4gdW0sIGRpZSBwZXIgZGF0 -YS1zdWJ0YWI9Ii4uLiIgbWFya2llcnQgc2luZC4KICAgICAgICAvLyBCc3A6ICJGZWllcnRhZ2Ug -JiBGZXJpZW4iIC0+IFN1Yi1UYWJzICJGZWllcnRhZ2UiIC8gIlNjaHVsZmVyaWVuIi4KICAgICAg -ICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWRtaW4tc3VibmF2JykuZm9yRWFjaChmdW5j -dGlvbihuYXYpIHsKICAgICAgICAgICAgbmF2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVu -Y3Rpb24oZXYpIHsKICAgICAgICAgICAgICAgIHZhciBidG4gPSBldi50YXJnZXQuY2xvc2VzdCgn -LmFkbWluLXN1Ym5hdi1idG4nKTsKICAgICAgICAgICAgICAgIGlmICghYnRuIHx8ICFuYXYuY29u -dGFpbnMoYnRuKSkgcmV0dXJuOwogICAgICAgICAgICAgICAgdmFyIHppZWwgPSBidG4uZ2V0QXR0 -cmlidXRlKCdkYXRhLXN1YnRhYicpOwogICAgICAgICAgICAgICAgaWYgKCF6aWVsKSByZXR1cm47 -CiAgICAgICAgICAgICAgICB2YXIgdGFiID0gbmF2LmNsb3Nlc3QoJy5hZG1pbi10YWInKSB8fCBu -YXYucGFyZW50RWxlbWVudDsKICAgICAgICAgICAgICAgIGlmICghdGFiKSByZXR1cm47CiAgICAg -ICAgICAgICAgICBuYXYucXVlcnlTZWxlY3RvckFsbCgnLmFkbWluLXN1Ym5hdi1idG4nKS5mb3JF -YWNoKGZ1bmN0aW9uKGIpIHsKICAgICAgICAgICAgICAgICAgICBiLmNsYXNzTGlzdC50b2dnbGUo -J2FrdGl2JywgYiA9PT0gYnRuKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg -dGFiLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXN1YnRhYi1zZWt0aW9uXScpLmZvckVhY2goZnVu -Y3Rpb24oc2VrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlzdCA9IHNlay5nZXRBdHRyaWJ1 -dGUoJ2RhdGEtc3VidGFiLXNla3Rpb24nKSA9PT0gemllbDsKICAgICAgICAgICAgICAgICAgICBz -ZWsuY2xhc3NMaXN0LnRvZ2dsZSgndmVyc3RlY2t0JywgIWlzdCk7CiAgICAgICAgICAgICAgICB9 -KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEhpbndlaXNlLVByb3Rv -a29sbDogRmlsdGVyICsgQWt0dWFsaXNpZXJlbi1CdXR0b24KICAgICAgICAoZnVuY3Rpb24oKSB7 -CiAgICAgICAgICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHAtYWt0dWFs -aXNpZXJlbicpOwogICAgICAgICAgICBpZiAoYnRuKSBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xp -Y2snLCBoaW53ZWlzZVByb3Rva29sbFJlbmRlcm4pOwogICAgICAgICAgICBbJ2hwLWZpbHRlci10 -eXAnLCAnaHAtZmlsdGVyLXZvbicsICdocC1maWx0ZXItYmlzJ10uZm9yRWFjaChmdW5jdGlvbihp -ZCkgewogICAgICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQp -OwogICAgICAgICAgICAgICAgaWYgKGVsKSBlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBo -aW53ZWlzZVByb3Rva29sbFJlbmRlcm4pOwogICAgICAgICAgICB9KTsKICAgICAgICB9KSgpOwoK -ICAgICAgICAvLyBHcmlkLUludGVyYWt0aW9uOgogICAgICAgIC8vICAgSG92ZXIgdWViZXIgZWlu -ZSBaZWxsZSAgLT4gRHJhZy1GdWVsbC1HcmlmZiBlcnNjaGVpbnQgdW50ZW4gcmVjaHRzCiAgICAg -ICAgLy8gICBFaW5mYWNoLUtsaWNrICAgICAgICAgICAtPiBTY2hpY2h0LUVkaXRvciBvZWZmbmV0 -IHNpY2ggZGlyZWt0CiAgICAgICAgLy8gQmVpbSBWZXJsYXNzZW4gZGVzIEdyaWRzIHZlcnNjaHdp -bmRldCBkYXMgSGFuZGxlIHdpZWRlciwgYXVzc2VyCiAgICAgICAgLy8gd2VubiBkaWUgTWF1cyBh -dWYgZGFzIEhhbmRsZSB3YW5kZXJ0IG9kZXIgZ2VyYWRlIGVpbiBEcmFnIGxhZXVmdC4KICAgICAg -ICB2YXIgZ3JpZERhdGVuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dyaWQtZGF0ZW4nKTsK -ICAgICAgICB2YXIgaG92ZXJaZWxsZSA9IG51bGw7CiAgICAgICAgZ3JpZERhdGVuLmFkZEV2ZW50 -TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKGZ1ZWxs -SXN0QWt0aXYoKSkgcmV0dXJuOyAvLyBsYXVmZW5kZXIgRHJhZyAtIEhhbmRsZSBuaWNodCB1bXNl -dHplbgogICAgICAgICAgICB2YXIgemVsbGUgPSBlLnRhcmdldC5jbG9zZXN0KCcuZ3JpZC16ZWxs -ZScpOwogICAgICAgICAgICBpZiAoIXplbGxlIHx8IHplbGxlID09PSBob3ZlclplbGxlKSByZXR1 -cm47CiAgICAgICAgICAgIGhvdmVyWmVsbGUgPSB6ZWxsZTsKICAgICAgICAgICAgZnVlbGxIYW5k -bGVBblplbGxlKHplbGxlKTsKICAgICAgICAgICAgLy8gS29tbWVudGFyLVBvcG92ZXI6IG51ciBh -dWYgWmVsbGVuIG1pdCBNYXJrZXIuIFZlcnpvZWdlcnRlcgogICAgICAgICAgICAvLyBUcmlnZ2Vy -IChpbiBkZXIgRnVua3Rpb24gc2VsYnN0KSB2ZXJoaW5kZXJ0IEZsYWNrZXJuIGJlaW0KICAgICAg -ICAgICAgLy8gc2NobmVsbGVuIFVlYmVyd2lzY2hlbiDigJQgZGllIFBvcG92ZXItRnVua3Rpb24g -aXN0IG5vLW9wIGZ1ZXIKICAgICAgICAgICAgLy8gWmVsbGVuIG9obmUgaGF0LWtvbW1lbnRhci4K -ICAgICAgICAgICAgaWYgKHplbGxlLmNsYXNzTGlzdC5jb250YWlucygnaGF0LWtvbW1lbnRhcicp -KSB7CiAgICAgICAgICAgICAgICBrb21tZW50YXJQb3BvdmVyWmVpZ2VuKHplbGxlKTsKICAgICAg -ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGtvbW1lbnRhclBvcG92ZXJWZXJzdGVja2Vu -KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBncmlkRGF0ZW4uYWRkRXZlbnRM -aXN0ZW5lcignbW91c2VsZWF2ZScsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKGZ1ZWxs -SXN0QWt0aXYoKSkgcmV0dXJuOwogICAgICAgICAgICB2YXIgcnQgPSBlLnJlbGF0ZWRUYXJnZXQ7 -CiAgICAgICAgICAgIGlmIChydCAmJiBydC5pZCA9PT0gJ2ZpbGwtaGFuZGxlJykgcmV0dXJuOwog -ICAgICAgICAgICAvLyBXZW5uIGRlciBQb2ludGVyIGF1ZiBkYXMgS29tbWVudGFyLVBvcG92ZXIg -d2FuZGVydCwgTklDSFQKICAgICAgICAgICAgLy8gc2NobGllc3NlbiDigJQgZGVyIFBvcG92ZXIt -SGFuZGxlciBoYWVsdCBlcyBvZmZlbi4KICAgICAgICAgICAgaWYgKHJ0ICYmIHJ0LmNsb3Nlc3Qg -JiYgcnQuY2xvc2VzdCgnI3ZpMy1rb21tZW50YXItcG9wb3ZlcicpKSByZXR1cm47CiAgICAgICAg -ICAgIGhvdmVyWmVsbGUgPSBudWxsOwogICAgICAgICAgICBmdWVsbEhhbmRsZVZlcnN0ZWNrZW4o -KTsKICAgICAgICAgICAga29tbWVudGFyUG9wb3ZlclZlcnN0ZWNrZW4oKTsKICAgICAgICB9KTsK -ICAgICAgICAvLyBJbnRlcmFrdGlvbiAoVW1iYXUgMjAyNi0wNi0xNSwgVXNlci1XdW5zY2gpOiBM -aW5rc2tsaWNrIE1BUktJRVJUIGRpZQogICAgICAgIC8vIFplbGxlIG51ciAoa2VpbiBMb2NrLCBr -ZWluIEVkaXRvcikg4oCUIHNvIGVyemV1Z3QgYmVpbGFldWZpZ2VzIEtsaWNrZW4KICAgICAgICAv -LyBrZWluZSBHZWlzdGVyLVNwZXJyZW4gbWVoci4gV0VMQ0hFIEFrdGlvbiBkZW4gU2NoaWNodC1F -ZGl0b3Igb2VmZm5ldCwKICAgICAgICAvLyBpc3QgaW0gQWRtaW4tQmFja2VuZCBlaW5zdGVsbGJh -ciAoYWRtaW4uZWRpdG9yVHJpZ2dlcik6ICdyZWNodHMnCiAgICAgICAgLy8gKERlZmF1bHQpLCAn -bGlua3MnLCAnbWl0dGUnIChNYXVzcmFkLUtsaWNrKSBvZGVyICdkb3BwZWwnLgogICAgICAgIGZ1 -bmN0aW9uIHplbGxlTWFya2llcmVuKHplbGxlKSB7CiAgICAgICAgICAgIHZhciBhbHQgPSBncmlk -RGF0ZW4ucXVlcnlTZWxlY3RvcignLmdyaWQtemVsbGUtbWFya2llcnQnKTsKICAgICAgICAgICAg -aWYgKGFsdCAmJiBhbHQgIT09IHplbGxlKSBhbHQuY2xhc3NMaXN0LnJlbW92ZSgnZ3JpZC16ZWxs -ZS1tYXJraWVydCcpOwogICAgICAgICAgICBpZiAoemVsbGUpIHplbGxlLmNsYXNzTGlzdC5hZGQo -J2dyaWQtemVsbGUtbWFya2llcnQnKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZWRpdG9y -VHJpZ2dlcigpIHsKICAgICAgICAgICAgdmFyIHQgPSAoWi5hZG1pbiAmJiBaLmFkbWluLmVkaXRv -clRyaWdnZXIpIHx8ICdyZWNodHMnOwogICAgICAgICAgICByZXR1cm4gKHQgPT09ICdsaW5rcycg -fHwgdCA9PT0gJ21pdHRlJyB8fCB0ID09PSAnZG9wcGVsJykgPyB0IDogJ3JlY2h0cyc7CiAgICAg -ICAgfQogICAgICAgIGZ1bmN0aW9uIGVkaXRvckFuWmVsbGVPZWZmbmVuKHplbGxlKSB7IHplbGxl -TWFya2llcmVuKHplbGxlKTsgZWRpdG9yT2VmZm5lbih6ZWxsZSk7IH0KICAgICAgICAvLyBFaW5t -YWxpZ2VyIERpc2NvdmVyeS1IaW50OiBlcmtsYWVydCBkaWUgYWt0dWVsbCBrb25maWd1cmllcnRl -IEJlbGVndW5nCiAgICAgICAgLy8gYmVpbSBlcnN0ZW4gTGlua3NrbGljaywgZGFuYWNoIG5pZSB3 -aWVkZXIgKGxvY2FsU3RvcmFnZS1GbGFnOyBSZXNldAogICAgICAgIC8vIGJlaSBUcmlnZ2VyLVdl -Y2hzZWwgdWViZXIgZGFzIFN1ZmZpeCBpbSBLZXkpLgogICAgICAgIHZhciBUUklHR0VSX0xBQkVM -ID0geyByZWNodHM6ICdSZWNodHNrbGljaycsIGxpbmtzOiAnTGlua3NrbGljaycsIG1pdHRlOiAn -TWF1c3JhZC1LbGljayAoTWl0dGUpJywgZG9wcGVsOiAnRG9wcGVsa2xpY2snIH07CiAgICAgICAg -ZnVuY3Rpb24gZWRpdG9yVHJpZ2dlckhpbnRFaW5tYWxpZygpIHsKICAgICAgICAgICAgdmFyIHQg -PSBlZGl0b3JUcmlnZ2VyKCk7CiAgICAgICAgICAgIGlmICh0ID09PSAnbGlua3MnKSByZXR1cm47 -IC8vIExpbmtza2xpY2sgb2VmZm5ldCBqYSBkaXJla3Qg4oCUIGtlaW4gSGlud2VpcyBub2V0aWcK -ICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHZhciBrZXkgPSAndmkzLmVkaXRvclRy -aWdnZXJIaW50LicgKyB0OwogICAgICAgICAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVt -KGtleSkgPT09ICcxJykgcmV0dXJuOwogICAgICAgICAgICAgICAgdG9hc3QoJ0xpbmtza2xpY2sg -bWFya2llcnQgZGllIFplbGxlLiBEZW4gU2NoaWNodC1FZGl0b3Igw7ZmZm5lc3QgZHUgbWl0ICcg -KyAoVFJJR0dFUl9MQUJFTFt0XSB8fCAnUmVjaHRza2xpY2snKSArICcgYXVmIGRpZSBaZWxsZS4n -LCAnaW5mbycsIHsgZGF1ZXI6IDkwMDAgfSk7CiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uu -c2V0SXRlbShrZXksICcxJyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHsgLyogbG9jYWxTdG9y -YWdlIGdnZi4gYmxvY2tpZXJ0ICovIH0KICAgICAgICB9CiAgICAgICAgLy8gTGlua3NrbGljazog -bWFya2llcnQgaW1tZXIuIElzdCBMaW5rc2tsaWNrIGRlciBrb25maWd1cmllcnRlIFRyaWdnZXIs -CiAgICAgICAgLy8gb2VmZm5ldCBlciB6dXNhZXR6bGljaCBkZW4gRWRpdG9yLgogICAgICAgIGdy -aWREYXRlbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAg -ICAgdmFyIHplbGxlID0gZS50YXJnZXQuY2xvc2VzdCgnLmdyaWQtemVsbGUnKTsKICAgICAgICAg -ICAgaWYgKCF6ZWxsZSkgcmV0dXJuOwogICAgICAgICAgICBpZiAoZWRpdG9yVHJpZ2dlcigpID09 -PSAnbGlua3MnKSB7IGVkaXRvckFuWmVsbGVPZWZmbmVuKHplbGxlKTsgcmV0dXJuOyB9CiAgICAg -ICAgICAgIHplbGxlTWFya2llcmVuKHplbGxlKTsKICAgICAgICAgICAgaWYgKGRhcmZaZWxsZUVk -aXRpZXJlbih6ZWxsZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGVyc29uJykpKSBlZGl0b3JUcmlnZ2Vy -SGludEVpbm1hbGlnKCk7CiAgICAgICAgfSk7CiAgICAgICAgLy8gUmVjaHRza2xpY2s6IG9lZmZu -ZXQgZGVuIEVkaXRvciB3ZW5uIGtvbmZpZ3VyaWVydCAobmF0aXZlcyBLb250ZXh0bWVudQogICAg -ICAgIC8vIGRhbm4gdW50ZXJkcnVlY2tlbik7IHNvbnN0IGJsZWlidCBkYXMgbmF0aXZlIEJyb3dz -ZXItTWVudSBlcmhhbHRlbi4KICAgICAgICBncmlkRGF0ZW4uYWRkRXZlbnRMaXN0ZW5lcignY29u -dGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciB6ZWxsZSA9IGUudGFyZ2V0 -LmNsb3Nlc3QoJy5ncmlkLXplbGxlJyk7CiAgICAgICAgICAgIGlmICghemVsbGUgfHwgZWRpdG9y -VHJpZ2dlcigpICE9PSAncmVjaHRzJykgcmV0dXJuOwogICAgICAgICAgICBlLnByZXZlbnREZWZh -dWx0KCk7CiAgICAgICAgICAgIGVkaXRvckFuWmVsbGVPZWZmbmVuKHplbGxlKTsKICAgICAgICB9 -KTsKICAgICAgICAvLyBNYXVzcmFkLS9NaXR0ZWxrbGljay4gbW91c2Vkb3duIHZlcmhpbmRlcnQg -ZGVuIEF1dG9zY3JvbGwtQ3Vyc29yLAogICAgICAgIC8vIGF1eGNsaWNrIChidXR0b24gMSA9IE1p -dHRlKSBvZWZmbmV0IGRhbm4gZGVuIEVkaXRvci4KICAgICAgICBncmlkRGF0ZW4uYWRkRXZlbnRM -aXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoZS5idXR0 -b24gPT09IDEgJiYgZWRpdG9yVHJpZ2dlcigpID09PSAnbWl0dGUnICYmIGUudGFyZ2V0LmNsb3Nl -c3QoJy5ncmlkLXplbGxlJykpIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9KTsKICAgICAg -ICBncmlkRGF0ZW4uYWRkRXZlbnRMaXN0ZW5lcignYXV4Y2xpY2snLCBmdW5jdGlvbihlKSB7CiAg -ICAgICAgICAgIGlmIChlLmJ1dHRvbiAhPT0gMSB8fCBlZGl0b3JUcmlnZ2VyKCkgIT09ICdtaXR0 -ZScpIHJldHVybjsKICAgICAgICAgICAgdmFyIHplbGxlID0gZS50YXJnZXQuY2xvc2VzdCgnLmdy -aWQtemVsbGUnKTsKICAgICAgICAgICAgaWYgKCF6ZWxsZSkgcmV0dXJuOwogICAgICAgICAgICBl -LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGVkaXRvckFuWmVsbGVPZWZmbmVuKHplbGxl -KTsKICAgICAgICB9KTsKICAgICAgICAvLyBEb3BwZWxrbGljay4KICAgICAgICBncmlkRGF0ZW4u -YWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlm -IChlZGl0b3JUcmlnZ2VyKCkgIT09ICdkb3BwZWwnKSByZXR1cm47CiAgICAgICAgICAgIHZhciB6 -ZWxsZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5ncmlkLXplbGxlJyk7CiAgICAgICAgICAgIGlmICh6 -ZWxsZSkgZWRpdG9yQW5aZWxsZU9lZmZuZW4oemVsbGUpOwogICAgICAgIH0pOwoKICAgICAgICAv -LyBLb21iaW5pZXJ0ZSBBbmxhc3MtWmVpbGUgKE1haSAyMDI2KTogRmVpZXJ0YWcgKyBTb25kZXJ0 -ZXJtaW4gKwogICAgICAgIC8vIEdlYnVydHN0YWcgaW4gZWluZXIgWmVpbGUuIENsaWNrLVJvdXRp -bmcgbmFjaCBnZXRyb2ZmZW5lbSBFbGVtZW50OgogICAgICAgIC8vIC0gU29uZGVydGVybWluLUlj -b24gLT4gYmVzdGVoZW5kZXMgU29uZGVyLU1vZGFsL0VkaXQgKGplIG5hY2ggUm9sbGUpCiAgICAg -ICAgLy8gLSBGZWllcnRhZy1aZWxsZSAgICAtPiBGZWllcnRhZy1EZXRhaWwtTW9kYWwgKEJlc2No -cmVpYnVuZyArIExpbmspCiAgICAgICAgLy8gLSBsZWVyZSBaZWxsZSArIFNVICAtPiBuZXVlciBT -b25kZXJ0ZXJtaW4KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0dW0temVpbGUt -YW5sYXNzJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAg -ICAgIHZhciBzb25kZXJJY29uID0gZS50YXJnZXQuY2xvc2VzdCgnLmtkLWV2ZW50LXNvbmRlcicp -OwogICAgICAgICAgICBpZiAoc29uZGVySWNvbikgewogICAgICAgICAgICAgICAgdmFyIHNvbmRl -ckRhdHVtID0gc29uZGVySWNvbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtc29uZGVyLWRhdHVtJyk7CiAg -ICAgICAgICAgICAgICB2YXIgc29uZGVyID0gc29uZGVyRGF0dW0gPyBzb25kZXJGdWVyRGF0dW0o -c29uZGVyRGF0dW0pIDogbnVsbDsKICAgICAgICAgICAgICAgIGlmIChaLnJlY2h0ZS5pc3RTdXBl -clVzZXIpIHsKICAgICAgICAgICAgICAgICAgICBzb25kZXJFZGl0TW9kYWxaZWlnZW4oc29uZGVy -ID8gc29uZGVyLmRhdHVtIDogbnVsbCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvbmRl -cikgewogICAgICAgICAgICAgICAgICAgIHNvbmRlckFuc2ljaHRNb2RhbFplaWdlbihzb25kZXIp -OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9 -CiAgICAgICAgICAgIHZhciBmdFplbGxlID0gZS50YXJnZXQuY2xvc2VzdCgnLmtkLWFubGFzcy1m -ZWllcnRhZycpOwogICAgICAgICAgICBpZiAoZnRaZWxsZSkgewogICAgICAgICAgICAgICAgdmFy -IGRhdHVtID0gZnRaZWxsZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGF0dW0nKTsKICAgICAgICAgICAg -ICAgIHZhciBpbmZvID0gKFoudGFnSW5mb3MgfHwge30pW2RhdHVtXSB8fCB7fTsKICAgICAgICAg -ICAgICAgIGlmIChpbmZvLnR5cCA9PT0gJ2ZlaWVydGFnJykgewogICAgICAgICAgICAgICAgICAg -IHZhciBuYW1lID0gaW5mby5uYW1lIHx8ICdGZWllcnRhZyc7CiAgICAgICAgICAgICAgICAgICAg -dmFyIGt1cnogPSBpbmZvLmt1cnpiZXNjaHJlaWJ1bmcgfHwgJyc7CiAgICAgICAgICAgICAgICAg -ICAgdmFyIHVybCA9IGluZm8uaW5mb1VybCB8fCAnJzsKICAgICAgICAgICAgICAgICAgICB2YXIg -a29lcnBlciA9ICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjU1Ij4n -ICsKICAgICAgICAgICAgICAgICAgICAgICAgKGt1cnogPyBlc2NhcGVIVE1MKGt1cnopIDogJzxl -bSBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1tdXRlZCkiPktlaW5lIEJlc2NocmVpYnVuZyBoaW50 -ZXJsZWd0LjwvZW0+JykgKwogICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JzsKICAgICAg -ICAgICAgICAgICAgICB2YXIgZnVzcyA9ICcnOwogICAgICAgICAgICAgICAgICAgIGlmICh1cmwp -IHsKICAgICAgICAgICAgICAgICAgICAgICAgZnVzcyArPSAnPGEgY2xhc3M9ImJ0biBidG4tc2Vr -IGJ0bi1rbGVpbiIgaHJlZj0iJyArIGVzY2FwZUF0dHIodXJsKSArICciIHRhcmdldD0iX2JsYW5r -IiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPk1laHIgYmVpIFdpa2lwZWRpYSDihpc8L2E+JzsK -ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZnVzcyArPSAnPGJ1dHRv -biBjbGFzcz0iYnRuIGJ0bi1wcmltYWVyIGJ0bi1rbGVpbiIgaWQ9ImZ0LW1vZGFsLXNjaGxpZXNz -ZW4iPlNjaGxpZcOfZW48L2J1dHRvbj4nOwogICAgICAgICAgICAgICAgICAgIG1vZGFsWmVpZ2Vu -KG5hbWUsIGtvZXJwZXIsIGZ1c3MpOwogICAgICAgICAgICAgICAgICAgIHZhciBzY2hsaWVzc2Vu -ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Z0LW1vZGFsLXNjaGxpZXNzZW4nKTsKICAgICAg -ICAgICAgICAgICAgICBpZiAoc2NobGllc3Nlbikgc2NobGllc3Nlbi5hZGRFdmVudExpc3RlbmVy -KCdjbGljaycsIGZ1bmN0aW9uKCkgeyBtb2RhbFNjaGxpZXNzZW4oKTsgfSk7CiAgICAgICAgICAg -ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg -ICAgIC8vIEtsaWNrIGF1ZiBsZWVyZSBaZWxsZSAoa2VpbiBGZWllcnRhZy9Tb25kZXJ0ZXJtaW4p -OiBTdXBlclVzZXIKICAgICAgICAgICAgLy8ga2FubiBlaW5lbiBuZXVlbiBTb25kZXJ0ZXJtaW4g -ZnVlciBkaWVzZW4gVGFnIGFubGVnZW4uCiAgICAgICAgICAgIGlmIChaLnJlY2h0ZS5pc3RTdXBl -clVzZXIpIHsKICAgICAgICAgICAgICAgIHZhciBsZWVyWmVsbGUgPSBlLnRhcmdldC5jbG9zZXN0 -KCcua2QtemVsbGVbZGF0YS1kYXR1bV0nKTsKICAgICAgICAgICAgICAgIGlmIChsZWVyWmVsbGUp -IHNvbmRlckVkaXRNb2RhbFplaWdlbihsZWVyWmVsbGUuZ2V0QXR0cmlidXRlKCdkYXRhLWRhdHVt -JykpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIEVkaXRvcgogICAgICAg -IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3ItYXVzd2FobCcpLmFkZEV2ZW50TGlzdGVu -ZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgeyBlZGl0b3JBdXN3YWhsKHRoaXMudmFsdWUpOyB9KTsK -ICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsK +aW53ZWlzZU1vZGFsT2VmZm5lbiwgaGlud2Vpc2VBdXRvT2VmZm5lbiwgaGlud2Vpc2VTaWNodGJh +ciwgaGlud2Vpc2VQcm90b2tvbGxSZW5kZXJuIH0gZnJvbSAnLi9qcy9oaW53ZWlzZS5qcyc7Cmlt +cG9ydCB7IHN0YXRpc3Rpa0xheW91dFJlbmRlcm4gfSBmcm9tICcuL2pzL2FkbWluX3N0YXRpc3Rp +ay5qcyc7CmltcG9ydCB7IHN0YXRpc3Rpa0J1aWxkZXJSZW5kZXJuIH0gZnJvbSAnLi9qcy9hZG1p +bl9zdGF0aXN0aWtfYnVpbGRlci5qcyc7CmltcG9ydCB7IGV4cG9ydFJlbmRlcm4gfSBmcm9tICcu +L2pzL2V4cG9ydF9wbGFuLmpzJzsKaW1wb3J0IHsgc3RhbmRhcmRyZWNodGVSZW5kZXJuIH0gZnJv +bSAnLi9qcy9hZG1pbl9zdGFuZGFyZHJlY2h0ZS5qcyc7CgooZnVuY3Rpb24oKSB7CiAgICAndXNl +IHN0cmljdCc7CgogICAgLy8gWiAoR2xvYmFsZXIgWnVzdGFuZCkgICAgICAgICAgICAgICAgIC0+ +IGpzL2NvcmUvc3RhdGUuanMKICAgIC8vIEZVTktUSU9ORU4sIGZ1bmt0aW9uc1JhbmcsIERJRU5T +VEdSQURFIC0+IGpzL2NvcmUvdXRpbC5qcwoKICAgIC8vID09PT09IENyb3NzLU1vZHVsLUhvb2tz +ID09PT09CiAgICAvLyBIaWVyIHJlZ2lzdHJpZXJlbiB3aXIgRnVua3Rpb25lbiBhdXMgYXBwLmpz +IGJlaSBNb2R1bGVuLCBkaWUgc2llCiAgICAvLyBhdWZydWZlbiBtdWVzc2VuLCBhYmVyIG5vY2gg +bmljaHQgZGlyZWt0IGltcG9ydGllcmVuIGtvZW5uZW4KICAgIC8vIChGdW5rdGlvbmVuIHdhbmRl +cm4gZXJzdCBpbiBzcGFldGVyZW4gUGhhc2VuIGluIGlocmUgTW9kdWxlKS4KICAgIC8vIEZ1bmN0 +aW9uLUhvaXN0aW5nIGlubmVyaGFsYiBkZXIgSUlGRTogZGllIHJlZmVyZW56aWVydGVuIE5hbWVu +CiAgICAvLyBleGlzdGllcmVuIGJlcmVpdHMgenUgZGllc2VtIFplaXRwdW5rdC4KICAgIHBlcm1p +c3Npb25Ib29rcy5hZG1pblJlbmRlcm4gICAgICAgICAgICAgPSBhZG1pblJlbmRlcm47CiAgICBw +ZXJtaXNzaW9uSG9va3Mua29wZlJlbmRlcm4gICAgICAgICAgICAgID0ga29wZlJlbmRlcm47CiAg +ICBwZXJtaXNzaW9uSG9va3MuZ3JpZFJlbmRlcm4gICAgICAgICAgICAgID0gZ3JpZFJlbmRlcm47 +CiAgICAvLyBwZXJtaXNzaW9uSG9va3Muc3RhdGlzdGlrUmVuZGVybiArIHJlbmRlckhvb2tzLnN0 +YXRpc3Rpa0xhZGVuLwogICAgLy8gbG9nYnVjaExhZGVuICsgbG9nYnVjaEhvb2tzLmFmdGVyUmVz +dG9yZSB3ZXJkZW4gaW4KICAgIC8vIG9wdGlvbmFsZU1vZHVsZUxhZGVuKCkgZ2VzZXR6dCwgc29i +YWxkIGRpZSBNb2R1bGUgZ2VsYWRlbiBzaW5kLgogICAgcGVybWlzc2lvbkhvb2tzLmJlc2V0enVu +Z3Nrb250cm9sbGVSZW5kZXJuID0gYmVzZXR6dW5nc2tvbnRyb2xsZVJlbmRlcm47CiAgICBwZXJt +aXNzaW9uSG9va3MuYW5zaWNodFdlY2hzZWxuICAgICAgICAgID0gYW5zaWNodFdlY2hzZWxuOwog +ICAgZGF0ZW5MYWRlbkhvb2tzLmFkbWluSG90UmVsb2FkICAgICAgICAgICA9IGFkbWluSG90UmVs +b2FkOwogICAgZGF0ZW5MYWRlbkhvb2tzLnBsYW51bmdIb3RSZWxvYWQgICAgICAgICA9IHBsYW51 +bmdIb3RSZWxvYWQ7CiAgICByZW5kZXJIb29rcy5mZWF0dXJlSXN0QWt0aXYgICAgICAgICAgICAg +ID0gZmVhdHVyZUlzdEFrdGl2OwogICAgcmVuZGVySG9va3Muc29uZGVyVGl0ZWxBdXNUZXh0ICAg +ICAgICAgICA9IHNvbmRlclRpdGVsQXVzVGV4dDsKICAgIHJlbmRlckhvb2tzLmJlc2V0enVuZ3NU +YWJGYXJiZUFrdHVhbGlzaWVyZW4gPSBiZXNldHp1bmdzVGFiRmFyYmVBa3R1YWxpc2llcmVuOwog +ICAgcmVuZGVySG9va3Mua29tbWVudGFyZUltR3JpZEFuemVpZ2VuICAgICA9IGtvbW1lbnRhcmVJ +bUdyaWRBbnplaWdlbjsKICAgIHJlbmRlckhvb2tzLmJleiAgICAgICAgICAgICAgICAgICAgICAg +ICAgPSBiZXo7CiAgICByZW5kZXJIb29rcy53cFJlbmRlcm4gICAgICAgICAgICAgICAgICAgID0g +d3BSZW5kZXJuOwogICAgcmVuZGVySG9va3MucHBSZW5kZXJuICAgICAgICAgICAgICAgICAgICA9 +IHBwUmVuZGVybjsKICAgIHJlbmRlckhvb2tzLmFkbWluUmVuZGVybiAgICAgICAgICAgICAgICAg +PSBhZG1pblJlbmRlcm47CiAgICByZW5kZXJIb29rcy5iZXNldHp1bmdza29udHJvbGxlUmVuZGVy +biAgID0gYmVzZXR6dW5nc2tvbnRyb2xsZVJlbmRlcm47CiAgICBpbnRlcmFjdGlvbkhvb2tzLmZl +YXR1cmVJc3RBa3RpdiAgICAgICAgID0gZmVhdHVyZUlzdEFrdGl2OwogICAgZWRpdG9ySG9va3Mu +ZmVhdHVyZUlzdEFrdGl2ICAgICAgICAgICAgICA9IGZlYXR1cmVJc3RBa3RpdjsKICAgIGVkaXRv +ckhvb2tzLnNvbmRlckZ1ZXJEYXR1bSAgICAgICAgICAgICAgPSBzb25kZXJGdWVyRGF0dW07CiAg +ICBlZGl0b3JIb29rcy5zb25kZXJXYXJuTW9kYWxaZWlnZW4gICAgICAgID0gc29uZGVyV2Fybk1v +ZGFsWmVpZ2VuOwogICAgZWRpdG9ySG9va3MuaXN0Q29kZUFrdGl2ICAgICAgICAgICAgICAgICA9 +IGlzdENvZGVBa3RpdjsKICAgIGVkaXRvckhvb2tzLmVtYWlsVm9ybGFnZW5Ib2xlbiAgICAgICAg +ICAgPSBlbWFpbFZvcmxhZ2VuSG9sZW47CiAgICBlZGl0b3JIb29rcy5lbWFpbFZvcmxhZ2VCZWZ1 +ZWxsZW4gICAgICAgID0gZW1haWxWb3JsYWdlQmVmdWVsbGVuOwogICAgZWRpdG9ySG9va3MubWFp +bFRyaWdnZXJGZXVlcm4gICAgICAgICAgICA9IG1haWxUcmlnZ2VyRmV1ZXJuOwogICAgZWRpdG9y +SG9va3MuYmVzZXR6dW5nc2tvbnRyb2xsZVJlbmRlcm4gICA9IGJlc2V0enVuZ3Nrb250cm9sbGVS +ZW5kZXJuOwogICAgZWRpdG9ySG9va3MuYmVzZXR6dW5nc2tvbnRyb2xsZVRhZ1VwZGF0ZW4gPSBi +ZXNldHp1bmdza29udHJvbGxlVGFnVXBkYXRlbjsKICAgIGJlc2V0enVuZ0hvb2tzLmJleiAgICAg +ICAgICAgICAgICAgICAgICAgPSBiZXo7CiAgICBiZXNldHp1bmdIb29rcy5lbWFpbFZvcmxhZ2Vu +SG9sZW4gICAgICAgID0gZW1haWxWb3JsYWdlbkhvbGVuOwogICAgYmVzZXR6dW5nSG9va3MuZW1h +aWxWb3JsYWdlQmVmdWVsbGVuICAgICA9IGVtYWlsVm9ybGFnZUJlZnVlbGxlbjsKICAgIGJlc2V0 +enVuZ0hvb2tzLm1haWxUcmlnZ2VyRmV1ZXJuICAgICAgICAgPSBtYWlsVHJpZ2dlckZldWVybjsK +ICAgIGVtYWlsSG9va3MuaHRtbEF1c0ZlbGQgICAgICAgICAgICAgICAgICAgPSBodG1sQXVzRmVs +ZDsKICAgIGFkbWluSG9va3MuYmVkaWVudW5nWmVpbGVuUmVuZGVybiAgICAgICAgPSBiZWRpZW51 +bmdaZWlsZW5SZW5kZXJuOwogICAgLy8gTGl2ZS1TeW5jOiBlcmxhdWJ0IHN5bmMtY2xpZW50ICsg +Y2VsbC1sb2NrLCBkZW4gRWRpdG9yIChpbiBQaGFzZSA1CiAgICAvLyBleHRyYWhpZXJ0KSB6dSBz +Y2hsaWVzc2VuIHVuZCBaZWxsZW4gdmlzdWVsbCB6dSBha3R1YWxpc2llcmVuLgogICAgc3luY0hv +b2tzLmVkaXRvclNjaGxpZXNzZW4gICAgICAgICAgICAgICA9IGVkaXRvclNjaGxpZXNzZW47CiAg +ICBzeW5jSG9va3MuemVsbGVWaXN1ZWxsQWt0dWFsaXNpZXJlbiAgICAgID0gemVsbGVWaXN1ZWxs +QWt0dWFsaXNpZXJlbjsKICAgIHN5bmNIb29rcy5oaW53ZWlzZUFrdHVhbGlzaWVydCAgICAgICAg +ICAgPSBmdW5jdGlvbihsaXN0ZSkgewogICAgICAgIFouaGlud2Vpc2UgPSBsaXN0ZSB8fCBbXTsK +ICAgICAgICBoaW53ZWlzZUFuemVpZ2VBa3R1YWxpc2llcmVuKCk7CiAgICB9OwoKICAgIC8vIHBl +cnNvbmVuTmV1QXVmYmF1ZW4gLT4ganMvY29yZS9kYXRlbkxhZGVuLmpzCgogICAgLy8gPT09PT0g +SGlsZnNmdW5rdGlvbmVuID09PT09CiAgICAvLyBlc2NhcGVIVE1ML2VzY2FwZUF0dHIsIGRhdHVt +U3RyL2RhdHVtRm9ybWF0REUvZGF0dW1LdXJ6REUvd29jaGVudGFnS3Vyei8KICAgIC8vIGlzdFdv +Y2hlbmVuZGU6IGpldHp0IGluIGpzL2NvcmUvdXRpbC5qcyAoc2llaGUgSW1wb3J0cyBhbSBEYXRl +aWFuZmFuZykuCgogICAgLy8gdG9hc3QsIGJlc3RhZXRpZ2VuIC0+IGpzL3VpL2RpYWxvZy5qcwoK +ICAgIC8vIGFwaSwgYXBpUG9zdCwgYXBpUHV0IC0+IGpzL2NvcmUvYXBpLmpzCgogICAgLy8gPT09 +PT0gRGF0ZW4gbGFkZW4gPT09PT0KICAgIC8vIEFETUlOX0xJU1RfRkVMREVSICsgYWRtaW5MaXN0 +ZW5Ob3JtYWxpc2llcmVuIC0+IGpzL2NvcmUvZGF0ZW5MYWRlbi5qcwoKICAgIGZ1bmN0aW9uIGRh +dGVuTGFkZW4oKSB7CiAgICAgICAgLy8gUGFrZXQtQyAoMjAyNi0wNS0yOSk6IFNwaW5uZXIgdWVi +ZXIgZGllIFBsYW50YWZlbCB3YWVocmVuZCBkZXIKICAgICAgICAvLyBpbml0aWFsZW4gZHJlaSBB +UEktQ2FsbHMuIEF1ZiBsYW5nc2FtZW4gUG9saXplaS1QQ3MgZGF1ZXJ0IGRhcwogICAgICAgIC8v +IGJpcyB6dSAxLTIgU2VrdW5kZW4sIHZvcmhlciBzYWggbWFuIGJsYW5rZW4gU2NyZWVuLiBXaXJk +IGltCiAgICAgICAgLy8gbmF2U2ljaHRiYXJrZWl0QW53ZW5kZW4tQmxvY2sgYW0gRW5kZSB2b24g +ZGF0ZW5MYWRlbigpIHdlZy0KICAgICAgICAvLyBnZW5vbW1lbiAoc2llaGUgb3B0aW9uYWxlTW9k +dWxlTGFkZW4udGhlbikuCiAgICAgICAgbGFkZU92ZXJsYXlaZWlnZW4oJ2Fuc2ljaHQtcGxhbnVu +ZycsICdQbGFudGFmZWwgd2lyZCBnZWxhZGVuIOKApicpOwogICAgICAgIHJldHVybiBQcm9taXNl +LmFsbChbYXBpKCcvYXBpL2FkbWluJyksIGFwaSgnL2FwaS9wbGFudW5nJyksIGFwaSgnL2FwaS9p +bmZvJyldKQogICAgICAgICAgICAudGhlbihmdW5jdGlvbihyKSB7CiAgICAgICAgICAgICAgICBa +LmFkbWluID0gYWRtaW5MaXN0ZW5Ob3JtYWxpc2llcmVuKHJbMF0pOwogICAgICAgICAgICAgICAg +Wi5wbGFudW5nID0gclsxXTsKICAgICAgICAgICAgICAgIHZhciBpbmZvID0gclsyXTsKICAgICAg +ICAgICAgICAgIFouYmVudXR6ZXIgPSBpbmZvLmJlbnV0emVyOwoKICAgICAgICAgICAgICAgIFou +cmVjaHRlID0gcmVjaHRlQXVzSW5mbyhpbmZvKTsKCiAgICAgICAgICAgICAgICBaLmNvZGVNYXAg +PSB7fTsKICAgICAgICAgICAgICAgIChaLmFkbWluLnNjaGljaHRjb2RlcyB8fCBbXSkuZm9yRWFj +aChmdW5jdGlvbihzYykgewogICAgICAgICAgICAgICAgICAgIFouY29kZU1hcFtzYy5jb2RlXSA9 +IHsgaGludGVyZ3J1bmQ6IHNjLmhpbnRlcmdydW5kLCBzY2hyaWZ0OiBzYy5zY2hyaWZ0LCBrdWVy +emVsOiBzYy5jb2RlIH07CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIFouZ3J1 +cHBlbk1hcCA9IHt9OwogICAgICAgICAgICAgICAgKFouYWRtaW4uZ3J1cHBlbiB8fCBbXSkuZm9y +RWFjaChmdW5jdGlvbihncikgewogICAgICAgICAgICAgICAgICAgIFouZ3J1cHBlbk1hcFtnci5u +YW1lXSA9IHsgaGludGVyZ3J1bmQ6IGdyLmhpbnRlcmdydW5kLCBzY2hyaWZ0OiBnci5zY2hyaWZ0 +LCBiZXplaWNobnVuZzogZ3IuYmV6ZWljaG51bmcgfTsKICAgICAgICAgICAgICAgIH0pOwoKICAg +ICAgICAgICAgICAgIHBlcnNvbmVuTmV1QXVmYmF1ZW4oKTsKCiAgICAgICAgICAgICAgICAvLyBN +ZWluZSBQZXJzb24tSUQ6IHZvbSBTZXJ2ZXIgYmVyZWNobmV0IChud0tlbm51bmctTWF0Y2gpLCBv +ZGVyCiAgICAgICAgICAgICAgICAvLyBsb2thbCBlcm1pdHRlbG4gYWxzIEZhbGxiYWNrIChhZWx0 +ZXJlIFNlcnZlci1WZXJzaW9uKS4KICAgICAgICAgICAgICAgIFoubWVpbmVQZXJzb25JZCA9IG51 +bGw7CiAgICAgICAgICAgICAgICBpZiAoaW5mby5tZWluZVBlcnNvbklkICE9IG51bGwpIHsKICAg +ICAgICAgICAgICAgICAgICBaLm1laW5lUGVyc29uSWQgPSBTdHJpbmcoaW5mby5tZWluZVBlcnNv +bklkKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGJl +bnV0emVyTG93ZXIgPSAoWi5iZW51dHplciB8fCAnJykudG9Mb3dlckNhc2UoKTsKICAgICAgICAg +ICAgICAgICAgICBaLnBlcnNvbmVuLmZvckVhY2goZnVuY3Rpb24ocCkgewogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAocC5ud0tlbm51bmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg +IHZhciBrTG93ZXIgPSBwLm53S2VubnVuZy50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKGtMb3dlciA9PT0gYmVudXR6ZXJMb3dlciB8fCBiZW51dHplckxvd2Vy +LmVuZHNXaXRoKCdcXCcgKyBrTG93ZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgWi5tZWluZVBlcnNvbklkID0gU3RyaW5nKHAuaWQpOwogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7 +CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gVXBkYXRlLUJhbm5lcjogc2Vy +dmVyLnBzMSBwcnVlZnQgVkVSU0lPTiBnZWdlbiBWSTNER0wtZGlzdCBhbGxlIDYwIE1pbi4KICAg +ICAgICAgICAgICAgIGlmIChpbmZvLnVwZGF0ZUF2YWlsYWJsZSAmJiAhX3VwZGF0ZVRvYXN0U2hv +d24pIHsKICAgICAgICAgICAgICAgICAgICBfdXBkYXRlVG9hc3RTaG93biA9IHRydWU7CiAgICAg +ICAgICAgICAgICAgICAgdG9hc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICdVcGRhdGUgdmVy +ZsO8Z2JhcjogdicgKyAoaW5mby5yZW1vdGVWZXJzaW9uIHx8ICc/JykgKwogICAgICAgICAgICAg +ICAgICAgICAgICAnIOKAlCB1cGRhdGUuYmF0IGF1c2bDvGhyZW4gdW5kIFNlcnZlciBuZXUgc3Rh +cnRlbicsCiAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJywgeyBkYXVlcjogMjAwMDAgfQog +ICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg +Ly8gSWRlbnRpdGFldHMtVmVybHVzdC1IaW53ZWlzIChTcHJpbnQgMiDigJQgRGF0ZW5tb2RlbGwt +S29uc2lzdGVuegogICAgICAgICAgICAgICAgLy8gMjAyNi0wNS0yOCk6IHdlbm4ga2VpbmUgUGxh +bi1QZXJzb24genVyIGVpbmdlbG9nZ3RlbiBOVy1LZW5udW5nCiAgICAgICAgICAgICAgICAvLyBn +ZWZ1bmRlbiB3dXJkZSBVTkQgZGVyIFVzZXIgYXVjaCBrZWluIFNVL0ZhY2hhdWZzaWNodCBpc3Qg +KGRpZQogICAgICAgICAgICAgICAgLy8gYXJiZWl0ZW4gZnVlciBhbmRlcmUsIGhhYmVuIGdnZi4g +YmV3dXNzdCBrZWluZSBlaWdlbmUgUGxhbi0KICAgICAgICAgICAgICAgIC8vIFBlcnNvbiksIHdh +cm5lbiB3aXIgYWt0aXYuIEZydWVoZXIgZmllbGVuIFNlbGYtU2VydmljZS1GZWF0dXJlcwogICAg +ICAgICAgICAgICAgLy8gKE1laW4gUHJvZmlsLCBNZWluIFNjaGljaHQtVGVhbSwgZWlnZW5lIFNj +aGljaHQtSGlnaGxpZ2h0cykKICAgICAgICAgICAgICAgIC8vIGVpbmZhY2ggc3RpbGwgYXVzIOKA +lCBkZXIgVXNlciBzYWggbGVlcmUgS25vZXBmZSBvaG5lIEVya2xhZXJ1bmcuCiAgICAgICAgICAg +ICAgICBpZiAoIVoubWVpbmVQZXJzb25JZCAmJiAhWi5yZWNodGUuaXN0U3VwZXJVc2VyICYmICFa +LnJlY2h0ZS5pc3RGYWNoYXVmc2ljaHQpIHsKICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRGVp +bmUgTlctS2VubnVuZyDigJ4nICsgKFouYmVudXR6ZXIgfHwgJz8nKSArICciIGlzdCBrZWluZXIg +UGxhbi1QZXJzb24genVnZW9yZG5ldC4gJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Vp +Z2VuZXMgUHJvZmlsIHVuZCDigJ5NZWluIFNjaGljaHQtVGVhbSIgc2luZCBkZXNoYWxiIG5pY2h0 +IHZlcmbDvGdiYXIg4oCUICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICdiaXR0ZSBkZW4g +QWRtaW4gdW0gWnVvcmRudW5nIGRlaW5lciBLZW5udW5nIGluIGRlciBQZXJzb25hbHZlcndhbHR1 +bmcuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FybnVuZycsIHsgZGF1ZXI6IDEyMDAw +IH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFVYLUF1ZGl0IFNwcmlu +dCAxLjQgKDIwMjYtMDUtMjkpOiBTZWxmLVNlcnZpY2UtQnV0dG9ucwogICAgICAgICAgICAgICAg +Ly8gKFNjaGljaHQtVGVhbSwgUHJvZmlsLUF2YXRhcikgdmVyc3RlY2tlbiB3ZW5uIGtlaW5lIFBl +cnNvbgogICAgICAgICAgICAgICAgLy8genVnZW9yZG5ldCDigJQgc29uc3QgY2xpY2t0IFVzZXIg +dW5kIGtyaWVndCBlcnN0IGRhbm4gZGVuCiAgICAgICAgICAgICAgICAvLyBUb2FzdC4gRGFzIHZl +cmhpbmRlcnQgIktsaWNrIOKGkiBGZWhsZXIiLUZyaWN0aW9uLgogICAgICAgICAgICAgICAgdmFy +IGJ0blRlYW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXNjaGljaHR0ZWFtJyk7CiAg +ICAgICAgICAgICAgICBpZiAoYnRuVGVhbSkgYnRuVGVhbS5jbGFzc0xpc3QudG9nZ2xlKCd2ZXJz +dGVja3QnLCAhWi5tZWluZVBlcnNvbklkKTsKCiAgICAgICAgICAgICAgICB0YWdlRXJ6ZXVnZW4o +KTsKICAgICAgICAgICAgICAgIHRhZ0luZm9zQmVyZWNobmVuKCk7CiAgICAgICAgICAgICAgICBa +LmhldXRlU3RyID0gZGF0dW1TdHIobmV3IERhdGUoKSk7CgogICAgICAgICAgICAgICAgYmV6ZWlj +aG51bmdlbkFud2VuZGVuKCk7CiAgICAgICAgICAgICAgICBtYXJraWVydW5nZW5BbndlbmRlbigp +OwogICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbmFsZU1vZHVsZUxhZGVuKCkudGhlbihmdW5j +dGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBuYXZTaWNodGJhcmtlaXRBbndlbmRlbigpOwog +ICAgICAgICAgICAgICAgICAgIGhldXRlQmxvY2tBa3R1YWxpc2llcmVuKCk7CiAgICAgICAgICAg +ICAgICAgICAgbGFkZU92ZXJsYXlWZXJzdGVja2VuKCdhbnNpY2h0LXBsYW51bmcnKTsKICAgICAg +ICAgICAgICAgIH0pOwogICAgICAgICAgICB9KQogICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24o +ZSkgewogICAgICAgICAgICAgICAgLy8gQmVpIEZlaGxlciB0cm90emRlbSBPdmVybGF5IHdlZywg +c29uc3Qgc2l0enQgZGVyIFVzZXIKICAgICAgICAgICAgICAgIC8vIHVudGVyIGRlbSBTcGlubmVy +IGZlc3QuCiAgICAgICAgICAgICAgICBsYWRlT3ZlcmxheVZlcnN0ZWNrZW4oJ2Fuc2ljaHQtcGxh +bnVuZycpOwogICAgICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgICAgfSk7CiAgICB9Cgog +ICAgLy8gPT09PT0gT3B0aW9uYWwtTW9kdWxlOiBTdGF0aXN0aWsgKyBMb2didWNoID09PT09CiAg +ICAvLyBTdGF0aXNjaGUgSW1wb3J0cyB3dWVyZGVuIGltIFZpZXctU291cmNlICsgTmV0d29yay1U +YWIgZnVlciBBTExFCiAgICAvLyBVc2VyIHNpY2h0YmFyIG1hY2hlbiwgZGFzcyBlcyBlaW5lbiBT +dGF0aXN0aWstIHVuZCBlaW5lbiBMb2didWNoLQogICAgLy8gQmVyZWljaCBnaWJ0LiBTdGF0dGRl +c3NlbiB3ZXJkZW4gTW9kdWwgKyBNYXJrdXAgKyBOYXYtQnV0dG9uIGVyc3QKICAgIC8vIHp1ciBM +YXVmemVpdCBuYWNoZ2VsYWRlbiDigJQgdW5kIGF1Y2ggbnVyLCB3ZW5uIGRlciBlaW5nZWxvZ2d0 +ZSBVc2VyCiAgICAvLyBkaWUgamV3ZWlsaWdlIHNlaGVuLUJlcmVjaHRpZ3VuZyBoYXQuIFNlcnZl +ci1zaWRlIGJsb2NrdCB6dXNhZXR6bGljaAogICAgLy8gZWluIDQwNC1GaWx0ZXIgZGlyZWt0ZW4g +WnVncmlmZiBhdWYgL2pzL3N0YXRpc3Rpay5qcywgL2pzL2xvZ2J1Y2guanMsCiAgICAvLyAvZGF0 +YS9tYWluZnJhbWUuaHRtbCwgL2RhdGEvc2FuaXRpemVyLmh0bWwg4oCUIGZ1ZXIgVW5iZXJlY2h0 +aWd0ZSBpc3QgbmljaHRzCiAgICAvLyBkYXZvbiBpbSBEZXZUb29scy1OZXR3b3JrLVRhYiBzaWNo +dGJhci4KICAgIHZhciBfb3B0TW9kdWxlR2VsYWRlbiA9IHsgc3RhdGlzdGlrOiBmYWxzZSwgbG9n +YnVjaDogZmFsc2UgfTsKICAgIGZ1bmN0aW9uIF9uYXZCdG5FaW5mdWVnZW4oaWQsIGxhYmVsLCBh +bnNpY2h0KSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSkgcmV0dXJu +OwogICAgICAgIHZhciBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAg +ICAgICBidG4uY2xhc3NOYW1lID0gJ25hdi1idG4nOwogICAgICAgIGJ0bi5pZCA9IGlkOwogICAg +ICAgIGJ0bi50ZXh0Q29udGVudCA9IGxhYmVsOwogICAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2Rh +dGEtYW5zaWNodCcsIGFuc2ljaHQpOwogICAgICAgIHZhciBuYXYgPSBkb2N1bWVudC5xdWVyeVNl +bGVjdG9yKCcuaGVhZGVyLW5hdicpOwogICAgICAgIHZhciBuYXZBZG1pbiA9IGRvY3VtZW50Lmdl +dEVsZW1lbnRCeUlkKCduYXYtYWRtaW4nKTsKICAgICAgICBpZiAobmF2ICYmIG5hdkFkbWluKSBu +YXYuaW5zZXJ0QmVmb3JlKGJ0biwgbmF2QWRtaW4pOwogICAgICAgIGVsc2UgaWYgKG5hdikgbmF2 +LmFwcGVuZENoaWxkKGJ0bik7CiAgICB9CiAgICBmdW5jdGlvbiBfbWFya3VwRWluZnVlZ2VuKGh0 +bWwpIHsKICAgICAgICB2YXIgYW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFs +LW92ZXJsYXknKTsKICAgICAgICBpZiAoYW5jaG9yKSBhbmNob3IuaW5zZXJ0QWRqYWNlbnRIVE1M +KCdiZWZvcmViZWdpbicsIGh0bWwpOwogICAgICAgIGVsc2UgZG9jdW1lbnQuYm9keS5pbnNlcnRB +ZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIGh0bWwpOwogICAgfQogICAgZnVuY3Rpb24gb3B0aW9u +YWxlTW9kdWxlTGFkZW4oKSB7CiAgICAgICAgdmFyIHNlaGVuID0gKFoucmVjaHRlICYmIFoucmVj +aHRlLnNlaGVuKSB8fCB7fTsKICAgICAgICB2YXIgZGFyZlN0YXQgPSAhIShaLnJlY2h0ZSAmJiAo +Wi5yZWNodGUuaXN0U3VwZXJVc2VyIHx8IHNlaGVuLnN0YXRpc3RpaykpOwogICAgICAgIHZhciBk +YXJmTG9nICA9ICEhKFoucmVjaHRlICYmIChaLnJlY2h0ZS5pc3RTdXBlclVzZXIgfHwgc2VoZW4u +bG9nYnVjaCkpOwogICAgICAgIHZhciBhdWZnYWJlbiA9IFtdOwogICAgICAgIGlmIChkYXJmU3Rh +dCAmJiAhX29wdE1vZHVsZUdlbGFkZW4uc3RhdGlzdGlrKSB7CiAgICAgICAgICAgIGF1ZmdhYmVu +LnB1c2goX29wdE1vZHVsTGFkZW4oJ3N0YXRpc3RpaycsICdTdGF0aXN0aWsnLCAnL2RhdGEvbWFp +bmZyYW1lLmh0bWwnLCAnLi9qcy9zdGF0aXN0aWsuanMnLCBmdW5jdGlvbihtb2QsIGh0bWwpIHsK +ICAgICAgICAgICAgICAgIHN0YXRpc3Rpa1JlbmRlcm4gICA9IG1vZC5zdGF0aXN0aWtSZW5kZXJu +OwogICAgICAgICAgICAgICAgc3RhdGlzdGlrTGFkZW4gICAgID0gbW9kLnN0YXRpc3Rpa0xhZGVu +OwogICAgICAgICAgICAgICAgc3RhdEZpbHRlclNldHplbiAgID0gbW9kLnN0YXRGaWx0ZXJTZXR6 +ZW47CiAgICAgICAgICAgICAgICBzdGF0SW5mb1plaWdlbiAgICAgPSBtb2Quc3RhdEluZm9aZWln +ZW47CiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uSG9va3Muc3RhdGlzdGlrUmVuZGVybiA9IHN0 +YXRpc3Rpa1JlbmRlcm47CiAgICAgICAgICAgICAgICByZW5kZXJIb29rcy5zdGF0aXN0aWtMYWRl +biAgICAgICA9IHN0YXRpc3Rpa0xhZGVuOwogICAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAg +ICAgIGlmIChkYXJmTG9nICYmICFfb3B0TW9kdWxlR2VsYWRlbi5sb2didWNoKSB7CiAgICAgICAg +ICAgIGF1ZmdhYmVuLnB1c2goX29wdE1vZHVsTGFkZW4oJ2xvZ2J1Y2gnLCAnTG9nYnVjaCcsICcv +ZGF0YS9zYW5pdGl6ZXIuaHRtbCcsICcuL2pzL2xvZ2J1Y2guanMnLCBmdW5jdGlvbihtb2QsIGh0 +bWwpIHsKICAgICAgICAgICAgICAgIGxvZ2J1Y2hMYWRlbiAgID0gbW9kLmxvZ2J1Y2hMYWRlbjsK +ICAgICAgICAgICAgICAgIGxvZ2J1Y2hGaWx0ZXJuID0gbW9kLmxvZ2J1Y2hGaWx0ZXJuOwogICAg +ICAgICAgICAgICAgbG9nYnVjaEhvb2tzICAgPSBtb2QubG9nYnVjaEhvb2tzOwogICAgICAgICAg +ICAgICAgbG9nYnVjaEhvb2tzLmFmdGVyUmVzdG9yZSA9IGZ1bmN0aW9uKCkgeyBkYXRlbkxhZGVu +KCk7IH07CiAgICAgICAgICAgICAgICByZW5kZXJIb29rcy5sb2didWNoTGFkZW4gPSBsb2didWNo +TGFkZW47CiAgICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFByb21pc2Uu +YWxsKGF1ZmdhYmVuKTsKICAgIH0KCiAgICAvLyBHZW1laW5zYW1lciBMb2FkZXIgZnVlciBTdGF0 +aXN0aWsgKyBMb2didWNoOiBsYWVkdCBKUy1Nb2R1bCArIEhUTUwtCiAgICAvLyBGcmFnbWVudCBw +YXJhbGxlbCwgZnVlZ3QgZGVuIE5hdi1CdXR0b24gTlVSIGVpbiB3ZW5uIGJlaWRlcyBnZWtsYXBw +dAogICAgLy8gaGF0IChzb25zdCBrb21tdCBkZXIgVGFiIG5pY2h0IGltIERPTSBhbiB1bmQgZGVy +IFVzZXIgd2FlcmUgbWl0IGVpbmVyCiAgICAvLyBsZWVyZW4gU2VpdGUga29uZnJvbnRpZXJ0KS4g +TGFkZS1GZWhsZXIgd2VyZGVuIGluIGRlciBCcm93c2VyLUtvbnNvbGUKICAgIC8vIHByb3Rva29s +bGllcnQgKyBkZW0gU3VwZXJVc2VyIGFscyBUb2FzdCBhbmdlemVpZ3QuCiAgICBmdW5jdGlvbiBf +b3B0TW9kdWxMYWRlbihrZXksIGxhYmVsLCBodG1sUGZhZCwgbW9kdWxQZmFkLCBiaW5kaW5ncykg +ewogICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbCiAgICAgICAgICAgIGltcG9ydChtb2R1bFBm +YWQpLmNhdGNoKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tW +STNdICcgKyBsYWJlbCArICctTW9kdWwtSW1wb3J0IGZlaGxnZXNjaGxhZ2VuICgnICsgbW9kdWxQ +ZmFkICsgJyk6JywgZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAg +fSksCiAgICAgICAgICAgIGZldGNoKGh0bWxQZmFkKS50aGVuKGZ1bmN0aW9uKHIpIHsKICAgICAg +ICAgICAgICAgIGlmICghci5vaykgeyBjb25zb2xlLmVycm9yKCdbVkkzXSAnICsgbGFiZWwgKyAn +LU1hcmt1cCBIVFRQICcgKyByLnN0YXR1cyArICcgKCcgKyBodG1sUGZhZCArICcpJyk7IHJldHVy +biAnJzsgfQogICAgICAgICAgICAgICAgcmV0dXJuIHIudGV4dCgpOwogICAgICAgICAgICB9KS5j +YXRjaChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVkkzXSAn +ICsgbGFiZWwgKyAnLU1hcmt1cC1GZXRjaCBmZWhsZ2VzY2hsYWdlbiAoJyArIGh0bWxQZmFkICsg +Jyk6JywgZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgIH0pCiAgICAg +ICAgXSkudGhlbihmdW5jdGlvbihhcnIpIHsKICAgICAgICAgICAgdmFyIG1vZCA9IGFyclswXSwg +aHRtbCA9IGFyclsxXTsKICAgICAgICAgICAgaWYgKCFtb2QgfHwgIWh0bWwpIHsKICAgICAgICAg +ICAgICAgIGlmIChaLnJlY2h0ZSAmJiBaLnJlY2h0ZS5pc3RTdXBlclVzZXIpIHsKICAgICAgICAg +ICAgICAgICAgICB0b2FzdChsYWJlbCArICcga29ubnRlIG5pY2h0IGdlbGFkZW4gd2VyZGVuIOKA +lCBEZXRhaWxzIHNpZWhlIERldlRvb2xzLUtvbnNvbGUnLCAnZmVobGVyJyk7CiAgICAgICAgICAg +ICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAg +dHJ5IHsKICAgICAgICAgICAgICAgIGJpbmRpbmdzKG1vZCwgaHRtbCk7CiAgICAgICAgICAgICAg +ICBfbWFya3VwRWluZnVlZ2VuKGh0bWwpOwogICAgICAgICAgICAgICAgX25hdkJ0bkVpbmZ1ZWdl +bignbmF2LScgKyBrZXksIGxhYmVsLCBrZXkpOwogICAgICAgICAgICAgICAgX29wdE1vZHVsZUdl +bGFkZW5ba2V5XSA9IHRydWU7CiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1tWSTNdICcg +KyBsYWJlbCArICctTW9kdWwgZ2VsYWRlbicpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAg +ICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVkkzXSAnICsgbGFiZWwgKyAnLUJpbmRpbmdz +L01hcmt1cCBmZWhsZ2VzY2hsYWdlbjonLCBlKTsKICAgICAgICAgICAgICAgIGlmIChaLnJlY2h0 +ZSAmJiBaLnJlY2h0ZS5pc3RTdXBlclVzZXIpIHsKICAgICAgICAgICAgICAgICAgICB0b2FzdChs +YWJlbCArICcgSW5pdGlhbGlzaWVydW5nIGZlaGxnZXNjaGxhZ2VuIOKAlCBEZXRhaWxzIHNpZWhl +IERldlRvb2xzLUtvbnNvbGUnLCAnZmVobGVyJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg +ICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICAvLyBIb3QtUmVsb2FkOiBhZG1pbi5qc29uIHd1 +cmRlIGF1ZiBkZW0gU2hhcmUgZ2VhZW5kZXJ0IChhbmRlcmVyIFNVIGhhdAogICAgLy8gZ2VzcGVp +Y2hlcnQpLiBXaXIgaG9sZW4gQWRtaW4tRGF0ZW4gKyBSZWNodGUgbmV1IHVuZCByZW5kZXJuIGRp +ZQogICAgLy8gcmVsZXZhbnRlbiBCZXJlaWNoZS4gRGVyIFRhYi1XZWNoc2VsIHdpcmQgbmljaHQg +YXVzZ2Vsb2VzdDsgVXNlcgogICAgLy8gPT09PT0gVXBkYXRlLUJlcmVpY2ggKFN1cGVyVXNlcik6 +IFN0YXR1cywgQ2hhbmdlbG9nLCBGb3J0c2Nocml0dCwgU2VsYnN0dGVzdCA9PT09PQogICAgdmFy +IF91cGRhdGVQb2xsVGltZXIgPSBudWxsOwogICAgZnVuY3Rpb24gX3VwZEVzYyhzKSB7IHZhciBk +ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGQudGV4dENvbnRlbnQgPSBTdHJpbmco +cyA9PSBudWxsID8gJycgOiBzKTsgcmV0dXJuIGQuaW5uZXJIVE1MOyB9CiAgICAvLyBFc2NhcGlu +ZyB6dWVyc3QgKFhTUy1zaWNoZXIpLCBkYW5uIG51ciAqKmZldHQqKiBhbHMgPHN0cm9uZz4genVs +YXNzZW4uCiAgICBmdW5jdGlvbiBfdXBkSW5saW5lKHMpIHsgcmV0dXJuIF91cGRFc2MocykucmVw +bGFjZSgvXCpcKihbXipdKylcKlwqL2csICc8c3Ryb25nPiQxPC9zdHJvbmc+Jyk7IH0KICAgIGZ1 +bmN0aW9uIF91cGRNZChtZCkgewogICAgICAgIHZhciBvdXQgPSBbXSwgaW5VbCA9IGZhbHNlOwog +ICAgICAgIFN0cmluZyhtZCkuc3BsaXQoJ1xuJykuZm9yRWFjaChmdW5jdGlvbihsbikgewogICAg +ICAgICAgICB2YXIgdCA9IGxuLnJlcGxhY2UoL1xzKyQvLCAnJyk7CiAgICAgICAgICAgIGlmICgv +XiN7MSw2fVxzLy50ZXN0KHQpKSB7IGlmIChpblVsKSB7IG91dC5wdXNoKCc8L3VsPicpOyBpblVs +ID0gZmFsc2U7IH0gdmFyIGwgPSBNYXRoLm1pbih0Lm1hdGNoKC9eIysvKVswXS5sZW5ndGggKyAy +LCA2KTsgb3V0LnB1c2goJzxoJyArIGwgKyAnPicgKyBfdXBkSW5saW5lKHQucmVwbGFjZSgvXiMr +XHMvLCAnJykpICsgJzwvaCcgKyBsICsgJz4nKTsgfQogICAgICAgICAgICBlbHNlIGlmICgvXlst +Kl1ccy8udGVzdCh0KSkgeyBpZiAoIWluVWwpIHsgb3V0LnB1c2goJzx1bD4nKTsgaW5VbCA9IHRy +dWU7IH0gb3V0LnB1c2goJzxsaT4nICsgX3VwZElubGluZSh0LnJlcGxhY2UoL15bLSpdXHMvLCAn +JykpICsgJzwvbGk+Jyk7IH0KICAgICAgICAgICAgZWxzZSBpZiAodCA9PT0gJycpIHsgaWYgKGlu +VWwpIHsgb3V0LnB1c2goJzwvdWw+Jyk7IGluVWwgPSBmYWxzZTsgfSB9CiAgICAgICAgICAgIGVs +c2UgeyBpZiAoaW5VbCkgeyBvdXQucHVzaCgnPC91bD4nKTsgaW5VbCA9IGZhbHNlOyB9IG91dC5w +dXNoKCc8cD4nICsgX3VwZElubGluZSh0KSArICc8L3A+Jyk7IH0KICAgICAgICB9KTsKICAgICAg +ICBpZiAoaW5VbCkgb3V0LnB1c2goJzwvdWw+Jyk7CiAgICAgICAgcmV0dXJuIG91dC5qb2luKCcn +KTsKICAgIH0KICAgIGZ1bmN0aW9uIHVwZGF0ZUJlcmVpY2hSZW5kZXJuKCkgewogICAgICAgIHZh +ciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLXN0YXR1cy1ib3gnKTsKICAg +ICAgICBpZiAoIWJveCkgcmV0dXJuOwogICAgICAgIHZhciBjbEJveCA9IGRvY3VtZW50LmdldEVs +ZW1lbnRCeUlkKCd1cGRhdGUtY2hhbmdlbG9nJyk7CiAgICAgICAgdmFyIGFrdGlvbiA9IGRvY3Vt +ZW50LmdldEVsZW1lbnRCeUlkKCd1cGRhdGUtYWt0aW9uJyk7CiAgICAgICAgdmFyIHN0YXJ0QnRu +ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi11cGRhdGUtc3RhcnQnKTsKICAgICAgICBp +ZiAoc3RhcnRCdG4pIHN0YXJ0QnRuLm9uY2xpY2sgPSBfdXBkYXRlU3RhcnRLbGljazsKICAgICAg +ICBib3guY2xhc3NOYW1lID0gJ3VwZGF0ZS1ib3gnOwogICAgICAgIGJveC50ZXh0Q29udGVudCA9 +ICdQcsO8ZmUgUmVwb3NpdG9yeSDigKYnOwogICAgICAgIGNsQm94LmNsYXNzTGlzdC5hZGQoJ3Zl +cnN0ZWNrdCcpOwogICAgICAgIGFrdGlvbi5jbGFzc0xpc3QuYWRkKCd2ZXJzdGVja3QnKTsKICAg +ICAgICBhcGkoJy9hcGkvdXBkYXRlL3N0YXR1cycpLnRoZW4oZnVuY3Rpb24oZCkgewogICAgICAg +ICAgICBpZiAoZC5tYWludGVuYW5jZSAmJiBkLm1haW50ZW5hbmNlLmxvY2tlZCkgeyBfdXBkYXRl +Rm9ydHNjaHJpdHRQb2xsZW4oKTsgfQogICAgICAgICAgICB2YXIgbG9rYWwgPSBkLmxvY2FsVmVy +c2lvbiB8fCAnPycsIHJlbW90ZSA9IGQucmVtb3RlVmVyc2lvbiB8fCAnPyc7CiAgICAgICAgICAg +IGlmIChkLnVwZGF0ZUF2YWlsYWJsZSkgewogICAgICAgICAgICAgICAgYm94LmNsYXNzTmFtZSA9 +ICd1cGRhdGUtYm94IHVwZGF0ZS1ib3gtd2Fybic7CiAgICAgICAgICAgICAgICBib3guaW5uZXJI +VE1MID0gJzxzdHJvbmc+VXBkYXRlIHZlcmbDvGdiYXI6PC9zdHJvbmc+IGFrdHVlbGwgdicgKyBf +dXBkRXNjKGxva2FsKSArICcgJnJhcnI7IG5ldSA8c3Ryb25nPnYnICsgX3VwZEVzYyhyZW1vdGUp +ICsgJzwvc3Ryb25nPic7CiAgICAgICAgICAgICAgICB2YXIgY2wgPSBkLmNoYW5nZWxvZyB8fCB7 +fSwgaHRtbCA9ICcnOwogICAgICAgICAgICAgICAgaWYgKGNsLmZvcm1hdCA9PT0gJ21hcmtkb3du +JykgeyBodG1sID0gJzxoND5JbmhhbHQgZGllc2VzIFVwZGF0ZXM8L2g0PicgKyBfdXBkTWQoY2wu +dGV4dCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNsLmZvcm1hdCA9PT0gJ2ZpbGVzJykg +eyBodG1sID0gJzxoND5EaWVzZSBEYXRlaWVuIHdlcmRlbiBha3R1YWxpc2llcnQgKCcgKyAoY2wu +ZmlsZXMgfHwgW10pLmxlbmd0aCArICcpPC9oND48dWwgY2xhc3M9InVwZGF0ZS1maWxlbGlzdCI+ +JyArIChjbC5maWxlcyB8fCBbXSkubWFwKGZ1bmN0aW9uKGYpIHsgcmV0dXJuICc8bGk+JyArIF91 +cGRFc2MoZikgKyAnPC9saT4nOyB9KS5qb2luKCcnKSArICc8L3VsPic7IH0KICAgICAgICAgICAg +ICAgIGVsc2UgeyBodG1sID0gJzxwPicgKyBfdXBkRXNjKGNsLnRleHQgfHwgJycpICsgJzwvcD4n +OyB9CiAgICAgICAgICAgICAgICBjbEJveC5pbm5lckhUTUwgPSBodG1sOyBjbEJveC5jbGFzc0xp +c3QucmVtb3ZlKCd2ZXJzdGVja3QnKTsKICAgICAgICAgICAgICAgIGFrdGlvbi5jbGFzc0xpc3Qu +cmVtb3ZlKCd2ZXJzdGVja3QnKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg +IGJveC5jbGFzc05hbWUgPSAndXBkYXRlLWJveCB1cGRhdGUtYm94LW9rJzsKICAgICAgICAgICAg +ICAgIGJveC5pbm5lckhUTUwgPSAnJiMxMDAwMzsgQWxsZXMgaW4gT3JkbnVuZyAmbWRhc2g7IFZl +cnNpb24gdicgKyBfdXBkRXNjKGxva2FsKSArICcgaXN0IGFrdHVlbGwuJzsKICAgICAgICAgICAg +fQogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgYm94LmNsYXNzTmFt +ZSA9ICd1cGRhdGUtYm94IHVwZGF0ZS1ib3gtZXJyJzsKICAgICAgICAgICAgYm94LnRleHRDb250 +ZW50ID0gJ1VwZGF0ZS1TdGF0dXMgbmljaHQgYWJydWZiYXI6ICcgKyBlLm1lc3NhZ2U7CiAgICAg +ICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBfdXBkYXRlU3RhcnRLbGljaygpIHsKICAgICAgICBp +ZiAoIXdpbmRvdy5jb25maXJtKCdVcGRhdGUgamV0enQgaW5zdGFsbGllcmVuP1xuXG5FcyB3aXJk +IHp1ZXJzdCBlaW5lIHZvbGxzdMOkbmRpZ2UgU2ljaGVydW5nIGVyc3RlbGx0LCBkYW5uIGRhcyBV +cGRhdGUgZWluZ2VzcGllbHQgdW5kIGVpbiBTZWxic3R0ZXN0IGF1c2dlZsO8aHJ0LiBXw6RocmVu +ZCBkZXMgVm9yZ2FuZ3MgaXN0IGRhcyBTeXN0ZW0gZ2VzcGVycnQuJykpIHJldHVybjsKICAgICAg +ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLWFrdGlvbicpLmNsYXNzTGlzdC5hZGQo +J3ZlcnN0ZWNrdCcpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGRhdGUtZm9y +dHNjaHJpdHQnKS5jbGFzc0xpc3QucmVtb3ZlKCd2ZXJzdGVja3QnKTsKICAgICAgICBhcGlQb3N0 +KCcvYXBpL3VwZGF0ZS9zdGFydCcsIHt9KS50aGVuKGZ1bmN0aW9uKGQpIHsKICAgICAgICAgICAg +aWYgKGQgJiYgZC5zdGFydGVkID09PSBmYWxzZSkgdG9hc3QoJ1VwZGF0ZSBsw6R1ZnQgYmVyZWl0 +cy4nLCAnaW5mbycpOwogICAgICAgICAgICBfdXBkYXRlRm9ydHNjaHJpdHRQb2xsZW4oKTsKICAg +ICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRvYXN0KCdVcGRhdGUtU3RhcnQgZmVobGdlc2No +bGFnZW46ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgX3VwZGF0ZUZvcnRzY2hyaXR0UG9sbGVu +KCk7IH0pOwogICAgfQogICAgZnVuY3Rpb24gX3VwZGF0ZUZvcnRzY2hyaXR0UG9sbGVuKCkgewog +ICAgICAgIHZhciBmb3J0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZS1mb3J0c2No +cml0dCcpOwogICAgICAgIGlmIChmb3J0KSBmb3J0LmNsYXNzTGlzdC5yZW1vdmUoJ3ZlcnN0ZWNr +dCcpOwogICAgICAgIHZhciBiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLXBy +b2dyZXNzLWJhcicpOwogICAgICAgIHZhciB0eHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn +dXBkYXRlLXByb2dyZXNzLXRleHQnKTsKICAgICAgICB2YXIgbG9nRWwgPSBkb2N1bWVudC5nZXRF +bGVtZW50QnlJZCgndXBkYXRlLWxvZycpOwogICAgICAgIHZhciBzdEVsID0gZG9jdW1lbnQuZ2V0 +RWxlbWVudEJ5SWQoJ3VwZGF0ZS1zZWxmdGVzdCcpOwogICAgICAgIGlmIChfdXBkYXRlUG9sbFRp +bWVyKSBjbGVhckludGVydmFsKF91cGRhdGVQb2xsVGltZXIpOwogICAgICAgIGZ1bmN0aW9uIHRp +Y2soKSB7CiAgICAgICAgICAgIGFwaSgnL2FwaS91cGRhdGUvcHJvZ3Jlc3MnKS50aGVuKGZ1bmN0 +aW9uKGQpIHsKICAgICAgICAgICAgICAgIGJhci5zdHlsZS53aWR0aCA9IChkLnBlcmNlbnQgfHwg +MCkgKyAnJSc7CiAgICAgICAgICAgICAgICBiYXIuY2xhc3NOYW1lID0gJ3VwZGF0ZS1wcm9ncmVz +cy1iYXInICsgKGQuc3RhdGUgPT09ICdmYWlsZWQnID8gJyB1cGRhdGUtcHJvZ3Jlc3MtZmFpbCcg +OiAoZC5zdGF0ZSA9PT0gJ2RvbmUnID8gJyB1cGRhdGUtcHJvZ3Jlc3MtZG9uZScgOiAnJykpOwog +ICAgICAgICAgICAgICAgdHh0LnRleHRDb250ZW50ID0gJ1snICsgKGQucGVyY2VudCB8fCAwKSAr +ICclXSAnICsgKGQubWVzc2FnZSB8fCAnJyk7CiAgICAgICAgICAgICAgICBpZiAoZC5sb2cpIGxv +Z0VsLnRleHRDb250ZW50ID0gZC5sb2cubWFwKGZ1bmN0aW9uKGwpIHsgcmV0dXJuIGwubXNnOyB9 +KS5qb2luKCdcbicpOwogICAgICAgICAgICAgICAgaWYgKGQuc2VsZnRlc3QgJiYgZC5zZWxmdGVz +dC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdEVsLmlubmVySFRNTCA9ICc8aDQ+U2Vs +YnN0dGVzdDwvaDQ+JyArIGQuc2VsZnRlc3QubWFwKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAg +ICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJzdC1yb3cgJyArIChyLm9rID8gJ3N0LW9r +JyA6ICdzdC1mYWlsJykgKyAnIj4nICsgKHIub2sgPyAnJiMxMDAwMzsnIDogJyYjMTAwMDc7Jykg +KyAnICcgKyBfdXBkRXNjKHIubmFtZSkgKyAnIDxzcGFuIGNsYXNzPSJzdC1kZXRhaWwiPicgKyBf +dXBkRXNjKHIuZGV0YWlsKSArICc8L3NwYW4+PC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICB9 +KS5qb2luKCcnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChkLnN0YXRl +ID09PSAnZG9uZScpIHsKICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKF91cGRhdGVQ +b2xsVGltZXIpOyBfdXBkYXRlUG9sbFRpbWVyID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB0 +b2FzdCgnVXBkYXRlIGFiZ2VzY2hsb3NzZW46IHYnICsgKGQudG9WZXJzaW9uIHx8ICcnKSArICcg +4oCUIFN5c3RlbSBmcmVpZ2VnZWJlbi4nLCAnZXJmb2xnJywgeyBkYXVlcjogMTIwMDAgfSk7CiAg +ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCh1cGRhdGVCZXJlaWNoUmVuZGVybiwgMTgwMCk7 +CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGQuc3RhdGUgPT09ICdmYWlsZWQnKSB7CiAgICAg +ICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChfdXBkYXRlUG9sbFRpbWVyKTsgX3VwZGF0ZVBv +bGxUaW1lciA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgdHh0LnRleHRDb250ZW50ID0gJ0ZF +SExHRVNDSExBR0VOOiAnICsgKGQuZXJyb3IgfHwgJycpICsgJyDigJQgdm9yaGVyaWdlciBTdGFu +ZCB3aWVkZXJoZXJnZXN0ZWxsdC4nOwogICAgICAgICAgICAgICAgICAgIHRvYXN0KCdVcGRhdGUg +ZmVobGdlc2NobGFnZW4g4oCUIGF1dG9tYXRpc2NoZXIgUm9sbGJhY2sgYXVzZ2Vmw7xocnQuJywg +J2ZlaGxlcicsIHsgZGF1ZXI6IDE1MDAwIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg +ICB9KS5jYXRjaChmdW5jdGlvbigpIHt9KTsKICAgICAgICB9CiAgICAgICAgdGljaygpOwogICAg +ICAgIF91cGRhdGVQb2xsVGltZXIgPSBzZXRJbnRlcnZhbCh0aWNrLCAxMDAwKTsKICAgIH0KCiAg +ICAvLyBibGVpYnQgZG9ydCwgd28gZXIgZ2VyYWRlIGlzdC4gV2VubiBnZXJhZGUgZWluIENoZWNr +LU1vZGFsIG9kZXIKICAgIC8vIEltcGVyc29uYXRpb24tQmFubmVyIGFrdGl2IGlzdCwgdWViZXJz +cHJpbmdlbiB3aXIgZGllIEFrdHVhbGlzaWVydW5nLAogICAgLy8gZGFtaXQga2VpbmUgQXJiZWl0 +IHZlcmxvcmVuIGdlaHQgYnp3LiBkZXIgVGVzdC1Lb250ZXh0IGludGFrdCBibGVpYnQuCiAgICBm +dW5jdGlvbiBhZG1pbkhvdFJlbG9hZCgpIHsKICAgICAgICBpZiAoZGlydHlBa3RpdmUgJiYgZGly +dHlBa3RpdmUoKS5sZW5ndGggPiAwKSByZXR1cm47ICAvLyBVc2VyIGJlYXJiZWl0ZXQgZ2VyYWRl +IHdhcwogICAgICAgIGlmIChpbXBlcnNvbmF0aW9uQWt0aXYoKSkgcmV0dXJuOyAgLy8gaW0gSW1w +ZXJzb25hdGlvbnMtTW9kdXMKICAgICAgICBQcm9taXNlLmFsbChbYXBpKCcvYXBpL2FkbWluJyks +IGFwaSgnL2FwaS9pbmZvJyldKS50aGVuKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgdmFyIGFk +bWluTmV1ID0gYWRtaW5MaXN0ZW5Ob3JtYWxpc2llcmVuKHJbMF0pOwogICAgICAgICAgICB2YXIg +aW5mbyA9IHJbMV07CiAgICAgICAgICAgIHZhciByb2xsZW5EaWZmID0gKFoucmVjaHRlICYmIFou +cmVjaHRlLnJvbGxlKSAhPT0gaW5mby5yb2xsZTsKICAgICAgICAgICAgWi5hZG1pbiA9IGFkbWlu +TmV1OwogICAgICAgICAgICBaLnJlY2h0ZSA9IHJlY2h0ZUF1c0luZm8oaW5mbyk7CiAgICAgICAg +ICAgIC8vIENvZGUtTWFwICsgR3J1cHBlbi1NYXAgbmV1IGF1ZmJhdWVuLCBmYWxscyBTY2hpY2h0 +Y29kZXMvR3J1cHBlbiBtaXQtZ2VhZW5kZXJ0IHd1cmRlbgogICAgICAgICAgICBaLmNvZGVNYXAg +PSB7fTsKICAgICAgICAgICAgKFouYWRtaW4uc2NoaWNodGNvZGVzIHx8IFtdKS5mb3JFYWNoKGZ1 +bmN0aW9uKHNjKSB7CiAgICAgICAgICAgICAgICBaLmNvZGVNYXBbc2MuY29kZV0gPSB7IGhpbnRl +cmdydW5kOiBzYy5oaW50ZXJncnVuZCwgc2NocmlmdDogc2Muc2NocmlmdCwga3VlcnplbDogc2Mu +Y29kZSB9OwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgWi5ncnVwcGVuTWFwID0ge307CiAg +ICAgICAgICAgIChaLmFkbWluLmdydXBwZW4gfHwgW10pLmZvckVhY2goZnVuY3Rpb24oZ3IpIHsK +ICAgICAgICAgICAgICAgIFouZ3J1cHBlbk1hcFtnci5uYW1lXSA9IHsgaGludGVyZ3J1bmQ6IGdy +LmhpbnRlcmdydW5kLCBzY2hyaWZ0OiBnci5zY2hyaWZ0LCBiZXplaWNobnVuZzogZ3IuYmV6ZWlj +aG51bmcgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJlemVpY2hudW5nZW5BbndlbmRl +bigpOwogICAgICAgICAgICBtYXJraWVydW5nZW5BbndlbmRlbigpOwogICAgICAgICAgICAvLyBP +cHRpb25hbC1Nb2R1bGUgbmFjaGxhZGVuLCBmYWxscyBkZXIgVXNlciBnZXJhZGUgZnJpc2NoCiAg +ICAgICAgICAgIC8vIFN0YXRpc3Rpay0vTG9nYnVjaC1SZWNodGUgYmVrb21tZW4gaGF0IChpZGVt +cG90ZW50OiBiZXJlaXRzCiAgICAgICAgICAgIC8vIGdlbGFkZW5lIE1vZHVsZSB3ZXJkZW4gdWVi +ZXJzcHJ1bmdlbikuCiAgICAgICAgICAgIG9wdGlvbmFsZU1vZHVsZUxhZGVuKCk7CiAgICAgICAg +ICAgIG5hdlNpY2h0YmFya2VpdEFud2VuZGVuKCk7CiAgICAgICAgICAgIGFkbWluU3VidGFiRmls +dGVyQW53ZW5kZW4oKTsKICAgICAgICAgICAgaWYgKHR5cGVvZiBhZG1pblJlbmRlcm4gPT09ICdm +dW5jdGlvbicpIGFkbWluUmVuZGVybigpOwogICAgICAgICAgICAvLyBUYWctSW5mb3MgKEZlaWVy +dGFnZSwgRmVyaWVuLCBTb25kZXJ0ZXJtaW5lKSBhdWYgQmFzaXMgZGVyIG5ldWVuCiAgICAgICAg +ICAgIC8vIGFkbWluLmpzb24gbmV1IGJlcmVjaG5lbiwgZGFtaXQgYWxsZSBhbmRlcmVuIFVzZXIg +ZGllIEFlbmRlcnVuZ2VuCiAgICAgICAgICAgIC8vIG9obmUgRjUgc2VoZW4g4oCUIGtvcGZSZW5k +ZXJuIGxpZXN0IGF1cyBaLnRhZ0luZm9zLgogICAgICAgICAgICBpZiAodHlwZW9mIHRhZ0luZm9z +QmVyZWNobmVuID09PSAnZnVuY3Rpb24nKSB0YWdJbmZvc0JlcmVjaG5lbigpOwogICAgICAgICAg +ICBpZiAodHlwZW9mIGtvcGZSZW5kZXJuID09PSAnZnVuY3Rpb24nKSBrb3BmUmVuZGVybigpOwog +ICAgICAgICAgICBpZiAocm9sbGVuRGlmZikgdG9hc3QoJ0RlaW5lIFJlY2h0ZSB3dXJkZW4gZ2Vy +YWRlIGFrdHVhbGlzaWVydCcsICdpbmZvJyk7CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7 +IC8qIHN0dW1tIOKAlCBWZXJzdWNoIHNwYWV0ZXIgdWViZXIgbmFlY2hzdGVuIEhlYXJ0YmVhdCAq +LyB9KTsKICAgIH0KCiAgICAvLyBwbGFudW5nSG90UmVsb2FkOiBsZWljaHRnZXdpY2h0aWdlIFZh +cmlhbnRlIGZ1ZXIgcGxhbnVuZy5qc29uLW10aW1lLQogICAgLy8gQWVuZGVydW5nZW4uIFdpcmQg +dm9tIGhlYXJ0YmVhdC13b3JrZXIgZ2V0cmlnZ2VydCwgc29iYWxkIHBsYW51bmcuanNvbgogICAg +Ly8gc2VydmVyc2VpdGlnIHZlcmFlbmRlcnQgd3VyZGUuIExpdmUtU3luYyBkZWNrdCBaZWxsLS9L +b21tZW50YXItVXBkYXRlcwogICAgLy8gYmVyZWl0cyBhYiDigJQgaGllciBnZWh0IGVzIG51ciBk +YXJ1bSwgZWlnZW5lIGVkaXRSZWNodGUvc2VoZW4tCiAgICAvLyBBZW5kZXJ1bmdlbiBtaXR6dWJl +a29tbWVuLiBEYWhlciBwb2xsZW4gd2lyIG51ciAvYXBpL2luZm8gdW5kIHNjaGF1ZW4sCiAgICAv +LyBvYiB1bnNlcmUgZWlnZW5lbiBSZWNodGUgc2ljaCBhZW5kZXJuOyB3ZW5uIGphLCBuZXUgcmVu +ZGVybi4KICAgIC8vIChDaGVycnktUGljayAxYWVmZTI2IEJ1ZyAjMy4pCiAgICBmdW5jdGlvbiBw +bGFudW5nSG90UmVsb2FkKCkgewogICAgICAgIGlmIChkaXJ0eUFrdGl2ZSAmJiBkaXJ0eUFrdGl2 +ZSgpLmxlbmd0aCA+IDApIHJldHVybjsKICAgICAgICBpZiAoaW1wZXJzb25hdGlvbkFrdGl2KCkp +IHJldHVybjsKICAgICAgICBhcGkoJy9hcGkvaW5mbycpLnRoZW4oZnVuY3Rpb24oaW5mbykgewog +ICAgICAgICAgICBpZiAoIWluZm8pIHJldHVybjsKICAgICAgICAgICAgaWYgKGluZm8udXBkYXRl +QXZhaWxhYmxlICYmICFfdXBkYXRlVG9hc3RTaG93bikgewogICAgICAgICAgICAgICAgX3VwZGF0 +ZVRvYXN0U2hvd24gPSB0cnVlOwogICAgICAgICAgICAgICAgdG9hc3QoCiAgICAgICAgICAgICAg +ICAgICAgJ1VwZGF0ZSB2ZXJmw7xnYmFyOiB2JyArIChpbmZvLnJlbW90ZVZlcnNpb24gfHwgJz8n +KSArCiAgICAgICAgICAgICAgICAgICAgJyDigJQgdXBkYXRlLmJhdCBhdXNmw7xocmVuIHVuZCBT +ZXJ2ZXIgbmV1IHN0YXJ0ZW4nLAogICAgICAgICAgICAgICAgICAgICdpbmZvJywgeyBkYXVlcjog +MjAwMDAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIg +YWx0UmVjaHRlID0gWi5yZWNodGUgfHwge307CiAgICAgICAgICAgIHZhciBhbHRTZXJpYWwgPSBK +U09OLnN0cmluZ2lmeSh7CiAgICAgICAgICAgICAgICBzZWhlbjogICAgIGFsdFJlY2h0ZS5zZWhl +biwKICAgICAgICAgICAgICAgIGVkaXRpZXJlbjogYWx0UmVjaHRlLmVkaXRpZXJlbiwKICAgICAg +ICAgICAgICAgIHJvbGxlOiAgICAgYWx0UmVjaHRlLnJvbGxlCiAgICAgICAgICAgIH0pOwogICAg +ICAgICAgICB2YXIgbmV1U2VyaWFsID0gSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAg +c2VoZW46ICAgICBpbmZvLnNlaGVuLAogICAgICAgICAgICAgICAgZWRpdGllcmVuOiBpbmZvLmVk +aXRpZXJlbiwKICAgICAgICAgICAgICAgIHJvbGxlOiAgICAgaW5mby5yb2xsZQogICAgICAgICAg +ICB9KTsKICAgICAgICAgICAgaWYgKGFsdFNlcmlhbCA9PT0gbmV1U2VyaWFsKSByZXR1cm47ICAv +LyBuaWNodHMgUmVsZXZhbnRlcyBnZWFlbmRlcnQKICAgICAgICAgICAgWi5yZWNodGUgPSByZWNo +dGVBdXNJbmZvKGluZm8pOwogICAgICAgICAgICBuYXZTaWNodGJhcmtlaXRBbndlbmRlbigpOwog +ICAgICAgICAgICBhZG1pblN1YnRhYkZpbHRlckFud2VuZGVuKCk7CiAgICAgICAgICAgIGlmICh0 +eXBlb2YgZGF0ZW5HcmlkUmVuZGVybiA9PT0gJ2Z1bmN0aW9uJykgZGF0ZW5HcmlkUmVuZGVybigp +OwogICAgICAgICAgICBpZiAodHlwZW9mIG5hbWVuUmVuZGVybiA9PT0gJ2Z1bmN0aW9uJykgbmFt +ZW5SZW5kZXJuKCk7CiAgICAgICAgICAgIHRvYXN0KCdEZWluZSBSZWNodGUgd3VyZGVuIGdlcmFk +ZSBha3R1YWxpc2llcnQnLCAnaW5mbycpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCkgeyAv +KiBzdHVtbSDigJQgbmFlY2hzdGVyIEhlYXJ0YmVhdCB2ZXJzdWNodCdzIHdpZWRlciAqLyB9KTsK +ICAgIH0KCiAgICAvLyBoZXV0ZUJsb2NrQWt0dWFsaXNpZXJlbiAtPiBqcy9jb3JlL2RhdGVuTGFk +ZW4uanMKICAgIC8vCiAgICAvLyA9PT09PSBTaWNodGJhcmtlaXQgU3RhdGlzdGlrIC8gTG9nYnVj +aCAvIEFkbWluaXN0cmF0aW9uIC8gQmFja3VwcyA9PT09PQogICAgLy8gZGFyZkFkbWluVGFiL2Rh +cmZTdGF0aXN0aWsvZGFyZkxvZ2J1Y2gsCiAgICAvLyBkYXJmQWRtaW5TdWJ0YWIvZGFyZlN0YXRp +c3Rpa1N1YiwKICAgIC8vIGJlcmVjaG5lRmFjaGF1ZnNpY2h0UmVjaHRlL2JlcmVjaG5lUmVndWxh +ZXJSZWNodGUsCiAgICAvLyBpbXBlcnNvbmF0ZSotRnVua3Rpb25lbiAoNSksCiAgICAvLyBBRE1J +Tl9TVUJUQUJTX05JRU1BTFNfRlVFUl9GQUNIQVVGU0lDSFQsIGFkbWluU3VidGFiRmlsdGVyQW53 +ZW5kZW4sCiAgICAvLyBkYXJmWmVsbGVFZGl0aWVyZW4sIG5hdlNpY2h0YmFya2VpdEFud2VuZGVu +CiAgICAvLyAgIC0+IGpzL2NvcmUvcGVybWlzc2lvbnMuanMKCiAgICAvLyB0YWdlRXJ6ZXVnZW4s +IHRhZ0luZm9zQmVyZWNobmVuLCBzdGFlcmtlQmVyZWNobmVuIC0+IGpzL2dyaWQvcmVuZGVyLmpz +CgogICAgLy8gRnVlaHJ1bmdzLUxvZ2lrIChmdWVocnVuZ3NTY2hpY2h0LCBmdWVocnVuZ3NaYWVo +bGVuLCBkZ2xzSW5TY2hpY2h0LCBha3RpdmVGdWVocnVuZywgRlVFSFJVTkdfU09MTCksCiAgICAv +LyBWZXJhbnR3b3J0dW5nc3dlY2hzZWwtU2FtbWVsLU1haWwgKHZlcmFudHdvcnR1bmdzV2VjaHNl +bERpYWxvZ1plaWdlbi9FbWFpbE9lZmZuZW4sIGludGVybiBpbiBlZGl0b3IuanMpLAogICAgLy8g +Z2VzYW10dmVyYW50d29ydGxpY2hFbWFpbCwgZnVlaHJ1bmdzVW50ZXJiZXNldHp1bmdQcnVlZmVu +IC0+IGpzL2dyaWQvZWRpdG9yLmpzCiAgICAvLwogICAgLy8gaXN0V2FjaGxlaXR1bmdBa3R1ZWxs +ZXJVc2VyLCB1bnRlcmJlc2V0enVuZ0FuYWx5c2VWaTMsIHp1RGF0dW1TY3JvbGxlbiwKICAgIC8v +IHVudGVyYmVzZXR6dW5nV2FybnVuZ1plaWdlbiAtPiBqcy9ncmlkL2ludGVyYWN0aW9uLmpzCgog +ICAgLy8gPT09PT0gQmVzZXR6dW5nc2tvbnRyb2xsZSAoR2VzYW10dmVyYW50d29ydGxpY2hlLCBI +ZWFkZXItVGFiKSA9PT09PQogICAgLy8gYmVzZXR6dW5nSG9va3MsIGJlc2V0enVuZ3NBbmFseXNl +LCBkZWZpeml0QnJpZWZpbmdPZWZmbmVuLAogICAgLy8gYmVzZXR6dW5nc1RhYkZhcmJlQWt0dWFs +aXNpZXJlbiwgZ2VzYW10dmVyYW50d29ydGxpY2hWb3JuYW1lRXJtaXR0ZWxuLAogICAgLy8gYmVz +ZXR6dW5nc2tvbnRyb2xsZVJlbmRlcm4sIGJlc2V0enVuZ3Nrb250cm9sbGVFdmVudHNBdWZoYWVu +Z2VuLAogICAgLy8gZnJlaVBlcnNvbmVuRnVlciwgYmVzZXR6dW5nTWFpbE1vZGFsIC0+IGpzL2Jl +c2V0enVuZy9iZXNldHp1bmcuanMKCiAgICAvLyBzY2hyYWZmdXJCZXJlY2huZW4sIGdyaWRSZW5k +ZXJuIC0+IGpzL2dyaWQvcmVuZGVyLmpzCgogICAgLy8ga29wZlJlbmRlcm4sIG5hbWVuUmVuZGVy +biwgZGF0ZW5HcmlkUmVuZGVybiwgemVsbGVWaXN1ZWxsQWt0dWFsaXNpZXJlbiwgc3RhZXJrZVpl +bGxlQWt0dWFsaXNpZXJlbiAtPiBqcy9ncmlkL3JlbmRlci5qcwoKICAgIC8vIGVkaXRvciAoTW9k +dWwtU3RhdGUpLCBlZGl0b3JPZWZmbmVuLCBlZGl0b3JTY2hsaWVzc2VuLCBlZGl0b3JBdXN3YWhs +LCBuYWNoYmFyRGF0dW0sIHNjaGljaHRUeXAsIHJ1aGV6ZWl0UHJ1ZWZlbiAtPiBqcy9ncmlkL2Vk +aXRvci5qcwoKICAgIC8vIHNjcm9sbFN5bmMsIHp1bUhldXRpZ2VuRGF0dW0sIGFuc2ljaHRXZWNo +c2VsbiAtPiBqcy9ncmlkL3JlbmRlci5qcwoKICAgIC8vID09PT09IEFkbWluIChrb25zb2xpZGll +cnQ6IERpc3BhdGNoZXIgKyBQZXJzb25lbiArIExpc3RlbiArCiAgICAvLyAgIEJlemVpY2hudW5n +ZW4gKyBCYWNrdXBzICsgU2NoaWNodGNvZGVzICsgRmVhdHVyZXMgKyBTdXBlclVzZXIgKwogICAg +Ly8gICBGYWNoYXVmc2ljaHQgKyBTdWItU2ljaHRiYXJrZWl0KSAtPiBqcy9hZG1pbi9hZG1pbi5q +cwoKICAgIC8vID09PT09IFN0YXRpc3RpayA9PT09PSAtPiBqcy9zdGF0aXN0aWsuanMKICAgIC8v +ID09PT09IFdvY2hlbnBsYW4gKyBQZXJzb25lbi1QbGFuID09PT09IC0+IGpzL3dvY2hlbnBsYW4v +d29jaGVucGxhbi5qcwogICAgLy8gPT09PT0gSW5mb3JtYXRpb25zZmVuc3RlciA9PT09PQoKICAg +IC8vIERlZmF1bHQtQmVkaWVudW5ncy1IaW53ZWlzZSDigJQgZ3JlaWZlbiB3ZW5uIGFkbWluLmJl +ZGllbnVuZ3N0ZXh0ZSBsZWVyCiAgICAvLyBvZGVyIG5pY2h0IHZvcmhhbmRlbiBpc3QuIEplZGUg +WmVpbGUgd2lyZCBhbHMgZWlnZW5lciBMaXN0ZW5laW50cmFnCiAgICAvLyBnZXJlbmRlcnQ7IEZv +cm1hdCAiVGl0ZWw6IFRleHQiIC0+IFRpdGVsIGZldHQuCiAgICB2YXIgQkVESUVOVU5HX0RFRkFV +TFQgPQogICAgICAgICdQbGFudW5nOiBBdWYgZWluZSBaZWxsZSBrbGlja2VuIHVtIGRlbiBTY2hp +Y2h0Y29kZSB6dSDDpG5kZXJuLiBLb21tZW50YXIgw7xiZXIgZGFzIEVpbmdhYmVmZWxkIGltIEVk +aXRvci5cbicgKwogICAgICAgICdXb2NoZW5wbGFuOiBER0wgdW5kIFdERi9GQlAgZ2V0cmVubnQg +ZGFyZ2VzdGVsbHQsIG1pdCBEaWVuc3RudW1tZXJuLiAqIG1hcmtpZXJ0IEJlc2V0enVuZyBhdXMg +ZGVtIEZ1bmt0aW9uc2Jlc2V0enVuZ3NwbGFuLlxuJyArCiAgICAgICAgJ1BlcnMuIFBsYW46IEph +aHJlc8O8YmVyc2ljaHQgZsO8ciBlaW5lIGVpbnplbG5lIFBlcnNvbiBtaXQgTW9uYXRza2FsZW5k +ZXJuLlxuJyArCiAgICAgICAgJ0hldXRlLUJ1dHRvbjogU2Nyb2xsdCB6dW0gaGV1dGlnZW4gRGF0 +dW0uXG4nICsKICAgICAgICAnQmFja3VwOiBFcnN0ZWxsdCBlaW5lIFNpY2hlcnVuZ3Nrb3BpZSBk +ZXIgYWt0dWVsbGVuIFBsYW51bmcuXG4nICsKICAgICAgICAnVmVyYW50d29ydGxpY2g6IERpZSBy +YW5naMO2Y2hzdGUgUGVyc29uIHBybyBTY2hpY2h0IHdpcmQgZ29sZGZhcmJlbiBtYXJraWVydC5c +bicgKwogICAgICAgICdLb21tZW50YXJlOiBaZWxsZW4gbWl0IEtvbW1lbnRhciBoYWJlbiBlaW4g +Z29sZGVuZXMgRHJlaWVjayBvYmVuIHJlY2h0cy5cbicgKwogICAgICAgICdCYWRnZXMgaW0gSGVh +ZGVyOiDwn46CIEdlYnVydHN0YWcsIOKaoCBXYXJudW5nLCDihLkgSGlud2VpcyDigJQgZGlyZWt0 +IGFtIGpld2VpbGlnZW4gVGFnLic7CgogICAgZnVuY3Rpb24gYmVkaWVudW5nWmVpbGVuUmVuZGVy +bih0eHQpIHsKICAgICAgICB2YXIgcXVlbGxlID0gdHh0IHx8ICcnOwogICAgICAgIGlmICghcXVl +bGxlLnRyaW0oKSkgcmV0dXJuICcnOwogICAgICAgIHJldHVybiBxdWVsbGUuc3BsaXQoL1xyP1xu +LykubWFwKGZ1bmN0aW9uKHplaWxlKSB7CiAgICAgICAgICAgIHplaWxlID0gemVpbGUudHJpbSgp +OwogICAgICAgICAgICBpZiAoIXplaWxlKSByZXR1cm4gJyc7CiAgICAgICAgICAgIHZhciBtID0g +emVpbGUubWF0Y2goL14oW146XXsyLDQwfSk6XHMqKC4rKSQvKTsKICAgICAgICAgICAgaWYgKG0p +IHsKICAgICAgICAgICAgICAgIHJldHVybiAnPGxpPjxzdHJvbmc+JyArIGVzY2FwZUhUTUwobVsx +XSkgKyAnOjwvc3Ryb25nPiAnICsgZXNjYXBlSFRNTChtWzJdKSArICc8L2xpPic7CiAgICAgICAg +ICAgIH0KICAgICAgICAgICAgcmV0dXJuICc8bGk+JyArIGVzY2FwZUhUTUwoemVpbGUpICsgJzwv +bGk+JzsKICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikuam9pbignJyk7CiAgICB9CgogICAgLy8g +R3J1cHBpZXJ0IGRpZSBTY2hpY2h0Y29kZXMgbmFjaCBkZXIgdm9yaGFuZGVuZW4gS2F0ZWdvcmll +LUxvZ2lrIHVuZAogICAgLy8gbGllZmVydCBIVE1MIGZ1ZXIgZWluIDMtc3BhbHRpZ2VzIFJhc3Rl +ciBwcm8gR3J1cHBlLgogICAgZnVuY3Rpb24gc2NoaWNodGNvZGVMZWdlbmRlSHRtbCgpIHsKICAg +ICAgICB2YXIgbGlzdGUgPSAoWi5hZG1pbi5zY2hpY2h0Y29kZXMgfHwgW10pLmZpbHRlcihpc3RD +b2RlQWt0aXYpOwogICAgICAgIHZhciBncnVwcGVuID0ge307CiAgICAgICAgbGlzdGUuZm9yRWFj +aChmdW5jdGlvbihzYykgewogICAgICAgICAgICB2YXIgayA9IHNjaGljaHRjb2RlS2F0ZWdvcmll +KHNjLmNvZGUpOwogICAgICAgICAgICBpZiAoIWdydXBwZW5bay5rZXldKSBncnVwcGVuW2sua2V5 +XSA9IHsgbGFiZWw6IGsubGFiZWwsIGl0ZW1zOiBbXSB9OwogICAgICAgICAgICBncnVwcGVuW2su +a2V5XS5pdGVtcy5wdXNoKHNjKTsKICAgICAgICB9KTsKICAgICAgICBmdW5jdGlvbiB0aWxlKHNj +KSB7CiAgICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0ic2MtbGVnZW5kZS16ZWxsZSI+JyAr +CiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9InNjLWxlZ2VuZGUtZmFyYmZlbGQiIHN0eWxl +PSJiYWNrZ3JvdW5kOicgKyBlc2NhcGVBdHRyKHNjLmhpbnRlcmdydW5kIHx8ICcjODg4JykgKyAn +O2NvbG9yOicgKyBlc2NhcGVBdHRyKHNjLnNjaHJpZnQgfHwgJyNmZmYnKSArICciPicgKyBlc2Nh +cGVIVE1MKHNjLmNvZGUpICsgJzwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICc8c3BhbiBjbGFz +cz0ic2MtbGVnZW5kZS10ZXh0Ij48c3Ryb25nPicgKyBlc2NhcGVIVE1MKHNjLmNvZGUpICsgJzwv +c3Ryb25nPjxicj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6dmFyKC0tdGV4dC1t +dXRlZCkiPicgKyBlc2NhcGVIVE1MKHNjLmJlemVpY2hudW5nIHx8ICcnKSArICc8L3NwYW4+PC9z +cGFuPicgKwogICAgICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAgfQogICAgICAgIHZhciBo +dG1sID0gJyc7CiAgICAgICAgT2JqZWN0LmtleXMoZ3J1cHBlbikuc29ydCgpLmZvckVhY2goZnVu +Y3Rpb24oaykgewogICAgICAgICAgICB2YXIgZyA9IGdydXBwZW5ba107CiAgICAgICAgICAgIGcu +aXRlbXMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiAoYS5jb2RlIHx8ICcnKS5sb2NhbGVD +b21wYXJlKGIuY29kZSB8fCAnJywgJ2RlJyk7IH0pOwogICAgICAgICAgICBodG1sICs9ICc8ZGl2 +IGNsYXNzPSJzYy1sZWdlbmRlLWdydXBwZSI+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFz +cz0ic2MtbGVnZW5kZS10aXRlbCI+JyArIGVzY2FwZUhUTUwoZy5sYWJlbCkgKyAnIDxzcGFuIHN0 +eWxlPSJmb250LXdlaWdodDo1MDA7b3BhY2l0eTowLjYiPignICsgZy5pdGVtcy5sZW5ndGggKyAn +KTwvc3Bhbj48L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzYy1sZWdlbmRl +LWdyaWQiPicgKyBnLml0ZW1zLm1hcCh0aWxlKS5qb2luKCcnKSArICc8L2Rpdj4nICsKICAgICAg +ICAgICAgJzwvZGl2Pic7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGh0bWw7CiAgICB9Cgog +ICAgZnVuY3Rpb24gaW5mb0ZlbnN0ZXJaZWlnZW4oKSB7CiAgICAgICAgdmFyIGluZm9CbG9jayA9 +ICcnOwogICAgICAgIGlmIChaLmFkbWluLmluZm90ZXh0KSB7CiAgICAgICAgICAgIGluZm9CbG9j +ayArPSAnPGRpdiBjbGFzcz0iaW5mby1rYXJ0ZSBpbmZvLWthcnRlLWluZm8iPjxzdHJvbmc+SW5m +b3RleHQ6PC9zdHJvbmc+PGJyPicgKwogICAgICAgICAgICAgICAgaHRtbEF1c0ZlbGQoWi5hZG1p +bi5pbmZvdGV4dCkgKyAnPC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgaWYgKFouYWRtaW4uc3Vw +cG9ydGluZm8pIHsKICAgICAgICAgICAgaW5mb0Jsb2NrICs9ICc8ZGl2IGNsYXNzPSJpbmZvLWth +cnRlIGluZm8ta2FydGUtc3VwcG9ydCI+PHN0cm9uZz5TdXBwb3J0Ojwvc3Ryb25nPjxicj4nICsK +ICAgICAgICAgICAgICAgIGh0bWxBdXNGZWxkKFouYWRtaW4uc3VwcG9ydGluZm8pICsgJzwvZGl2 +Pic7CiAgICAgICAgfQogICAgICAgIC8vIEFuc3ByZWNocGFydG5lcjogUGVyc29uZW4gbWl0IEZs +YWcgaXN0QW5zcHJlY2hwYXJ0bmVyPXRydWUuIFNlaXQKICAgICAgICAvLyAyMDI2LTA1LTI1IG9o +bmUgRnVua3Rpb25zLSBvZGVyIERpZW5zdGdydXBwZW4tR2F0aW5nICh0aGVvcmV0aXNjaAogICAg +ICAgIC8vIGthbm4gamVkZSBQZXJzb24gYWxzIEFuc3ByZWNocGFydG5lciBiZW5hbm50IHdlcmRl +bikuIERpZSBhbHRlbgogICAgICAgIC8vIEZlbGRlciBGdW5rdGlvbi5pblBsYW51bmcgdW5kIERp +ZW5zdGdydXBwZS5kYXJmQW5zcHJlY2hwYXJ0bmVyCiAgICAgICAgLy8gd2VyZGVuIGhpZXIgbmlj +aHQgbWVociBhdXNnZXdlcnRldC4KICAgICAgICB2YXIgYXBMaXN0ZSA9IChaLnBsYW51bmcucGVy +c29uZW4gfHwgW10pCiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24ocCkgewogICAgICAgICAg +ICAgICAgcmV0dXJuIHAuaXN0QW5zcHJlY2hwYXJ0bmVyICYmICFwLmdlbG9lc2NodEFtOwogICAg +ICAgICAgICB9KQogICAgICAgICAgICAuc29ydChmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgICAg +ICAgICB2YXIgcmEgPSAoKFouYWRtaW4uZnVua3Rpb25lbiB8fCBbXSkuZmluZChmdW5jdGlvbih4 +KSB7IHJldHVybiB4LmNvZGUgPT09IGEuZnVua3Rpb247IH0pIHx8IHt9KS5yYW5nOwogICAgICAg +ICAgICAgICAgdmFyIHJiID0gKChaLmFkbWluLmZ1bmt0aW9uZW4gfHwgW10pLmZpbmQoZnVuY3Rp +b24oeCkgeyByZXR1cm4geC5jb2RlID09PSBiLmZ1bmt0aW9uOyB9KSB8fCB7fSkucmFuZzsKICAg +ICAgICAgICAgICAgIGlmIChyYSA9PSBudWxsKSByYSA9IDk5OwogICAgICAgICAgICAgICAgaWYg +KHJiID09IG51bGwpIHJiID0gOTk7CiAgICAgICAgICAgICAgICBpZiAocmEgIT09IHJiKSByZXR1 +cm4gcmEgLSByYjsKICAgICAgICAgICAgICAgIHJldHVybiAoKGEubmFtZSB8fCAnJykgKyAnICcg +KyAoYS52b3JuYW1lIHx8ICcnKSkubG9jYWxlQ29tcGFyZSgoKGIubmFtZSB8fCAnJykgKyAnICcg +KyAoYi52b3JuYW1lIHx8ICcnKSksICdkZScpOwogICAgICAgICAgICB9KTsKICAgICAgICBpZiAo +YXBMaXN0ZS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIC8vIE1haWwtQnV0dG9uIHBybyBBbnNw +cmVjaHBhcnRuZXI6IG9lZmZuZXQgT3V0bG9vayAobWFpbHRvOikKICAgICAgICAgICAgLy8gbWl0 +IHZvcmJlZnVlbGx0ZW0gQmV0cmVmZiArIEVpbmxlaXR1bmcuIEJvZHkgbnV0enQgZGllCiAgICAg +ICAgICAgIC8vIGR0LiBBbnJlZGUgKyBCZXp1ZyBhdWYgZGllIFNjaGljaHRwbGFudW5nOyBBYnNl +bmRlciB3aXJkIGluCiAgICAgICAgICAgIC8vIGRlciBNYWlsLVNpZ25hdHVyIGxlZXIgZ2VsYXNz +ZW4sIHdlaWwgT3V0bG9vayBkYXMgc2VsYnN0CiAgICAgICAgICAgIC8vIGFuaGFlbmd0LgogICAg +ICAgICAgICB2YXIgYXBwVGl0ZWwgPSBiZXooJ2FwcC50aXRlbCcpOwogICAgICAgICAgICB2YXIg +YXBIdG1sID0gYXBMaXN0ZS5tYXAoZnVuY3Rpb24ocCkgewogICAgICAgICAgICAgICAgdmFyIG5h +bWUgPSAoKHAuZGllbnN0Z3JhZCA/IHAuZGllbnN0Z3JhZCArICcgJyA6ICcnKSArCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAocC52b3JuYW1lID8gcC52b3JuYW1lICsgJyAnIDogJycpICsg +KHAubmFtZSB8fCAnJykpLnRyaW0oKTsKICAgICAgICAgICAgICAgIHZhciB6ZWlsZSA9ICc8c3Ry +b25nPicgKyBlc2NhcGVIVE1MKG5hbWUpICsgJzwvc3Ryb25nPic7CiAgICAgICAgICAgICAgICB2 +YXIgcmVjaHRzID0gW107CiAgICAgICAgICAgICAgICBpZiAocC5mdW5rdGlvbikgcmVjaHRzLnB1 +c2goZXNjYXBlSFRNTChwLmZ1bmt0aW9uKSk7CiAgICAgICAgICAgICAgICBpZiAocC5vZSkgICAg +ICAgcmVjaHRzLnB1c2goZXNjYXBlSFRNTChwLm9lKSk7CiAgICAgICAgICAgICAgICBpZiAocC50 +ZWxlZm9uKSAgcmVjaHRzLnB1c2goJ1RlbC4gPHN0cm9uZz4nICsgZXNjYXBlSFRNTChwLnRlbGVm +b24pICsgJzwvc3Ryb25nPicpOwogICAgICAgICAgICAgICAgaWYgKHJlY2h0cy5sZW5ndGgpIHpl +aWxlICs9ICcg4oCUICcgKyByZWNodHMuam9pbignLCAnKTsKICAgICAgICAgICAgICAgIHZhciBt +YWlsQnRuID0gJyc7CiAgICAgICAgICAgICAgICBpZiAocC5lbWFpbCkgewogICAgICAgICAgICAg +ICAgICAgIHZhciBhbnJlZGUgPSAocC52b3JuYW1lID8gcC52b3JuYW1lICsgJyAnICsgKHAubmFt +ZSB8fCAnJykgOiAocC5uYW1lIHx8ICcnKSkudHJpbSgpOwogICAgICAgICAgICAgICAgICAgIHZh +ciBiZXRyZWZmID0gJ0FuZnJhZ2UgenVyIFNjaGljaHRwbGFudW5nIOKAlCAnICsgYXBwVGl0ZWw7 +CiAgICAgICAgICAgICAgICAgICAgdmFyIGJvZHkgPSAnSGFsbG8gJyArIGFucmVkZSArICcsXG5c +bicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljaCBoYWJlIGVpbmUgRnJhZ2Ug +enVyIFNjaGljaHRwbGFudW5nIHVuZCBtZWxkZSBtaWNoIGJlaSBEaXIsIHdlaWwgRHUgYWxzIEFu +c3ByZWNocGFydG5lciBoaW50ZXJsZWd0IGJpc3QuXG5cbicgKwogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJ1toaWVyIGt1cnogQW5saWVnZW4gYmVzY2hyZWliZW5dXG5cbicgKwogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZpZWxlbiBEYW5rIHVuZCB2aWVsZSBHcsO8w59l +JzsKICAgICAgICAgICAgICAgICAgICB2YXIgaHJlZiA9ICdtYWlsdG86JyArIGVuY29kZVVSSUNv +bXBvbmVudChwLmVtYWlsKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnP3N1Ympl +Y3Q9JyArIGVuY29kZVVSSUNvbXBvbmVudChiZXRyZWZmKSArCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAnJmJvZHk9JyArIGVuY29kZVVSSUNvbXBvbmVudChib2R5KTsKICAgICAgICAg +ICAgICAgICAgICBtYWlsQnRuID0gJyA8YSBjbGFzcz0iaW5mby1hcC1tYWlsYnRuIiBocmVmPSIn +ICsgZXNjYXBlQXR0cihocmVmKSArICciJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICcgdGl0bGU9IkUtTWFpbCBhbiAnICsgZXNjYXBlQXR0cihuYW1lKSArICcgKCcgKyBlc2NhcGVB +dHRyKHAuZW1haWwpICsgJykgw7ZmZm5lbiI+TWFpbDwvYT4nOwogICAgICAgICAgICAgICAgfSBl +bHNlIHsKICAgICAgICAgICAgICAgICAgICBtYWlsQnRuID0gJyA8c3BhbiBjbGFzcz0iaW5mby1h +cC1rZWlubWFpbCIgdGl0bGU9IktlaW5lIEUtTWFpbC1BZHJlc3NlIGhpbnRlcmxlZ3QiPuKAlCBr +ZWluZSBFLU1haWwg4oCUPC9zcGFuPic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg +ICByZXR1cm4gJzxsaSBzdHlsZT0ibWFyZ2luLWJvdHRvbTo0cHgiPicgKyB6ZWlsZSArIG1haWxC +dG4gKyAnPC9saT4nOwogICAgICAgICAgICB9KS5qb2luKCcnKTsKICAgICAgICAgICAgaW5mb0Js +b2NrICs9ICc8ZGl2IGNsYXNzPSJpbmZvLWthcnRlIGluZm8ta2FydGUtc3VwcG9ydCI+JyArCiAg +ICAgICAgICAgICAgICAnPHN0cm9uZz5BbnNwcmVjaHBhcnRuZXI6PC9zdHJvbmc+JyArCiAgICAg +ICAgICAgICAgICAnPHVsIHN0eWxlPSJtYXJnaW46NnB4IDAgMCAxOHB4O3BhZGRpbmc6MDtsaXN0 +LXN0eWxlOmRpc2MiPicgKyBhcEh0bWwgKyAnPC91bD48L2Rpdj4nOwogICAgICAgIH0KCiAgICAg +ICAgLy8gQWxsZ2VtZWluZSBIaWxmZSDigJQgb3B0aW9uYWwgYXVzIGFkbWluLmpzb24uaGlsZmV0 +ZXh0IChSaWNoLVRleHQpCiAgICAgICAgdmFyIGhpbGZlQmxvY2sgPSAnJzsKICAgICAgICBpZiAo +Wi5hZG1pbi5oaWxmZXRleHQgJiYgU3RyaW5nKFouYWRtaW4uaGlsZmV0ZXh0KS50cmltKCkpIHsK +ICAgICAgICAgICAgaGlsZmVCbG9jayA9ICc8aDMgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtaGVh +ZGluZyk7bWFyZ2luLWJvdHRvbTo4cHg7bWFyZ2luLXRvcDoxMnB4Ij5BbGxnZW1laW5lIEhpbGZl +PC9oMz4nICsKICAgICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtsaW5l +LWhlaWdodDoxLjY7bWFyZ2luLWJvdHRvbToxNnB4Ij4nICsKICAgICAgICAgICAgICAgIGh0bWxB +dXNGZWxkKFouYWRtaW4uaGlsZmV0ZXh0KSArICc8L2Rpdj4nOwogICAgICAgIH0KCiAgICAgICAg +Ly8gQmVkaWVudW5nIOKAlCBhdXMgYWRtaW4uanNvbi5iZWRpZW51bmdzdGV4dGUgKFJpY2gtVGV4 +dCBvZGVyIFBsYWluKSwKICAgICAgICAvLyBzb25zdCBEZWZhdWx0LiBXZW5uIEhUTUwgdm9yaGFu +ZGVuIChlbnRoYWVsdCA8dWw+LzxsaT4pLCBkaXJla3QgZWluZnVlZ2VuOwogICAgICAgIC8vIHNv +bnN0IFplaWxlbi16dS1CdWxsZXRzLVVtd2FuZGx1bmcuCiAgICAgICAgdmFyIGJlZGllbnVuZ1F1 +ZWxsZSA9IFouYWRtaW4uYmVkaWVudW5nc3RleHRlOwogICAgICAgIHZhciBiZWRpZW51bmc7CiAg +ICAgICAgaWYgKGJlZGllbnVuZ1F1ZWxsZSAmJiBTdHJpbmcoYmVkaWVudW5nUXVlbGxlKS50cmlt +KCkpIHsKICAgICAgICAgICAgaWYgKC88XC8/KHVsfG9sfGxpKVxiL2kudGVzdChiZWRpZW51bmdR +dWVsbGUpKSB7CiAgICAgICAgICAgICAgICAvLyBTY2hvbiBmZXJ0aWdlcyBIVE1MIG1pdCBMaXN0 +ZW4g4oCUIGRpcmVrdCB1ZWJlcm5laG1lbiAoc2FuaXRpemVkKS4KICAgICAgICAgICAgICAgIC8v +IENTUy1SZWdlbG4gZnVlciAuaW5mby1hYnNjaG5pdHQgdWwvbGkgc3RldWVybiBFaW5ydWVja3Vu +ZyAmIEFic3RhbmQuCiAgICAgICAgICAgICAgICBiZWRpZW51bmcgPSBzYW5pdGl6ZVJpY2hIdG1s +KGJlZGllbnVuZ1F1ZWxsZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBi +ZWRpZW51bmcgPSAnPHVsPicgKyBiZWRpZW51bmdaZWlsZW5SZW5kZXJuKGJlZGllbnVuZ1F1ZWxs +ZSkgKyAnPC91bD4nOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg +YmVkaWVudW5nID0gJzx1bD4nICsgYmVkaWVudW5nWmVpbGVuUmVuZGVybihCRURJRU5VTkdfREVG +QVVMVCkgKyAnPC91bD4nOwogICAgICAgIH0KCiAgICAgICAgLy8gV2Vya3pldWdlLVNla3Rpb24g +KFVYLUF1ZGl0IFNwcmludCAyLjUsIDIwMjYtMDUtMjkpOiBTeW5jLUNoZWNrCiAgICAgICAgLy8g +dW5kIERpYWdub3NlLVNlaXRlIGV4aXN0aWVyZW4gYWxzIC9zeW5jLWNoZWNrLmh0bWwgYnp3Lgog +ICAgICAgIC8vIC9kaWFnbm9zZS5odG1sLCBzaW5kIGFiZXIgdm9uIGtlaW5lciBhbmRlcmVuIFN0 +ZWxsZSBpbiBkZXIgQXBwCiAgICAgICAgLy8gdmVybGlua3QuIEhpZXIgaW4gZGVyIEluZm8tTW9k +YWwgYXVmbmVobWVuLCBkYW1pdCBBZG1pbnMrU1Ugc2llCiAgICAgICAgLy8gb2huZSBVUkwtVGlw +cGVyZWkgb2VmZm5lbiBrb2VubmVuLgogICAgICAgIHZhciB3ZXJremV1Z2VCbG9jayA9ICcnOwog +ICAgICAgIGlmIChkYXJmQWRtaW5UYWIoKSkgewogICAgICAgICAgICB3ZXJremV1Z2VCbG9jayA9 +ICc8ZGl2IGNsYXNzPSJpbmZvLWFic2Nobml0dCI+PGgzPldlcmt6ZXVnZTwvaDM+JyArCiAgICAg +ICAgICAgICAgICAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndy +YXAiPicgKwogICAgICAgICAgICAgICAgICAgICc8YSBjbGFzcz0iYnRuIGJ0bi1zZWsiIGhyZWY9 +Ii9zeW5jLWNoZWNrLmh0bWwiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiB0aXRsZT0i +TW9kdWwtTGFkZS1EaWFnbm9zZTogcHJ1ZWZ0LCBvYiBhbGxlIEpTL0NTUy1EYXRlaWVuIGZlaGxl +cmZyZWkgZ2VsYWRlbiB3ZXJkZW4iPlN5bmMtQ2hlY2sgw7ZmZm5lbjwvYT4nICsKICAgICAgICAg +ICAgICAgICAgICAnPGEgY2xhc3M9ImJ0biBidG4tc2VrIiBocmVmPSIvZGlhZ25vc2UuaHRtbCIg +dGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiIHRpdGxlPSJTeXN0ZW0tRGlhZ25vc2U6IFNl +cnZlci1WZXJzaW9uLCBIZWFydGJlYXQsIFBlcm1pc3Npb25zIj5EaWFnbm9zZSDDtmZmbmVuPC9h +PicgKwogICAgICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAgICAgJzwvZGl2Pic7 +CiAgICAgICAgfQoKICAgICAgICAvLyBUYXN0YXR1cmt1ZXJ6ZWwtU2VrdGlvbiAoVVgtQXVkaXQg +U3ByaW50IDMuNywgMjAyNi0wNS0yOSk6CiAgICAgICAgLy8gUG93ZXItVXNlci1Eb2t1IGltIElu +Zm8tTW9kYWwsIGRhbWl0IGRpZSB2b3JoYW5kZW5lbiBTaG9ydGN1dHMKICAgICAgICAvLyAoRVND +IGZ1ZXIgTW9kYWwsIFRhYiBmdWVyIEZva3VzLVRyYXAsIEVudGVyIHp1bSBTcGVpY2hlcm4sCiAg +ICAgICAgLy8gRG9wcGVsa2xpY2sgaW0gR3JpZCkgZGlzY292ZXJhYmxlIHdlcmRlbi4KICAgICAg +ICB2YXIgdGFzdGF0dXJCbG9jayA9CiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJpbmZvLWFic2No +bml0dCI+PGgzPlRhc3RhdHVya8O8cnplbDwvaDM+JyArCiAgICAgICAgICAgICAgICAnPHRhYmxl +IGNsYXNzPSJpbmZvLXNob3J0Y3V0cyI+JyArCiAgICAgICAgICAgICAgICAgICAgJzx0cj48dGg+ +VGFzdGVua29tYmluYXRpb248L3RoPjx0aD5XaXJrdW5nPC90aD48L3RyPicgKwogICAgICAgICAg +ICAgICAgICAgICc8dHI+PHRkPjxrYmQ+RXNjPC9rYmQ+PC90ZD48dGQ+U2NobGllc3N0IGRhcyBv +YmVyc3RlIE1vZGFsIChMSUZPIGJlaSB2ZXJzY2hhY2h0ZWx0ZW4gRGlhbG9nZW4pPC90ZD48L3Ry +PicgKwogICAgICAgICAgICAgICAgICAgICc8dHI+PHRkPjxrYmQ+VGFiPC9rYmQ+IC8gPGtiZD5T +aGlmdCtUYWI8L2tiZD48L3RkPjx0ZD5Gb2t1cyBpbm5lcmhhbGIgZGVzIE1vZGFscyB3ZWl0ZXIg +LyB6dXJ1ZWNrIChGb2N1cy1UcmFwKTwvdGQ+PC90cj4nICsKICAgICAgICAgICAgICAgICAgICAn +PHRyPjx0ZD48a2JkPkVudGVyPC9rYmQ+PC90ZD48dGQ+SW0gTW9kYWw6IFNwZWljaGVybi4gSW0g +S29tbWVudGFyLUVkaXRvcjogS29tbWVudGFyIGhpbnp1ZnVlZ2VuPC90ZD48L3RyPicgKwogICAg +ICAgICAgICAgICAgICAgICc8dHI+PHRkPjxrYmQ+TGlua3NrbGljazwva2JkPiBhdWYgWmVsbGU8 +L3RkPjx0ZD5aZWxsZSBtYXJraWVyZW4gKGF1c3dhZWhsZW4pPC90ZD48L3RyPicgKwogICAgICAg +ICAgICAgICAgICAgICc8dHI+PHRkPjxrYmQ+UmVjaHRza2xpY2s8L2tiZD4gYXVmIFplbGxlPC90 +ZD48dGQ+U2NoaWNodC1FZGl0b3Igb2VmZm5lbiAoQXVzbMO2c2UtQWt0aW9uIGltIEJhY2tlbmQg +ZWluc3RlbGxiYXI6IExpbmtzLS9SZWNodHMtL01hdXNyYWQtL0RvcHBlbGtsaWNrKTwvdGQ+PC90 +cj4nICsKICAgICAgICAgICAgICAgICAgICAnPHRyPjx0ZD48a2JkPktsaWNrPC9rYmQ+IGF1ZiBU +YWctSGVhZGVyPC90ZD48dGQ+VGFnLURldGFpbC1Nb2RhbCAoYWxsZSBQZXJzb25lbiBhbSBUYWcp +PC90ZD48L3RyPicgKwogICAgICAgICAgICAgICAgICAgICc8dHI+PHRkPjxrYmQ+SG92ZXI8L2ti +ZD4gYXVmIEtvbW1lbnRhci1NYXJrZXI8L3RkPjx0ZD5Lb21tZW50YXItUG9wb3ZlciAoMjUwIG1z +IFZlcnpvZWdlcnVuZyk8L3RkPjwvdHI+JyArCiAgICAgICAgICAgICAgICAgICAgJzx0cj48dGQ+ +PGtiZD5EcmFnPC9rYmQ+IGF1ZiBGaWxsLUhhbmRsZTwvdGQ+PHRkPldlcnQgbmFjaCBsaW5rcy9y +ZWNodHMgaW4gZGVyc2VsYmVuIFplaWxlIGtvcGllcmVuIChFeGNlbC1hZWhubGljaDsga2VpbiBB +dXNmdWVsbGVuIG5hY2ggb2Jlbi91bnRlbik8L3RkPjwvdHI+JyArCiAgICAgICAgICAgICAgICAn +PC90YWJsZT4nICsKICAgICAgICAgICAgJzwvZGl2Pic7CgogICAgICAgIHZhciBrb2VycGVyID0g +JzxkaXYgc3R5bGU9ImxpbmUtaGVpZ2h0OjEuNyI+JyArCiAgICAgICAgICAgIChpbmZvQmxvY2sg +PyBpbmZvQmxvY2sgOiAnJykgKwogICAgICAgICAgICAoaGlsZmVCbG9jayA/ICc8ZGl2IGNsYXNz +PSJpbmZvLWFic2Nobml0dCI+JyArIGhpbGZlQmxvY2sgKyAnPC9kaXY+JyA6ICcnKSArCiAgICAg +ICAgICAgIChiZWRpZW51bmcKICAgICAgICAgICAgICAgID8gJzxkaXYgY2xhc3M9ImluZm8tYWJz +Y2huaXR0Ij48aDM+QmVkaWVudW5nPC9oMz4nICsgYmVkaWVudW5nICsgJzwvZGl2PicKICAgICAg +ICAgICAgICAgIDogJycpICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImluZm8tYWJzY2huaXR0 +Ij48aDM+U2NoaWNodGNvZGUtTGVnZW5kZTwvaDM+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBj +bGFzcz0ic2MtbGVnZW5kZS1jb250YWluZXIiPicgKyBzY2hpY2h0Y29kZUxlZ2VuZGVIdG1sKCkg +KyAnPC9kaXY+JyArCiAgICAgICAgICAgICc8L2Rpdj4nICsKICAgICAgICAgICAgdGFzdGF0dXJC +bG9jayArCiAgICAgICAgICAgIHdlcmt6ZXVnZUJsb2NrICsKICAgICAgICAgICAgJzxkaXYgY2xh +c3M9ImluZm8tZnVzcyI+JyArCiAgICAgICAgICAgICAgICBlc2NhcGVIVE1MKGJleignYXBwLnRp +dGVsJykpICsgJyAnICsgKFouYWRtaW4uamFociB8fCAnJykgKyAnIOKAlCBCZW51dHplcjogJyAr +IGVzY2FwZUhUTUwoWi5iZW51dHplcikgKwogICAgICAgICAgICAnPC9kaXY+PC9kaXY+JzsKCiAg +ICAgICAgbW9kYWxaZWlnZW4oJ0luZm9ybWF0aW9uICYgSGlsZmUnLCBrb2VycGVyLAogICAgICAg +ICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlayIgaWQ9ImluZm8t +aW1wcmVzc3VtLWJ0biI+SW1wcmVzc3VtPC9idXR0b24+JyArCiAgICAgICAgICAgICc8YnV0dG9u +IHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciIgaWQ9ImluZm8tc2NobGllc3Nl +bi1idG4iPlNjaGxpZcOfZW48L2J1dHRvbj4nLAogICAgICAgICAgICBudWxsLCBudWxsLCB7IHJl +aW5lckRpYWxvZzogdHJ1ZSB9KTsKICAgICAgICB2YXIgYnRuSW1wcmVzc3VtID0gZG9jdW1lbnQu +Z2V0RWxlbWVudEJ5SWQoJ2luZm8taW1wcmVzc3VtLWJ0bicpOwogICAgICAgIGlmIChidG5JbXBy +ZXNzdW0pIGJ0bkltcHJlc3N1bS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGltcHJlc3N1bU1v +ZGFsT2VmZm5lbik7CiAgICAgICAgdmFyIGJ0blNjaGxpZXNzZW4gPSBkb2N1bWVudC5nZXRFbGVt +ZW50QnlJZCgnaW5mby1zY2hsaWVzc2VuLWJ0bicpOwogICAgICAgIGlmIChidG5TY2hsaWVzc2Vu +KSBidG5TY2hsaWVzc2VuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7IG1v +ZGFsU2NobGllc3Nlbih0cnVlKTsgfSk7CiAgICB9CgogICAgLy8gQmF1dCBkZW4gdm9yYXVzZ2Vm +dWVsbHRlbiBTdXBwb3J0LU1haWwtQm9keS4gUGxhaW4tVGV4dCwga2xhcgogICAgLy8gc3RydWt0 +dXJpZXJ0IGluIEFic2Nobml0dGVuIOKAlCBVc2VyIHNvbGwgZGllIEx1ZWVrZW4gYXVzZnVlbGxl +biwKICAgIC8vIHN0YXR0IHZvbiBOdWxsIGFuIHp1IHNjaHJlaWJlbi4gQXV0by1TZWt0aW9uIGFt +IEVuZGUgaXN0IG1pdAogICAgLy8gTGl2ZS1EYXRlbiB2b3JiZWZ1ZWxsdCAoTlctS2VubnVuZywg +YWt0dWVsbGUgQW5zaWNodCwgQnJvd3NlciwKICAgIC8vIEF1ZmxvZXN1bmcsIEJ1aWxkLUphaHIp +LCBkYW1pdCBQaGlsaXBwIG5pY2h0IG1laHJmYWNoIG5hY2hmcmFnZW4KICAgIC8vIG11c3MuCiAg +ICBmdW5jdGlvbiBfbWFpbFBsYXR6aGFsdGVyRXJzZXR6ZW4odGVtcGxhdGUpIHsKICAgICAgICB2 +YXIgamV0enQgPSBuZXcgRGF0ZSgpOwogICAgICAgIHZhciBwYWQgPSBmdW5jdGlvbihuKSB7IHJl +dHVybiAobiA8IDEwID8gJzAnIDogJycpICsgbjsgfTsKICAgICAgICB2YXIgYWt0aXYgPSAnJzsK +ICAgICAgICB0cnkgeyBha3RpdiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3ZpMy5ha3RpdmVB +bnNpY2h0JykgfHwgJ3BsYW51bmcnOyB9IGNhdGNoIChlKSB7IGFrdGl2ID0gJ3BsYW51bmcnOyB9 +CiAgICAgICAgdmFyIGN0eCA9IHsKICAgICAgICAgICAgJ3tud19rZW5udW5nfSc6ICAgICAgIFou +YmVudXR6ZXIgfHwgJz8nLAogICAgICAgICAgICAne2FrdHVlbGxlX2Fuc2ljaHR9JzogYWt0aXYs +CiAgICAgICAgICAgICd7ZGF0dW19JzogICAgICAgICAgICBwYWQoamV0enQuZ2V0RGF0ZSgpKSAr +ICcuJyArIHBhZChqZXR6dC5nZXRNb250aCgpICsgMSkgKyAnLicgKyBqZXR6dC5nZXRGdWxsWWVh +cigpLAogICAgICAgICAgICAne3VocnplaXR9JzogICAgICAgICAgcGFkKGpldHp0LmdldEhvdXJz +KCkpICsgJzonICsgcGFkKGpldHp0LmdldE1pbnV0ZXMoKSksCiAgICAgICAgICAgICd7YXVmbG9l +c3VuZ30nOiAgICAgICAod2luZG93LmlubmVyV2lkdGggfHwgJz8nKSArICd4JyArICh3aW5kb3cu +aW5uZXJIZWlnaHQgfHwgJz8nKSwKICAgICAgICAgICAgJ3thcHBfamFocn0nOiAgICAgICAgIFN0 +cmluZygoWi5hZG1pbiAmJiBaLmFkbWluLmphaHIpID8gWi5hZG1pbi5qYWhyIDogbmV3IERhdGUo +KS5nZXRGdWxsWWVhcigpKSwKICAgICAgICAgICAgJ3ticm93c2VyfSc6ICAgICAgICAgIChuYXZp +Z2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCkgPyBuYXZpZ2F0b3IudXNlckFnZW50LnN1YnN0 +cmluZygwLCAxMjApIDogJz8nCiAgICAgICAgfTsKICAgICAgICB2YXIgb3V0ID0gdGVtcGxhdGU7 +CiAgICAgICAgT2JqZWN0LmtleXMoY3R4KS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsgb3V0ID0gb3V0 +LnNwbGl0KGspLmpvaW4oY3R4W2tdKTsgfSk7CiAgICAgICAgcmV0dXJuIG91dDsKICAgIH0KICAg +IGZ1bmN0aW9uIHN1cHBvcnRNYWlsQm9keUJhdWVuKCkgewogICAgICAgIHZhciB0ZW1wbGF0ZSA9 +IChaLmFkbWluICYmIFouYWRtaW4uc3VwcG9ydE1haWxUZXh0ICYmIFN0cmluZyhaLmFkbWluLnN1 +cHBvcnRNYWlsVGV4dCkudHJpbSgpKQogICAgICAgICAgICA/IFouYWRtaW4uc3VwcG9ydE1haWxU +ZXh0CiAgICAgICAgICAgIDogU1VQUE9SVF9NQUlMX0RFRkFVTFQ7CiAgICAgICAgcmV0dXJuIF9t +YWlsUGxhdHpoYWx0ZXJFcnNldHplbih0ZW1wbGF0ZSk7CiAgICB9CiAgICBmdW5jdGlvbiBidWdS +ZXBvcnRNYWlsQm9keUJhdWVuKCkgewogICAgICAgIHZhciB0ZW1wbGF0ZSA9IChaLmFkbWluICYm +IFouYWRtaW4uYnVnUmVwb3J0TWFpbFRleHQgJiYgU3RyaW5nKFouYWRtaW4uYnVnUmVwb3J0TWFp +bFRleHQpLnRyaW0oKSkKICAgICAgICAgICAgPyBaLmFkbWluLmJ1Z1JlcG9ydE1haWxUZXh0CiAg +ICAgICAgICAgIDogQlVHUkVQT1JUX01BSUxfREVGQVVMVDsKICAgICAgICByZXR1cm4gX21haWxQ +bGF0emhhbHRlckVyc2V0emVuKHRlbXBsYXRlKTsKICAgIH0KCiAgICAvLyBCdWctUmVwb3J0LU1v +ZGFsIGhpbnRlciBkZW0gSGVhZGVyLUJ1dHRvbiDigJ5CdWdSZXBvcnQiLiBTcGllZ2VsdCBkaWUK +ICAgIC8vIFN1cHBvcnQtQW5mcmFnZSAoSW1wcmVzc3VtLU1vZGFsKSwgYWJlciB6dWdlc3BpdHp0 +IGF1ZiBCVUdTL1Byb2JsZW1lOgogICAgLy8gZWluIHZvcnN0cnVrdHVyaWVydGVzIG1haWx0bzog +YW4gUEhLIFJvZXNnZW4uCiAgICBmdW5jdGlvbiBidWdSZXBvcnRNb2RhbE9lZmZuZW4oKSB7CiAg +ICAgICAgdmFyIG1haWx0byA9ICdtYWlsdG86cGhpbGlwcC5yb2VzZ2VuQHBvbGl6ZWkubnJ3LmRl +JwogICAgICAgICAgICArICc/c3ViamVjdD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KCdWSTMgREdM +IFBsYW51bmcgLSBCVUcgLyBQcm9ibGVtIChEb3J0bXVuZCknKQogICAgICAgICAgICArICcmYm9k +eT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ1Z1JlcG9ydE1haWxCb2R5QmF1ZW4oKSk7CiAgICAg +ICAgdmFyIGtvZXJwZXIgPQogICAgICAgICAgICAnPGRpdiBjbGFzcz0iYnVncmVwb3J0LWJveCI+ +JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iYnVncmVwb3J0LWJveC10aXRlbCI+QnVn +IG9kZXIgUHJvYmxlbSBtZWxkZW48L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8cCBjbGFzcz0i +YnVncmVwb3J0LWJveC10ZXh0Ij5FdHdhcyBmdW5rdGlvbmllcnQgbmljaHQgd2llIGVyd2FydGV0 +PyBNaXQgZGVtIEJ1dHRvbiB1bnRlbiDDtmZmbmV0IHNpY2ggZWluZSA8c3Ryb25nPnZvcnN0cnVr +dHVyaWVydGUgRS1NYWlsPC9zdHJvbmc+IGFuIFBISyBSb2VzZ2VuIChOVzA1MzYwOSkuIEJpdHRl +IGFsbGUgQWJzY2huaXR0ZSBhdXNmw7xsbGVuIOKAlCBiZXNvbmRlcnMgZGllIDxzdHJvbmc+U2No +cml0dGUgenVtIFJlcHJvZHV6aWVyZW48L3N0cm9uZz4gdW5kIG1pbmRlc3RlbnMgPHN0cm9uZz5l +aW5lbiBTY3JlZW5zaG90PC9zdHJvbmc+IGRlciBGZWhsZXJzdGVsbGUuIERpZSB0ZWNobmlzY2hl +biBJbmZvcyBhbSBFbmRlIGJpdHRlIHVudmVyw6RuZGVydCBsYXNzZW4sIHNpZSBoZWxmZW4gYmVp +IGRlciBFaW5ncmVuenVuZy48L3A+JyArCiAgICAgICAgICAgICAgICAnPGEgY2xhc3M9ImJ0biBi +dWdyZXBvcnQtbWFpbC1idG4iIGhyZWY9IicgKyBlc2NhcGVBdHRyKG1haWx0bykgKyAnIj4nICsK +ICAgICAgICAgICAgICAgICAgICAnQnVnIHBlciBFLU1haWwgbWVsZGVuIChPdXRsb29rIMO2ZmZu +ZW4pJyArCiAgICAgICAgICAgICAgICAnPC9hPicgKwogICAgICAgICAgICAnPC9kaXY+JzsKICAg +ICAgICB2YXIgZnVzcyA9ICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vr +IiBpZD0iYnVncmVwb3J0LXNjaGxpZXNzZW4tYnRuIj5TY2hsaWXDn2VuPC9idXR0b24+JzsKICAg +ICAgICBtb2RhbFplaWdlbignQnVnIC8gUHJvYmxlbSBtZWxkZW4nLCBrb2VycGVyLCBmdXNzLCBu +dWxsLCBudWxsLCB7IHJlaW5lckRpYWxvZzogdHJ1ZSB9KTsKICAgICAgICB2YXIgc2IgPSBkb2N1 +bWVudC5nZXRFbGVtZW50QnlJZCgnYnVncmVwb3J0LXNjaGxpZXNzZW4tYnRuJyk7CiAgICAgICAg +aWYgKHNiKSBzYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgeyBtb2RhbFNj +aGxpZXNzZW4odHJ1ZSk7IH0pOwogICAgfQoKICAgIC8vIEltcHJlc3N1bXMtTW9kYWwgbWl0IE5v +dGZhbGwtQm94ICsgdm9yYXVzZ2VmdWVsbHRlbSBtYWlsdG86LUJ1dHRvbi4KICAgIC8vIEluaGFs +dDogYWRtaW4uanNvbi5pbXByZXNzdW0gKGZhbGxzIGxlZXIsIElNUFJFU1NVTV9ERUZBVUxUIGF1 +cyBhZG1pbi5qcykuCiAgICBmdW5jdGlvbiBpbXByZXNzdW1Nb2RhbE9lZmZuZW4oKSB7CiAgICAg +ICAgdmFyIGluaGFsdCA9IChaLmFkbWluICYmIFouYWRtaW4uaW1wcmVzc3VtICYmIFN0cmluZyha +LmFkbWluLmltcHJlc3N1bSkudHJpbSgpKQogICAgICAgICAgICA/IHNhbml0aXplUmljaEh0bWwo +Wi5hZG1pbi5pbXByZXNzdW0pCiAgICAgICAgICAgIDogc2FuaXRpemVSaWNoSHRtbChJTVBSRVNT +VU1fREVGQVVMVCk7CiAgICAgICAgdmFyIG1haWx0byA9ICdtYWlsdG86cGhpbGlwcC5yb2VzZ2Vu +QHBvbGl6ZWkubnJ3LmRlJwogICAgICAgICAgICArICc/c3ViamVjdD0nICsgZW5jb2RlVVJJQ29t +cG9uZW50KCdWSTMgREdMIFBsYW51bmcgLSBEb3J0bXVuZCcpCiAgICAgICAgICAgICsgJyZib2R5 +PScgKyBlbmNvZGVVUklDb21wb25lbnQoc3VwcG9ydE1haWxCb2R5QmF1ZW4oKSk7CgogICAgICAg +IHZhciBub3RmYWxsQm94ID0KICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImltcHJlc3N1bS1ub3Rm +YWxsIj4nICsKICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJpbXByZXNzdW0tbm90ZmFsbC10 +aXRlbCI+Tm90ZmFsbC1Sw7xja2ZhbGxlYmVuZTwvZGl2PicgKwogICAgICAgICAgICAgICAgJzxw +IGNsYXNzPSJpbXByZXNzdW0tbm90ZmFsbC10ZXh0Ij5EaWUgTlctS2VubnVuZyA8Y29kZT5OVzA1 +MzYwOTwvY29kZT4gKDxzdHJvbmc+UEhLIFJvZXNnZW48L3N0cm9uZz4pIGlzdCBpbSBTZXJ2ZXIg +aGFydCBhbHMgU3VwZXJVc2VyIGhpbnRlcmxlZ3QgdW5kIGdpbHQgYXVjaCBkYW5uLCB3ZW5uIGRp +ZSBTdXBlclVzZXItTGlzdGUgbGVlciBvZGVyIHVubGVzYmFyIGlzdC4gQmVpIFByb2JsZW1lbiBt +aXQgUmVjaHRlbiwgQnVncyBvZGVyIEZyYWdlbiB6dXIgQW53ZW5kdW5nIHN0ZWh0IFBISyBSb2Vz +Z2VuIGFscyBBbnNwcmVjaHBhcnRuZXIgdW5kIFLDvGNrZmFsbGViZW5lIGJlcmVpdC48L3A+JyAr +CiAgICAgICAgICAgICAgICAnPGEgY2xhc3M9ImJ0biBidG4tcHJpbWFlciBpbXByZXNzdW0tbWFp +bC1idG4iIGhyZWY9IicgKyBlc2NhcGVBdHRyKG1haWx0bykgKyAnIj4nICsKICAgICAgICAgICAg +ICAgICAgICAnU3VwcG9ydC1BbmZyYWdlIHBlciBFLU1haWwgKE91dGxvb2sgw7ZmZm5lbiknICsK +ICAgICAgICAgICAgICAgICc8L2E+JyArCiAgICAgICAgICAgICc8L2Rpdj4nOwoKICAgICAgICB2 +YXIga29lcnBlciA9ICc8ZGl2IGNsYXNzPSJpbXByZXNzdW0taW5oYWx0IiBzdHlsZT0ibGluZS1o +ZWlnaHQ6MS42Ij4nICsgaW5oYWx0ICsgJzwvZGl2PicgKyBub3RmYWxsQm94OwogICAgICAgIHZh +ciBmdXNzID0gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVyIiBp +ZD0iaW1wcmVzc3VtLXNjaGxpZXNzZW4tYnRuIj5TY2hsaWXDn2VuPC9idXR0b24+JzsKICAgICAg +ICBtb2RhbFplaWdlbignSW1wcmVzc3VtJywga29lcnBlciwgZnVzcywgbnVsbCwgbnVsbCwgeyBy +ZWluZXJEaWFsb2c6IHRydWUgfSk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lt +cHJlc3N1bS1zY2hsaWVzc2VuLWJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rp +b24oKSB7CiAgICAgICAgICAgIG1vZGFsU2NobGllc3Nlbih0cnVlKTsKICAgICAgICB9KTsKICAg +IH0KCiAgICAvLyA9PT09PSBMb2didWNoID09PT09IC0+IGpzL2xvZ2J1Y2guanMKICAgIC8vID09 +PT09IEV4Y2VsLUltcG9ydGVyID09PT09IC0+IGpzL2ltcG9ydC9leGNlbC1pbXBvcnQuanMKICAg +IC8vID09PT09IEV2ZW50LUxpc3RlbmVyID09PT09CiAgICAvLyBUb3AtTGV2ZWwtV3JhcHBlci4g +RGllIGRyZWkgU3ViLUZ1bmt0aW9uZW4gc2luZCBpbSBCb290c3RyYXAtU2NvcGUKICAgIC8vIGRl +ZmluaWVydCB1bmQgZ3JlaWZlbiB2aWEgQ2xvc3VyZSBhdWYgYWxsZXMgaW4gZGVyIElJRkUgenUu +CgogICAgZnVuY3Rpb24gZXZlbnRMaXN0ZW5lckVpbnJpY2h0ZW4oKSB7CiAgICAgICAgZ3JpZExp +c3RlbmVyRWlucmljaHRlbigpOwogICAgICAgIGFkbWluTGlzdGVuZXJFaW5yaWNodGVuKCk7CiAg +ICAgICAgcmVzdExpc3RlbmVyRWlucmljaHRlbigpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdyaWRM +aXN0ZW5lckVpbnJpY2h0ZW4oKSB7CiAgICAgICAgLy8gRGlydHktVHJhY2tpbmc6IGFsbGUgYmVh +cmJlaXRiYXJlbiBBZG1pbi1TZWt0aW9uZW4gYW5tZWxkZW4gKwogICAgICAgIC8vIERlbGVnYXRl +ZC1MaXN0ZW5lciwgZGVyIElucHV0cy9DaGFuZ2VzIGFuIGRlbiBwYXNzZW5kZW4gRGlydHktS2V5 +CiAgICAgICAgLy8gcm91dGV0LiBTaWVoZSBkaXJ0eVJlZ2lzdHJpZXJlL2RpcnR5UHJ1ZWZlbiBv +YmVuLgogICAgICAgIGRpcnR5VHJhY2tlckVpbnJpY2h0ZW4oKTsKCiAgICAgICAgLy8gTmF2aWdh +dGlvbgogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uYXYtYnRuJykuZm9yRWFj +aChmdW5jdGlvbihidG4pIHsKICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNr +JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBWb3IgSGVhZGVyLVRhYi1XZWNoc2Vs +OiBDaGVjay1Nb2RhbCBiZWkgdW5nZXNwZWljaGVydGVuIEFlbmRlcnVuZ2VuCiAgICAgICAgICAg +ICAgICBkaXJ0eVBydWVmZW4oZnVuY3Rpb24oKSB7IGFuc2ljaHRXZWNoc2VsbihidG4uZ2V0QXR0 +cmlidXRlKCdkYXRhLWFuc2ljaHQnKSk7IH0pOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsK +ICAgICAgICBiZXNldHp1bmdza29udHJvbGxlRXZlbnRzQXVmaGFlbmdlbigpOwoKICAgICAgICAv +LyBBZG1pbi1UYWJzIChTaWRlYmFyKQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwo +Jy5hZG1pbi1uYXYtYnRuJykuZm9yRWFjaChmdW5jdGlvbihidG4pIHsKICAgICAgICAgICAgYnRu +LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBk +aXJ0eVBydWVmZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVl +cnlTZWxlY3RvckFsbCgnLmFkbWluLW5hdi1idG4nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpIHsgYi5j +bGFzc0xpc3QucmVtb3ZlKCdha3RpdicpOyB9KTsKICAgICAgICAgICAgICAgICAgICBidG4uY2xh +c3NMaXN0LmFkZCgnYWt0aXYnKTsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNl +bGVjdG9yQWxsKCcuYWRtaW4tdGFiJykuZm9yRWFjaChmdW5jdGlvbih0KSB7IHQuY2xhc3NMaXN0 +LmFkZCgndmVyc3RlY2t0Jyk7IH0pOwogICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYnRu +LmdldEF0dHJpYnV0ZSgnZGF0YS1hZG1pbi10YWInKTsKICAgICAgICAgICAgICAgICAgICB2YXIg +dGFiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkbWluLXRhYi0nICsgbmFtZSk7CiAgICAg +ICAgICAgICAgICAgICAgaWYgKHRhYikgdGFiLmNsYXNzTGlzdC5yZW1vdmUoJ3ZlcnN0ZWNrdCcp +OwogICAgICAgICAgICAgICAgICAgIC8vIEhpbndlaXNlLVByb3Rva29sbCBsYXp5IGxhZGVuLCBz +b2JhbGQgZGVyIFN1Yi1UYWIgYWt0aXYgd2lyZC4KICAgICAgICAgICAgICAgICAgICBpZiAobmFt +ZSA9PT0gJ2hpbndlaXNlLXByb3Rva29sbCcpIGhpbndlaXNlUHJvdG9rb2xsUmVuZGVybigpOwog +ICAgICAgICAgICAgICAgICAgIC8vIEVyc2NoZWludW5nc2JpbGQ6IGRlZmVuc2l2ZXIgcmUtcmVu +ZGVyIGJlaW0gS2xpY2sgYXVmIGRlbgogICAgICAgICAgICAgICAgICAgIC8vIFN1Yi1UYWIsIGRh +bWl0IGRlciBFZGl0b3IgYXVjaCBkYW5uIGVyc2NoZWludCwgd2VubgogICAgICAgICAgICAgICAg +ICAgIC8vIGFkbWluUmVuZGVybigpIHZvciBkZW0gZXJzdGVuIFRhYi1Td2l0Y2ggbm9jaCBuaWNo +dCBsaWVmLgogICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZXJzY2hlaW51bmdzYmls +ZCcpIGVyc2NoZWludW5nc2JpbGRSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICAgICAgLy8gU3Rh +dGlzdGlrLUxheW91dDogcmUtcmVuZGVybiBiZWltIFRhYi1XZWNoc2VsLCBkYW1pdCBmcmlzY2gK +ICAgICAgICAgICAgICAgICAgICAvLyBnZWJhdXRlIEJhdWthc3Rlbi1LYWNoZWxuIHNvZm9ydCBp +bSBSYXN0ZXIgZXJzY2hlaW5lbi4KICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3N0 +YXRpc3Rpay1sYXlvdXQnKSBzdGF0aXN0aWtMYXlvdXRSZW5kZXJuKCk7CiAgICAgICAgICAgICAg +ICAgICAgLy8gU3RhdGlzdGlrLUJ1aWxkZXI6IGxhenkgcmVuZGVybiAoRW5naW5lIGJhdXQgRmFr +dGVudGFiZWxsZSkuCiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdzdGF0aXN0aWst +YnVpbGRlcicpIHN0YXRpc3Rpa0J1aWxkZXJSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICAgICAg +Ly8gRXhjZWwtRXhwb3J0OiBsYXp5IHJlbmRlcm4sIHdlbm4gZGVyIFRhYiBha3RpdiB3aXJkLgog +ICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZXhwb3J0JykgZXhwb3J0UmVuZGVybigp +OwogICAgICAgICAgICAgICAgICAgIC8vIFN0YW5kYXJkcmVjaHRlIChVc2VyKTogbGF6eSByZW5k +ZXJuLgogICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnc3RhbmRhcmRyZWNodGUnKSBz +dGFuZGFyZHJlY2h0ZVJlbmRlcm4oKTsKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUtQmVy +ZWljaCAoU3VwZXJVc2VyKTogU3RhdHVzIGxhZGVuLCBzb2JhbGQgYWt0aXYuCiAgICAgICAgICAg +ICAgICAgICAgaWYgKG5hbWUgPT09ICd1cGRhdGUnKSB1cGRhdGVCZXJlaWNoUmVuZGVybigpOwog +ICAgICAgICAgICAgICAgICAgIC8vIERyYWZ0LVJlc3RvcmUtQmFubmVyIGFuYmlldGVuLCBmYWxs +cyBmdWVyIGRpZXNlbiBUYWIgZWluCiAgICAgICAgICAgICAgICAgICAgLy8gQXV0by1TYXZlLURy +YWZ0IGltIGxvY2FsU3RvcmFnZSBsaWVndCAoUGhhc2UgOSkuCiAgICAgICAgICAgICAgICAgICAg +aWYgKHR5cGVvZiBhZG1pbkRyYWZ0QmFubmVyQW5iaWV0ZW4gPT09ICdmdW5jdGlvbicpIGFkbWlu +RHJhZnRCYW5uZXJBbmJpZXRlbihuYW1lKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg +ICB9KTsKICAgICAgICB9KTsKICAgICAgICBhZG1pblN1YnRhYkZpbHRlckFud2VuZGVuKCk7Cgog +ICAgICAgIC8vIEFkbWluLVN1Yi1OYXZpZ2F0aW9uIChpbm5lcmhhbGIgZWluZXMgVG9wLVRhYnMp +LgogICAgICAgIC8vIEtsaWNrIGF1ZiBlaW5lbiAuYWRtaW4tc3VibmF2LWJ0biBzY2hhbHRldCBp +bSB1bXNjaGxpZXNzZW5kZW4gLmFkbWluLXRhYgogICAgICAgIC8vIHp3aXNjaGVuIFN1Yi1TZWt0 +aW9uZW4gdW0sIGRpZSBwZXIgZGF0YS1zdWJ0YWI9Ii4uLiIgbWFya2llcnQgc2luZC4KICAgICAg +ICAvLyBCc3A6ICJGZWllcnRhZ2UgJiBGZXJpZW4iIC0+IFN1Yi1UYWJzICJGZWllcnRhZ2UiIC8g +IlNjaHVsZmVyaWVuIi4KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWRtaW4t +c3VibmF2JykuZm9yRWFjaChmdW5jdGlvbihuYXYpIHsKICAgICAgICAgICAgbmF2LmFkZEV2ZW50 +TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXYpIHsKICAgICAgICAgICAgICAgIHZhciBidG4g +PSBldi50YXJnZXQuY2xvc2VzdCgnLmFkbWluLXN1Ym5hdi1idG4nKTsKICAgICAgICAgICAgICAg +IGlmICghYnRuIHx8ICFuYXYuY29udGFpbnMoYnRuKSkgcmV0dXJuOwogICAgICAgICAgICAgICAg +dmFyIHppZWwgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXN1YnRhYicpOwogICAgICAgICAgICAg +ICAgaWYgKCF6aWVsKSByZXR1cm47CiAgICAgICAgICAgICAgICB2YXIgdGFiID0gbmF2LmNsb3Nl +c3QoJy5hZG1pbi10YWInKSB8fCBuYXYucGFyZW50RWxlbWVudDsKICAgICAgICAgICAgICAgIGlm +ICghdGFiKSByZXR1cm47CiAgICAgICAgICAgICAgICBuYXYucXVlcnlTZWxlY3RvckFsbCgnLmFk +bWluLXN1Ym5hdi1idG4nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpIHsKICAgICAgICAgICAgICAgICAg +ICBiLmNsYXNzTGlzdC50b2dnbGUoJ2FrdGl2JywgYiA9PT0gYnRuKTsKICAgICAgICAgICAgICAg +IH0pOwogICAgICAgICAgICAgICAgdGFiLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXN1YnRhYi1z +ZWt0aW9uXScpLmZvckVhY2goZnVuY3Rpb24oc2VrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFy +IGlzdCA9IHNlay5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3VidGFiLXNla3Rpb24nKSA9PT0gemllbDsK +ICAgICAgICAgICAgICAgICAgICBzZWsuY2xhc3NMaXN0LnRvZ2dsZSgndmVyc3RlY2t0JywgIWlz +dCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAg +ICAgIC8vIEhpbndlaXNlLVByb3Rva29sbDogRmlsdGVyICsgQWt0dWFsaXNpZXJlbi1CdXR0b24K +ICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRF +bGVtZW50QnlJZCgnaHAtYWt0dWFsaXNpZXJlbicpOwogICAgICAgICAgICBpZiAoYnRuKSBidG4u +YWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoaW53ZWlzZVByb3Rva29sbFJlbmRlcm4pOwogICAg +ICAgICAgICBbJ2hwLWZpbHRlci10eXAnLCAnaHAtZmlsdGVyLXZvbicsICdocC1maWx0ZXItYmlz +J10uZm9yRWFjaChmdW5jdGlvbihpZCkgewogICAgICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1l +bnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgICAgICAgICAgICAgaWYgKGVsKSBlbC5hZGRFdmVu +dExpc3RlbmVyKCdjaGFuZ2UnLCBoaW53ZWlzZVByb3Rva29sbFJlbmRlcm4pOwogICAgICAgICAg +ICB9KTsKICAgICAgICB9KSgpOwoKICAgICAgICAvLyBHcmlkLUludGVyYWt0aW9uOgogICAgICAg +IC8vICAgSG92ZXIgdWViZXIgZWluZSBaZWxsZSAgLT4gRHJhZy1GdWVsbC1HcmlmZiBlcnNjaGVp +bnQgdW50ZW4gcmVjaHRzCiAgICAgICAgLy8gICBFaW5mYWNoLUtsaWNrICAgICAgICAgICAtPiBT +Y2hpY2h0LUVkaXRvciBvZWZmbmV0IHNpY2ggZGlyZWt0CiAgICAgICAgLy8gQmVpbSBWZXJsYXNz +ZW4gZGVzIEdyaWRzIHZlcnNjaHdpbmRldCBkYXMgSGFuZGxlIHdpZWRlciwgYXVzc2VyCiAgICAg +ICAgLy8gd2VubiBkaWUgTWF1cyBhdWYgZGFzIEhhbmRsZSB3YW5kZXJ0IG9kZXIgZ2VyYWRlIGVp +biBEcmFnIGxhZXVmdC4KICAgICAgICB2YXIgZ3JpZERhdGVuID0gZG9jdW1lbnQuZ2V0RWxlbWVu +dEJ5SWQoJ2dyaWQtZGF0ZW4nKTsKICAgICAgICB2YXIgaG92ZXJaZWxsZSA9IG51bGw7CiAgICAg +ICAgZ3JpZERhdGVuLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGUpIHsK +ICAgICAgICAgICAgaWYgKGZ1ZWxsSXN0QWt0aXYoKSkgcmV0dXJuOyAvLyBsYXVmZW5kZXIgRHJh +ZyAtIEhhbmRsZSBuaWNodCB1bXNldHplbgogICAgICAgICAgICB2YXIgemVsbGUgPSBlLnRhcmdl +dC5jbG9zZXN0KCcuZ3JpZC16ZWxsZScpOwogICAgICAgICAgICBpZiAoIXplbGxlIHx8IHplbGxl +ID09PSBob3ZlclplbGxlKSByZXR1cm47CiAgICAgICAgICAgIGhvdmVyWmVsbGUgPSB6ZWxsZTsK +ICAgICAgICAgICAgZnVlbGxIYW5kbGVBblplbGxlKHplbGxlKTsKICAgICAgICAgICAgLy8gS29t +bWVudGFyLVBvcG92ZXI6IG51ciBhdWYgWmVsbGVuIG1pdCBNYXJrZXIuIFZlcnpvZWdlcnRlcgog +ICAgICAgICAgICAvLyBUcmlnZ2VyIChpbiBkZXIgRnVua3Rpb24gc2VsYnN0KSB2ZXJoaW5kZXJ0 +IEZsYWNrZXJuIGJlaW0KICAgICAgICAgICAgLy8gc2NobmVsbGVuIFVlYmVyd2lzY2hlbiDigJQg +ZGllIFBvcG92ZXItRnVua3Rpb24gaXN0IG5vLW9wIGZ1ZXIKICAgICAgICAgICAgLy8gWmVsbGVu +IG9obmUgaGF0LWtvbW1lbnRhci4KICAgICAgICAgICAgaWYgKHplbGxlLmNsYXNzTGlzdC5jb250 +YWlucygnaGF0LWtvbW1lbnRhcicpKSB7CiAgICAgICAgICAgICAgICBrb21tZW50YXJQb3BvdmVy +WmVpZ2VuKHplbGxlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGtvbW1l +bnRhclBvcG92ZXJWZXJzdGVja2VuKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAg +ICBncmlkRGF0ZW4uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIGZ1bmN0aW9uKGUpIHsK +ICAgICAgICAgICAgaWYgKGZ1ZWxsSXN0QWt0aXYoKSkgcmV0dXJuOwogICAgICAgICAgICB2YXIg +cnQgPSBlLnJlbGF0ZWRUYXJnZXQ7CiAgICAgICAgICAgIGlmIChydCAmJiBydC5pZCA9PT0gJ2Zp +bGwtaGFuZGxlJykgcmV0dXJuOwogICAgICAgICAgICAvLyBXZW5uIGRlciBQb2ludGVyIGF1ZiBk +YXMgS29tbWVudGFyLVBvcG92ZXIgd2FuZGVydCwgTklDSFQKICAgICAgICAgICAgLy8gc2NobGll +c3NlbiDigJQgZGVyIFBvcG92ZXItSGFuZGxlciBoYWVsdCBlcyBvZmZlbi4KICAgICAgICAgICAg +aWYgKHJ0ICYmIHJ0LmNsb3Nlc3QgJiYgcnQuY2xvc2VzdCgnI3ZpMy1rb21tZW50YXItcG9wb3Zl +cicpKSByZXR1cm47CiAgICAgICAgICAgIGhvdmVyWmVsbGUgPSBudWxsOwogICAgICAgICAgICBm +dWVsbEhhbmRsZVZlcnN0ZWNrZW4oKTsKICAgICAgICAgICAga29tbWVudGFyUG9wb3ZlclZlcnN0 +ZWNrZW4oKTsKICAgICAgICB9KTsKICAgICAgICAvLyBJbnRlcmFrdGlvbiAoVW1iYXUgMjAyNi0w +Ni0xNSwgVXNlci1XdW5zY2gpOiBMaW5rc2tsaWNrIE1BUktJRVJUIGRpZQogICAgICAgIC8vIFpl +bGxlIG51ciAoa2VpbiBMb2NrLCBrZWluIEVkaXRvcikg4oCUIHNvIGVyemV1Z3QgYmVpbGFldWZp +Z2VzIEtsaWNrZW4KICAgICAgICAvLyBrZWluZSBHZWlzdGVyLVNwZXJyZW4gbWVoci4gV0VMQ0hF +IEFrdGlvbiBkZW4gU2NoaWNodC1FZGl0b3Igb2VmZm5ldCwKICAgICAgICAvLyBpc3QgaW0gQWRt +aW4tQmFja2VuZCBlaW5zdGVsbGJhciAoYWRtaW4uZWRpdG9yVHJpZ2dlcik6ICdyZWNodHMnCiAg +ICAgICAgLy8gKERlZmF1bHQpLCAnbGlua3MnLCAnbWl0dGUnIChNYXVzcmFkLUtsaWNrKSBvZGVy +ICdkb3BwZWwnLgogICAgICAgIGZ1bmN0aW9uIHplbGxlTWFya2llcmVuKHplbGxlKSB7CiAgICAg +ICAgICAgIHZhciBhbHQgPSBncmlkRGF0ZW4ucXVlcnlTZWxlY3RvcignLmdyaWQtemVsbGUtbWFy +a2llcnQnKTsKICAgICAgICAgICAgaWYgKGFsdCAmJiBhbHQgIT09IHplbGxlKSBhbHQuY2xhc3NM +aXN0LnJlbW92ZSgnZ3JpZC16ZWxsZS1tYXJraWVydCcpOwogICAgICAgICAgICBpZiAoemVsbGUp +IHplbGxlLmNsYXNzTGlzdC5hZGQoJ2dyaWQtemVsbGUtbWFya2llcnQnKTsKICAgICAgICB9CiAg +ICAgICAgZnVuY3Rpb24gZWRpdG9yVHJpZ2dlcigpIHsKICAgICAgICAgICAgdmFyIHQgPSAoWi5h +ZG1pbiAmJiBaLmFkbWluLmVkaXRvclRyaWdnZXIpIHx8ICdyZWNodHMnOwogICAgICAgICAgICBy +ZXR1cm4gKHQgPT09ICdsaW5rcycgfHwgdCA9PT0gJ21pdHRlJyB8fCB0ID09PSAnZG9wcGVsJykg +PyB0IDogJ3JlY2h0cyc7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGVkaXRvckFuWmVsbGVP +ZWZmbmVuKHplbGxlKSB7IHplbGxlTWFya2llcmVuKHplbGxlKTsgZWRpdG9yT2VmZm5lbih6ZWxs +ZSk7IH0KICAgICAgICAvLyBFaW5tYWxpZ2VyIERpc2NvdmVyeS1IaW50OiBlcmtsYWVydCBkaWUg +YWt0dWVsbCBrb25maWd1cmllcnRlIEJlbGVndW5nCiAgICAgICAgLy8gYmVpbSBlcnN0ZW4gTGlu +a3NrbGljaywgZGFuYWNoIG5pZSB3aWVkZXIgKGxvY2FsU3RvcmFnZS1GbGFnOyBSZXNldAogICAg +ICAgIC8vIGJlaSBUcmlnZ2VyLVdlY2hzZWwgdWViZXIgZGFzIFN1ZmZpeCBpbSBLZXkpLgogICAg +ICAgIHZhciBUUklHR0VSX0xBQkVMID0geyByZWNodHM6ICdSZWNodHNrbGljaycsIGxpbmtzOiAn +TGlua3NrbGljaycsIG1pdHRlOiAnTWF1c3JhZC1LbGljayAoTWl0dGUpJywgZG9wcGVsOiAnRG9w +cGVsa2xpY2snIH07CiAgICAgICAgZnVuY3Rpb24gZWRpdG9yVHJpZ2dlckhpbnRFaW5tYWxpZygp +IHsKICAgICAgICAgICAgdmFyIHQgPSBlZGl0b3JUcmlnZ2VyKCk7CiAgICAgICAgICAgIGlmICh0 +ID09PSAnbGlua3MnKSByZXR1cm47IC8vIExpbmtza2xpY2sgb2VmZm5ldCBqYSBkaXJla3Qg4oCU +IGtlaW4gSGlud2VpcyBub2V0aWcKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHZh +ciBrZXkgPSAndmkzLmVkaXRvclRyaWdnZXJIaW50LicgKyB0OwogICAgICAgICAgICAgICAgaWYg +KGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgPT09ICcxJykgcmV0dXJuOwogICAgICAgICAgICAg +ICAgdG9hc3QoJ0xpbmtza2xpY2sgbWFya2llcnQgZGllIFplbGxlLiBEZW4gU2NoaWNodC1FZGl0 +b3Igw7ZmZm5lc3QgZHUgbWl0ICcgKyAoVFJJR0dFUl9MQUJFTFt0XSB8fCAnUmVjaHRza2xpY2sn +KSArICcgYXVmIGRpZSBaZWxsZS4nLCAnaW5mbycsIHsgZGF1ZXI6IDkwMDAgfSk7CiAgICAgICAg +ICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksICcxJyk7CiAgICAgICAgICAgIH0gY2F0 +Y2ggKF8pIHsgLyogbG9jYWxTdG9yYWdlIGdnZi4gYmxvY2tpZXJ0ICovIH0KICAgICAgICB9CiAg +ICAgICAgLy8gTGlua3NrbGljazogbWFya2llcnQgaW1tZXIuIElzdCBMaW5rc2tsaWNrIGRlciBr +b25maWd1cmllcnRlIFRyaWdnZXIsCiAgICAgICAgLy8gb2VmZm5ldCBlciB6dXNhZXR6bGljaCBk +ZW4gRWRpdG9yLgogICAgICAgIGdyaWREYXRlbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1 +bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIHplbGxlID0gZS50YXJnZXQuY2xvc2VzdCgnLmdy +aWQtemVsbGUnKTsKICAgICAgICAgICAgaWYgKCF6ZWxsZSkgcmV0dXJuOwogICAgICAgICAgICBp +ZiAoZWRpdG9yVHJpZ2dlcigpID09PSAnbGlua3MnKSB7IGVkaXRvckFuWmVsbGVPZWZmbmVuKHpl +bGxlKTsgcmV0dXJuOyB9CiAgICAgICAgICAgIHplbGxlTWFya2llcmVuKHplbGxlKTsKICAgICAg +ICAgICAgaWYgKGRhcmZaZWxsZUVkaXRpZXJlbih6ZWxsZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGVy +c29uJykpKSBlZGl0b3JUcmlnZ2VySGludEVpbm1hbGlnKCk7CiAgICAgICAgfSk7CiAgICAgICAg +Ly8gUmVjaHRza2xpY2s6IG9lZmZuZXQgZGVuIEVkaXRvciB3ZW5uIGtvbmZpZ3VyaWVydCAobmF0 +aXZlcyBLb250ZXh0bWVudQogICAgICAgIC8vIGRhbm4gdW50ZXJkcnVlY2tlbik7IHNvbnN0IGJs +ZWlidCBkYXMgbmF0aXZlIEJyb3dzZXItTWVudSBlcmhhbHRlbi4KICAgICAgICBncmlkRGF0ZW4u +YWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAg +IHZhciB6ZWxsZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5ncmlkLXplbGxlJyk7CiAgICAgICAgICAg +IGlmICghemVsbGUgfHwgZWRpdG9yVHJpZ2dlcigpICE9PSAncmVjaHRzJykgcmV0dXJuOwogICAg +ICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGVkaXRvckFuWmVsbGVPZWZm +bmVuKHplbGxlKTsKICAgICAgICB9KTsKICAgICAgICAvLyBNYXVzcmFkLS9NaXR0ZWxrbGljay4g +bW91c2Vkb3duIHZlcmhpbmRlcnQgZGVuIEF1dG9zY3JvbGwtQ3Vyc29yLAogICAgICAgIC8vIGF1 +eGNsaWNrIChidXR0b24gMSA9IE1pdHRlKSBvZWZmbmV0IGRhbm4gZGVuIEVkaXRvci4KICAgICAg +ICBncmlkRGF0ZW4uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24oZSkgewog +ICAgICAgICAgICBpZiAoZS5idXR0b24gPT09IDEgJiYgZWRpdG9yVHJpZ2dlcigpID09PSAnbWl0 +dGUnICYmIGUudGFyZ2V0LmNsb3Nlc3QoJy5ncmlkLXplbGxlJykpIGUucHJldmVudERlZmF1bHQo +KTsKICAgICAgICB9KTsKICAgICAgICBncmlkRGF0ZW4uYWRkRXZlbnRMaXN0ZW5lcignYXV4Y2xp +Y2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmIChlLmJ1dHRvbiAhPT0gMSB8fCBlZGl0 +b3JUcmlnZ2VyKCkgIT09ICdtaXR0ZScpIHJldHVybjsKICAgICAgICAgICAgdmFyIHplbGxlID0g +ZS50YXJnZXQuY2xvc2VzdCgnLmdyaWQtemVsbGUnKTsKICAgICAgICAgICAgaWYgKCF6ZWxsZSkg +cmV0dXJuOwogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGVkaXRv +ckFuWmVsbGVPZWZmbmVuKHplbGxlKTsKICAgICAgICB9KTsKICAgICAgICAvLyBEb3BwZWxrbGlj +ay4KICAgICAgICBncmlkRGF0ZW4uYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCBmdW5jdGlv +bihlKSB7CiAgICAgICAgICAgIGlmIChlZGl0b3JUcmlnZ2VyKCkgIT09ICdkb3BwZWwnKSByZXR1 +cm47CiAgICAgICAgICAgIHZhciB6ZWxsZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5ncmlkLXplbGxl +Jyk7CiAgICAgICAgICAgIGlmICh6ZWxsZSkgZWRpdG9yQW5aZWxsZU9lZmZuZW4oemVsbGUpOwog +ICAgICAgIH0pOwoKICAgICAgICAvLyBLb21iaW5pZXJ0ZSBBbmxhc3MtWmVpbGUgKE1haSAyMDI2 +KTogRmVpZXJ0YWcgKyBTb25kZXJ0ZXJtaW4gKwogICAgICAgIC8vIEdlYnVydHN0YWcgaW4gZWlu +ZXIgWmVpbGUuIENsaWNrLVJvdXRpbmcgbmFjaCBnZXRyb2ZmZW5lbSBFbGVtZW50OgogICAgICAg +IC8vIC0gU29uZGVydGVybWluLUljb24gLT4gYmVzdGVoZW5kZXMgU29uZGVyLU1vZGFsL0VkaXQg +KGplIG5hY2ggUm9sbGUpCiAgICAgICAgLy8gLSBGZWllcnRhZy1aZWxsZSAgICAtPiBGZWllcnRh +Zy1EZXRhaWwtTW9kYWwgKEJlc2NocmVpYnVuZyArIExpbmspCiAgICAgICAgLy8gLSBsZWVyZSBa +ZWxsZSArIFNVICAtPiBuZXVlciBTb25kZXJ0ZXJtaW4KICAgICAgICBkb2N1bWVudC5nZXRFbGVt +ZW50QnlJZCgnZGF0dW0temVpbGUtYW5sYXNzJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBm +dW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBzb25kZXJJY29uID0gZS50YXJnZXQuY2xvc2Vz +dCgnLmtkLWV2ZW50LXNvbmRlcicpOwogICAgICAgICAgICBpZiAoc29uZGVySWNvbikgewogICAg +ICAgICAgICAgICAgdmFyIHNvbmRlckRhdHVtID0gc29uZGVySWNvbi5nZXRBdHRyaWJ1dGUoJ2Rh +dGEtc29uZGVyLWRhdHVtJyk7CiAgICAgICAgICAgICAgICB2YXIgc29uZGVyID0gc29uZGVyRGF0 +dW0gPyBzb25kZXJGdWVyRGF0dW0oc29uZGVyRGF0dW0pIDogbnVsbDsKICAgICAgICAgICAgICAg +IGlmIChaLnJlY2h0ZS5pc3RTdXBlclVzZXIpIHsKICAgICAgICAgICAgICAgICAgICBzb25kZXJF +ZGl0TW9kYWxaZWlnZW4oc29uZGVyID8gc29uZGVyLmRhdHVtIDogbnVsbCk7CiAgICAgICAgICAg +ICAgICB9IGVsc2UgaWYgKHNvbmRlcikgewogICAgICAgICAgICAgICAgICAgIHNvbmRlckFuc2lj +aHRNb2RhbFplaWdlbihzb25kZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg +cmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBmdFplbGxlID0gZS50YXJnZXQu +Y2xvc2VzdCgnLmtkLWFubGFzcy1mZWllcnRhZycpOwogICAgICAgICAgICBpZiAoZnRaZWxsZSkg +ewogICAgICAgICAgICAgICAgdmFyIGRhdHVtID0gZnRaZWxsZS5nZXRBdHRyaWJ1dGUoJ2RhdGEt +ZGF0dW0nKTsKICAgICAgICAgICAgICAgIHZhciBpbmZvID0gKFoudGFnSW5mb3MgfHwge30pW2Rh +dHVtXSB8fCB7fTsKICAgICAgICAgICAgICAgIGlmIChpbmZvLnR5cCA9PT0gJ2ZlaWVydGFnJykg +ewogICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaW5mby5uYW1lIHx8ICdGZWllcnRhZyc7 +CiAgICAgICAgICAgICAgICAgICAgdmFyIGt1cnogPSBpbmZvLmt1cnpiZXNjaHJlaWJ1bmcgfHwg +Jyc7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGluZm8uaW5mb1VybCB8fCAnJzsKICAg +ICAgICAgICAgICAgICAgICB2YXIga29lcnBlciA9ICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTRw +eDtsaW5lLWhlaWdodDoxLjU1Ij4nICsKICAgICAgICAgICAgICAgICAgICAgICAgKGt1cnogPyBl +c2NhcGVIVE1MKGt1cnopIDogJzxlbSBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1tdXRlZCkiPktl +aW5lIEJlc2NocmVpYnVuZyBoaW50ZXJsZWd0LjwvZW0+JykgKwogICAgICAgICAgICAgICAgICAg +ICAgICAnPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICB2YXIgZnVzcyA9ICcnOwogICAgICAg +ICAgICAgICAgICAgIGlmICh1cmwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZnVzcyArPSAn +PGEgY2xhc3M9ImJ0biBidG4tc2VrIGJ0bi1rbGVpbiIgaHJlZj0iJyArIGVzY2FwZUF0dHIodXJs +KSArICciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPk1laHIgYmVp +IFdpa2lwZWRpYSDihpc8L2E+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg +ICAgICAgZnVzcyArPSAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVyIGJ0bi1rbGVpbiIg +aWQ9ImZ0LW1vZGFsLXNjaGxpZXNzZW4iPlNjaGxpZcOfZW48L2J1dHRvbj4nOwogICAgICAgICAg +ICAgICAgICAgIG1vZGFsWmVpZ2VuKG5hbWUsIGtvZXJwZXIsIGZ1c3MpOwogICAgICAgICAgICAg +ICAgICAgIHZhciBzY2hsaWVzc2VuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Z0LW1vZGFs +LXNjaGxpZXNzZW4nKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc2NobGllc3Nlbikgc2NobGll +c3Nlbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgeyBtb2RhbFNjaGxpZXNz +ZW4oKTsgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQog +ICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEtsaWNrIGF1ZiBsZWVyZSBaZWxsZSAoa2VpbiBG +ZWllcnRhZy9Tb25kZXJ0ZXJtaW4pOiBTdXBlclVzZXIKICAgICAgICAgICAgLy8ga2FubiBlaW5l +biBuZXVlbiBTb25kZXJ0ZXJtaW4gZnVlciBkaWVzZW4gVGFnIGFubGVnZW4uCiAgICAgICAgICAg +IGlmIChaLnJlY2h0ZS5pc3RTdXBlclVzZXIpIHsKICAgICAgICAgICAgICAgIHZhciBsZWVyWmVs +bGUgPSBlLnRhcmdldC5jbG9zZXN0KCcua2QtemVsbGVbZGF0YS1kYXR1bV0nKTsKICAgICAgICAg +ICAgICAgIGlmIChsZWVyWmVsbGUpIHNvbmRlckVkaXRNb2RhbFplaWdlbihsZWVyWmVsbGUuZ2V0 +QXR0cmlidXRlKCdkYXRhLWRhdHVtJykpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAg +ICAgIC8vIEVkaXRvcgogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3ItYXVz +d2FobCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgeyBlZGl0b3JBdXN3 +YWhsKHRoaXMudmFsdWUpOyB9KTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdj +bGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKCFlZGl0b3JBa3RpdigpKSByZXR1 +cm47CiAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6ZWxsLWVk +aXRvcicpOwogICAgICAgICAgICAvLyBKRURFUiBLbGljayBhdXNzZXJoYWxiIGRlcyBFZGl0b3Jz +IHNjaGxpZXNzdCBpaG4gKHVuZCBnaWJ0IGRlbgogICAgICAgICAgICAvLyBMb2NrIGZyZWkpIOKA +lCBhdWNoIGF1ZiBlaW5lIGFuZGVyZSBaZWxsZSBvZGVyIGlyZ2VuZHdvIHNvbnN0IGltCiAgICAg +ICAgICAgIC8vIEJyb3dzZXIuIChGcnVlaGVyIGJsaWViIGRlciBFZGl0b3IgYmVpIEtsaWNrIGF1 +ZiBlaW5lIEdyaWQtWmVsbGUKICAgICAgICAgICAgLy8gb2ZmZW4sIHdlaWwgZG9ydCBkZXIgRWRp +dG9yIGRpcmVrdCBuZXUgZ2VvZWZmbmV0IHd1cmRlOyBzZWl0IGRlcgogICAgICAgICAgICAvLyBM +aW5rc2tsaWNrIG51ciBub2NoIG1hcmtpZXJ0LCBzb2xsIGVyIGhpZXIgc2NobGllc3Nlbi4pCiAg +ICAgICAgICAgIGlmICghZWwuY29udGFpbnMoZS50YXJnZXQpKSBlZGl0b3JTY2hsaWVzc2VuKCk7 +CiAgICAgICAgfSk7CiAgICAgICAgLy8gUmVjaHRza2xpY2sgYXVzc2VyaGFsYiBkZXIgUGxhbnRh +ZmVsIHNjaGxpZXNzdCBlaW5lbiBvZmZlbmVuIEVkaXRvcgogICAgICAgIC8vIGViZW5mYWxscyAo +c29uc3QgYmxpZWJlIGVyIGJlaW0gS29udGV4dG1lbnUgd29hbmRlcnMgc3RlaGVuKS4KICAgICAg +ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHsK ICAgICAgICAgICAgaWYgKCFlZGl0b3JBa3RpdigpKSByZXR1cm47CiAgICAgICAgICAgIHZhciBl -bCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6ZWxsLWVkaXRvcicpOwogICAgICAgICAgICAv -LyBKRURFUiBLbGljayBhdXNzZXJoYWxiIGRlcyBFZGl0b3JzIHNjaGxpZXNzdCBpaG4gKHVuZCBn -aWJ0IGRlbgogICAgICAgICAgICAvLyBMb2NrIGZyZWkpIOKAlCBhdWNoIGF1ZiBlaW5lIGFuZGVy -ZSBaZWxsZSBvZGVyIGlyZ2VuZHdvIHNvbnN0IGltCiAgICAgICAgICAgIC8vIEJyb3dzZXIuIChG -cnVlaGVyIGJsaWViIGRlciBFZGl0b3IgYmVpIEtsaWNrIGF1ZiBlaW5lIEdyaWQtWmVsbGUKICAg -ICAgICAgICAgLy8gb2ZmZW4sIHdlaWwgZG9ydCBkZXIgRWRpdG9yIGRpcmVrdCBuZXUgZ2VvZWZm -bmV0IHd1cmRlOyBzZWl0IGRlcgogICAgICAgICAgICAvLyBMaW5rc2tsaWNrIG51ciBub2NoIG1h -cmtpZXJ0LCBzb2xsIGVyIGhpZXIgc2NobGllc3Nlbi4pCiAgICAgICAgICAgIGlmICghZWwuY29u -dGFpbnMoZS50YXJnZXQpKSBlZGl0b3JTY2hsaWVzc2VuKCk7CiAgICAgICAgfSk7CiAgICAgICAg -Ly8gUmVjaHRza2xpY2sgYXVzc2VyaGFsYiBkZXIgUGxhbnRhZmVsIHNjaGxpZXNzdCBlaW5lbiBv -ZmZlbmVuIEVkaXRvcgogICAgICAgIC8vIGViZW5mYWxscyAoc29uc3QgYmxpZWJlIGVyIGJlaW0g -S29udGV4dG1lbnUgd29hbmRlcnMgc3RlaGVuKS4KICAgICAgICBkb2N1bWVudC5hZGRFdmVudExp -c3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKCFlZGl0 -b3JBa3RpdigpKSByZXR1cm47CiAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1l -bnRCeUlkKCd6ZWxsLWVkaXRvcicpOwogICAgICAgICAgICB2YXIgaW1HcmlkID0gZS50YXJnZXQu -Y2xvc2VzdCAmJiBlLnRhcmdldC5jbG9zZXN0KCcjZ3JpZC1kYXRlbiAuZ3JpZC16ZWxsZScpOwog -ICAgICAgICAgICBpZiAoIWVsLmNvbnRhaW5zKGUudGFyZ2V0KSAmJiAhaW1HcmlkKSBlZGl0b3JT -Y2hsaWVzc2VuKCk7CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5l -cigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgLy8gRVNDIHNjaGxpZXNzdCBk -ZW4gWmVsbC1FZGl0b3IuIE1vZGFsLUVTQyBpc3Qgc2VpdCBTcHJpbnQgNmEKICAgICAgICAgICAg -Ly8gKGExMXksIDIwMjYtMDUtMjkpIGltIE1vZGFsLUNvbnRhaW5lciBzZWxic3QgYW5nZXNpZWRl -bHQKICAgICAgICAgICAgLy8gKGZva3VzVHJhcEFrdGl2aWVyZW4gaW4gdWlfZGlhbG9nLmpzKSDi -gJQgZGVyIHNjaGxpZXNzdCBkYW5uCiAgICAgICAgICAgIC8vIG51ciBkYXMgb2JlcnN0ZSBPdmVy -bGF5IGltIFN0YWNrIChMSUZPKS4gSGllciBrZWluCiAgICAgICAgICAgIC8vIG1vZGFsU2NobGll -c3Nlbi1BdWZydWYgbWVociwgc29uc3Qgd3VlcmRlbiBiZWlkZSBIYW5kbGVyCiAgICAgICAgICAg -IC8vIGRvcHBlbHQgZmV1ZXJuIChDb25maXJtIHp1ICsgSGF1cHRtb2RhbCB6dSkuCiAgICAgICAg -ICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGVkaXRvclNjaGxpZXNzZW4oKTsKICAgICAgICB9 -KTsKCiAgICAgICAgLy8gSGV1dGUtQmxvY2sgbGlua3Mgb2JlbiAoZXJzZXR6dCBkaWUgYWx0ZSBU -b29sYmFyKQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4taGV1dGUnKS5hZGRF -dmVudExpc3RlbmVyKCdjbGljaycsIHp1bUhldXRpZ2VuRGF0dW0pOwogICAgICAgIGRvY3VtZW50 -LmdldEVsZW1lbnRCeUlkKCdidG4tc2NoaWNodHRlYW0nKS5hZGRFdmVudExpc3RlbmVyKCdjbGlj -aycsIHNjaGljaHRUZWFtTW9kYWxPZWZmbmVuKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50 -QnlJZCgnYnRuLXRoZW1lJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGVtZVVtc2NoYWx0 -ZW4pOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4taW5mbycpLmFkZEV2ZW50 -TGlzdGVuZXIoJ2NsaWNrJywgaW5mb0ZlbnN0ZXJaZWlnZW4pOwogICAgICAgIHZhciBidG5CdWcg -PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWJ1Z3JlcG9ydCcpOwogICAgICAgIGlmIChi -dG5CdWcpIGJ0bkJ1Zy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJ1Z1JlcG9ydE1vZGFsT2Vm -Zm5lbik7CgogICAgICAgIC8vIEhpbndlaXMtU3lzdGVtOiBLbGljayBhdWYgQmFkZ2UgT0RFUiBV -c2VyLU5hbWVuIG9lZmZuZXQgZGllCiAgICAgICAgLy8gSGlud2Vpcy1Nb2RhbC1MaXN0ZS4gTnVy -IGZ1ZXIgU1UvR2VzYW10dmVyYW50d29ydGxpY2hlIGFrdGl2LAogICAgICAgIC8vIGRhbWl0IG5v -cm1hbGUgVXNlciBkdXJjaCB2ZXJzZWhlbnRsaWNoZXMgS2xpY2tlbiBuaWNodHMgZXJsZWJlbi4K -ICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZ1bmN0aW9uIG9lZmZuZW4oKSB7CiAg -ICAgICAgICAgICAgICBpZiAoaGlud2Vpc2VTaWNodGJhcigpKSBoaW53ZWlzZU1vZGFsT2VmZm5l -bigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBiRWwgPSBkb2N1bWVudC5nZXRFbGVt -ZW50QnlJZCgnaGlud2Vpcy1iYWRnZScpOwogICAgICAgICAgICBpZiAoYkVsKSB7CiAgICAgICAg -ICAgICAgICBiRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvZWZmbmVuKTsKICAgICAgICAg -ICAgICAgIGJFbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAg -ICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7 -IGUucHJldmVudERlZmF1bHQoKTsgb2VmZm5lbigpOyB9CiAgICAgICAgICAgICAgICB9KTsKICAg -ICAgICAgICAgfQogICAgICAgICAgICB2YXIgdUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo -J2JlbnV0emVyLWFuemVpZ2UnKTsKICAgICAgICAgICAgaWYgKHVFbCkgdUVsLmFkZEV2ZW50TGlz -dGVuZXIoJ2NsaWNrJywgb2VmZm5lbik7CiAgICAgICAgICAgIC8vIFRvcGJhci1BdmF0YXI6IEts -aWNrIG9lZmZuZXQgIk1laW4gUHJvZmlsIi1Nb2RhbCBtaXQgQmlsZC1VcGxvYWQKICAgICAgICAg -ICAgdmFyIGF2QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21laW4tYXZhdGFyLWJ0bicp -OwogICAgICAgICAgICBpZiAoYXZCdG4pIHsKICAgICAgICAgICAgICAgIGF2QnRuLmFkZEV2ZW50 -TGlzdGVuZXIoJ2NsaWNrJywgbWVpblByb2ZpbE1vZGFsT2VmZm5lbik7CiAgICAgICAgICAgICAg -ICBhdkJ0bi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAgICAg -ICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7IGUu -cHJldmVudERlZmF1bHQoKTsgbWVpblByb2ZpbE1vZGFsT2VmZm5lbigpOyB9CiAgICAgICAgICAg -ICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pKCk7CgogICAgICAgIC8vIFBlcnMuIFBs -YW46IFBlcnNvbiB3ZWNoc2VsbgogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcC1w -ZXJzb24tYXVzd2FobCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHBwUmVuZGVybik7CiAg -ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BwLWRydWNrZW4nKS5hZGRFdmVudExpc3Rl -bmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAvLyBEcnVjay1Nb2R1cyBhbmFs -b2cgenVtIFdvY2hlbnBsYW46IGJvZHktQ2xhc3Mgc2V0enQgZGFzIEBtZWRpYS1wcmludC1MYXlv -dXQKICAgICAgICAgICAgLy8gKEhlYWRlci9Ub29sYmFyL1RhYnMgYXVzLCBhbGxlIDEyIE1vbmF0 -ZSBhdWYgZWluZXIgQTQtUXVlcnNlaXRlKS4KICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFz -c0xpc3QuYWRkKCdkcnVja2VuLXBlcnNwbGFuJyk7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVu -Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cucHJpbnQoKTsKICAgICAgICAgICAgICAg -IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgn -ZHJ1Y2tlbi1wZXJzcGxhbicpOyB9LCA1MDApOwogICAgICAgICAgICB9LCA1MCk7CiAgICAgICAg -fSk7CgogICAgICAgIC8vIEtvbW1lbnRhci1FZGl0b3IgKFN0dWZlIDIpOiBWZXJsYXVmc2xpc3Rl -IG9iZW4gKyBFaW5nYWJlZmVsZCB1bnRlbi4KICAgICAgICAvLyAiSGluenVmdWVnZW4iIGhhZW5n -dCBlaW5lbiBuZXVlbiBLb21tZW50YXIgYW4gZGllIExpc3RlIGFuIHN0YXR0CiAgICAgICAgLy8g -ZGVuIHZvcmhhbmRlbmVuIHp1IHVlYmVyc2NocmVpYmVuLiBMb2VzY2gtSWNvbnMgaW5uZXJoYWxi -IGRlcgogICAgICAgIC8vIFZlcmxhdWZzbGlzdGUgc2luZCBudXIgZnVlciBTVS9HZXNhbXR2ZXJh -bnR3b3J0bGljaGUgc2ljaHRiYXIKICAgICAgICAvLyAoc2llaGUgZWRpdG9yS29tbWVudGFyVmVy -bGF1ZlJlbmRlcm4oKSAvIGRhcmZLb21tZW50YXJMb2VzY2hlbigpKS4KICAgICAgICB2YXIgaW5w -dXRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3Ita29tbWVudGFyLWlucHV0Jyk7 -CiAgICAgICAgdmFyIGJ0bkhpbnp1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1rb21t -ZW50YXItaGluenUnKTsKICAgICAgICBmdW5jdGlvbiBrb21tZW50YXJIaW56dVZvbUVkaXRvcigp -IHsKICAgICAgICAgICAgaWYgKCFlZGl0b3JBa3RpdigpKSByZXR1cm47CiAgICAgICAgICAgIHZh -ciB0ZXh0ID0gaW5wdXRFbC52YWx1ZS50cmltKCk7CiAgICAgICAgICAgIGlmICghdGV4dCkgcmV0 -dXJuOwogICAgICAgICAgICBrb21tZW50YXJIaW56dWZ1ZWdlbihlZGl0b3JEYXR1bSgpLCBlZGl0 -b3JQZXJzb25JZCgpLCB0ZXh0LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGVkaXRvcktv -bW1lbnRhclZlcmxhdWZSZW5kZXJuKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpbnB1 -dEVsLnZhbHVlID0gJyc7CiAgICAgICAgICAgIC8vIE9wdGltaXN0aXNjaGUgc29mb3J0aWdlIFJl -LVJlbmRlciAoU2VydmVyLUFudHdvcnQga29tbXQgYXN5bmNocm9uKS4KICAgICAgICAgICAgZWRp -dG9yS29tbWVudGFyVmVybGF1ZlJlbmRlcm4oKTsKICAgICAgICB9CiAgICAgICAgYnRuSGluenUu -YWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBrb21tZW50YXJIaW56dVZvbUVkaXRvcik7CiAgICAg -ICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAg -ICAgICAgICAvLyBFbnRlciBpbSBFaW5nYWJlZmVsZCAtPiBkaXJla3QgYW5oYWVuZ2VuIChrZWlu -IEZvcm0tU3VibWl0LCBkYWhlcgogICAgICAgICAgICAvLyBleHBsaXppdCB2ZXJkcmFodGV0KS4K -ICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7IGUucHJldmVudERlZmF1bHQoKTsg -a29tbWVudGFySGluenVWb21FZGl0b3IoKTsgfQogICAgICAgIH0pOwogICAgICAgIC8vIExvZXNj -aC1JY29uLURlbGVnYXRpb24gYXVmIGRlbiBWZXJsYXVmLUNvbnRhaW5lciDigJQgRWludHJhZWdl -IHdlcmRlbgogICAgICAgIC8vIGJlaSBqZWRlbSBSZXJlbmRlciBuZXUgZXJ6ZXVndCwgZWluemVs -bmUgTGlzdGVuZXIgd3VlcmRlbiB2ZXJnZXNzZW4uCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu -dEJ5SWQoJ2VkaXRvci1rb21tZW50YXItdmVybGF1ZicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNr +bCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6ZWxsLWVkaXRvcicpOwogICAgICAgICAgICB2 +YXIgaW1HcmlkID0gZS50YXJnZXQuY2xvc2VzdCAmJiBlLnRhcmdldC5jbG9zZXN0KCcjZ3JpZC1k +YXRlbiAuZ3JpZC16ZWxsZScpOwogICAgICAgICAgICBpZiAoIWVsLmNvbnRhaW5zKGUudGFyZ2V0 +KSAmJiAhaW1HcmlkKSBlZGl0b3JTY2hsaWVzc2VuKCk7CiAgICAgICAgfSk7CiAgICAgICAgZG9j +dW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAg +ICAgLy8gRVNDIHNjaGxpZXNzdCBkZW4gWmVsbC1FZGl0b3IuIE1vZGFsLUVTQyBpc3Qgc2VpdCBT +cHJpbnQgNmEKICAgICAgICAgICAgLy8gKGExMXksIDIwMjYtMDUtMjkpIGltIE1vZGFsLUNvbnRh +aW5lciBzZWxic3QgYW5nZXNpZWRlbHQKICAgICAgICAgICAgLy8gKGZva3VzVHJhcEFrdGl2aWVy +ZW4gaW4gdWlfZGlhbG9nLmpzKSDigJQgZGVyIHNjaGxpZXNzdCBkYW5uCiAgICAgICAgICAgIC8v +IG51ciBkYXMgb2JlcnN0ZSBPdmVybGF5IGltIFN0YWNrIChMSUZPKS4gSGllciBrZWluCiAgICAg +ICAgICAgIC8vIG1vZGFsU2NobGllc3Nlbi1BdWZydWYgbWVociwgc29uc3Qgd3VlcmRlbiBiZWlk +ZSBIYW5kbGVyCiAgICAgICAgICAgIC8vIGRvcHBlbHQgZmV1ZXJuIChDb25maXJtIHp1ICsgSGF1 +cHRtb2RhbCB6dSkuCiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGVkaXRvclNj +aGxpZXNzZW4oKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gSGV1dGUtQmxvY2sgbGlua3Mgb2Jl +biAoZXJzZXR6dCBkaWUgYWx0ZSBUb29sYmFyKQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC +eUlkKCdidG4taGV1dGUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHp1bUhldXRpZ2VuRGF0 +dW0pOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tc2NoaWNodHRlYW0nKS5h +ZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNjaGljaHRUZWFtTW9kYWxPZWZmbmVuKTsKICAgICAg +ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXRoZW1lJykuYWRkRXZlbnRMaXN0ZW5lcign +Y2xpY2snLCB0aGVtZVVtc2NoYWx0ZW4pOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk +KCdidG4taW5mbycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaW5mb0ZlbnN0ZXJaZWlnZW4p +OwogICAgICAgIHZhciBidG5CdWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWJ1Z3Jl +cG9ydCcpOwogICAgICAgIGlmIChidG5CdWcpIGJ0bkJ1Zy5hZGRFdmVudExpc3RlbmVyKCdjbGlj +aycsIGJ1Z1JlcG9ydE1vZGFsT2VmZm5lbik7CgogICAgICAgIC8vIEhpbndlaXMtU3lzdGVtOiBL +bGljayBhdWYgQmFkZ2UgT0RFUiBVc2VyLU5hbWVuIG9lZmZuZXQgZGllCiAgICAgICAgLy8gSGlu +d2Vpcy1Nb2RhbC1MaXN0ZS4gTnVyIGZ1ZXIgU1UvR2VzYW10dmVyYW50d29ydGxpY2hlIGFrdGl2 +LAogICAgICAgIC8vIGRhbWl0IG5vcm1hbGUgVXNlciBkdXJjaCB2ZXJzZWhlbnRsaWNoZXMgS2xp +Y2tlbiBuaWNodHMgZXJsZWJlbi4KICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZ1 +bmN0aW9uIG9lZmZuZW4oKSB7CiAgICAgICAgICAgICAgICBpZiAoaGlud2Vpc2VTaWNodGJhcigp +KSBoaW53ZWlzZU1vZGFsT2VmZm5lbigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBi +RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGlud2Vpcy1iYWRnZScpOwogICAgICAgICAg +ICBpZiAoYkVsKSB7CiAgICAgICAgICAgICAgICBiRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2sn +LCBvZWZmbmVuKTsKICAgICAgICAgICAgICAgIGJFbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3du +JywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVy +JyB8fCBlLmtleSA9PT0gJyAnKSB7IGUucHJldmVudERlZmF1bHQoKTsgb2VmZm5lbigpOyB9CiAg +ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgdUVsID0gZG9j +dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JlbnV0emVyLWFuemVpZ2UnKTsKICAgICAgICAgICAgaWYg +KHVFbCkgdUVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb2VmZm5lbik7CiAgICAgICAgICAg +IC8vIFRvcGJhci1BdmF0YXI6IEtsaWNrIG9lZmZuZXQgIk1laW4gUHJvZmlsIi1Nb2RhbCBtaXQg +QmlsZC1VcGxvYWQKICAgICAgICAgICAgdmFyIGF2QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 +SWQoJ21laW4tYXZhdGFyLWJ0bicpOwogICAgICAgICAgICBpZiAoYXZCdG4pIHsKICAgICAgICAg +ICAgICAgIGF2QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbWVpblByb2ZpbE1vZGFsT2Vm +Zm5lbik7CiAgICAgICAgICAgICAgICBhdkJ0bi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywg +ZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8 +fCBlLmtleSA9PT0gJyAnKSB7IGUucHJldmVudERlZmF1bHQoKTsgbWVpblByb2ZpbE1vZGFsT2Vm +Zm5lbigpOyB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pKCk7 +CgogICAgICAgIC8vIFBlcnMuIFBsYW46IFBlcnNvbiB3ZWNoc2VsbgogICAgICAgIGRvY3VtZW50 +LmdldEVsZW1lbnRCeUlkKCdwcC1wZXJzb24tYXVzd2FobCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2No +YW5nZScsIHBwUmVuZGVybik7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BwLWRy +dWNrZW4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAg +ICAvLyBEcnVjay1Nb2R1cyBhbmFsb2cgenVtIFdvY2hlbnBsYW46IGJvZHktQ2xhc3Mgc2V0enQg +ZGFzIEBtZWRpYS1wcmludC1MYXlvdXQKICAgICAgICAgICAgLy8gKEhlYWRlci9Ub29sYmFyL1Rh +YnMgYXVzLCBhbGxlIDEyIE1vbmF0ZSBhdWYgZWluZXIgQTQtUXVlcnNlaXRlKS4KICAgICAgICAg +ICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdkcnVja2VuLXBlcnNwbGFuJyk7CiAgICAg +ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cucHJp +bnQoKTsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJv +ZHkuY2xhc3NMaXN0LnJlbW92ZSgnZHJ1Y2tlbi1wZXJzcGxhbicpOyB9LCA1MDApOwogICAgICAg +ICAgICB9LCA1MCk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEtvbW1lbnRhci1FZGl0b3IgKFN0 +dWZlIDIpOiBWZXJsYXVmc2xpc3RlIG9iZW4gKyBFaW5nYWJlZmVsZCB1bnRlbi4KICAgICAgICAv +LyAiSGluenVmdWVnZW4iIGhhZW5ndCBlaW5lbiBuZXVlbiBLb21tZW50YXIgYW4gZGllIExpc3Rl +IGFuIHN0YXR0CiAgICAgICAgLy8gZGVuIHZvcmhhbmRlbmVuIHp1IHVlYmVyc2NocmVpYmVuLiBM +b2VzY2gtSWNvbnMgaW5uZXJoYWxiIGRlcgogICAgICAgIC8vIFZlcmxhdWZzbGlzdGUgc2luZCBu +dXIgZnVlciBTVS9HZXNhbXR2ZXJhbnR3b3J0bGljaGUgc2ljaHRiYXIKICAgICAgICAvLyAoc2ll +aGUgZWRpdG9yS29tbWVudGFyVmVybGF1ZlJlbmRlcm4oKSAvIGRhcmZLb21tZW50YXJMb2VzY2hl +bigpKS4KICAgICAgICB2YXIgaW5wdXRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0 +b3Ita29tbWVudGFyLWlucHV0Jyk7CiAgICAgICAgdmFyIGJ0bkhpbnp1ID0gZG9jdW1lbnQuZ2V0 +RWxlbWVudEJ5SWQoJ2J0bi1rb21tZW50YXItaGluenUnKTsKICAgICAgICBmdW5jdGlvbiBrb21t +ZW50YXJIaW56dVZvbUVkaXRvcigpIHsKICAgICAgICAgICAgaWYgKCFlZGl0b3JBa3RpdigpKSBy +ZXR1cm47CiAgICAgICAgICAgIHZhciB0ZXh0ID0gaW5wdXRFbC52YWx1ZS50cmltKCk7CiAgICAg +ICAgICAgIGlmICghdGV4dCkgcmV0dXJuOwogICAgICAgICAgICBrb21tZW50YXJIaW56dWZ1ZWdl +bihlZGl0b3JEYXR1bSgpLCBlZGl0b3JQZXJzb25JZCgpLCB0ZXh0LCBmdW5jdGlvbigpIHsKICAg +ICAgICAgICAgICAgIGVkaXRvcktvbW1lbnRhclZlcmxhdWZSZW5kZXJuKCk7CiAgICAgICAgICAg +IH0pOwogICAgICAgICAgICBpbnB1dEVsLnZhbHVlID0gJyc7CiAgICAgICAgICAgIC8vIE9wdGlt +aXN0aXNjaGUgc29mb3J0aWdlIFJlLVJlbmRlciAoU2VydmVyLUFudHdvcnQga29tbXQgYXN5bmNo +cm9uKS4KICAgICAgICAgICAgZWRpdG9yS29tbWVudGFyVmVybGF1ZlJlbmRlcm4oKTsKICAgICAg +ICB9CiAgICAgICAgYnRuSGluenUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBrb21tZW50YXJI +aW56dVZvbUVkaXRvcik7CiAgICAgICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3du +JywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAvLyBFbnRlciBpbSBFaW5nYWJlZmVsZCAtPiBk +aXJla3QgYW5oYWVuZ2VuIChrZWluIEZvcm0tU3VibWl0LCBkYWhlcgogICAgICAgICAgICAvLyBl +eHBsaXppdCB2ZXJkcmFodGV0KS4KICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7 +IGUucHJldmVudERlZmF1bHQoKTsga29tbWVudGFySGluenVWb21FZGl0b3IoKTsgfQogICAgICAg +IH0pOwogICAgICAgIC8vIExvZXNjaC1JY29uLURlbGVnYXRpb24gYXVmIGRlbiBWZXJsYXVmLUNv +bnRhaW5lciDigJQgRWludHJhZWdlIHdlcmRlbgogICAgICAgIC8vIGJlaSBqZWRlbSBSZXJlbmRl +ciBuZXUgZXJ6ZXVndCwgZWluemVsbmUgTGlzdGVuZXIgd3VlcmRlbiB2ZXJnZXNzZW4uCiAgICAg +ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvci1rb21tZW50YXItdmVybGF1ZicpLmFk +ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgYnRu +ID0gZS50YXJnZXQuY2xvc2VzdCgnLmVrdi1sb2VzY2hlbicpOwogICAgICAgICAgICBpZiAoIWJ0 +biB8fCAhZWRpdG9yQWt0aXYoKSkgcmV0dXJuOwogICAgICAgICAgICB2YXIga2lkID0gYnRuLmdl +dEF0dHJpYnV0ZSgnZGF0YS1pZCcpOwogICAgICAgICAgICBpZiAoIWtpZCkgcmV0dXJuOwogICAg +ICAgICAgICBiZXN0YWV0aWdlbignRGllc2VuIEtvbW1lbnRhciB3aXJrbGljaCBsw7ZzY2hlbj8g +RGllIEFrdGlvbiB3aXJkIGltIExvZ2J1Y2ggcHJvdG9rb2xsaWVydC4nLCBmdW5jdGlvbigpIHsK +ICAgICAgICAgICAgICAgIGtvbW1lbnRhckxvZXNjaGVuKGVkaXRvckRhdHVtKCksIGVkaXRvclBl +cnNvbklkKCksIGtpZCwgZnVuY3Rpb24ob2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAob2sp +IGVkaXRvcktvbW1lbnRhclZlcmxhdWZSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICB9KTsKICAg +ICAgICAgICAgfSwgeyBqYURhbmdlcjogdHJ1ZSwgamFUZXh0OiAnTMO2c2NoZW4nIH0pOwogICAg +ICAgIH0pOwoKICAgICAgICAvLyBQZXJzb24tSG92ZXItUG9wb3ZlcjogemVpZ3QgU3RhbW1kYXRl +biArIDE0LVRhZ2UtU2NoaWNodHZvcnNjaGF1CiAgICAgICAgLy8gYmVpbSBIb3ZlciB1ZWJlciBO +YW1lbiBpbiBQbGFudW5nIC8gUGVyc29uYWx2ZXJ3YWx0dW5nIC8gV29jaGVucGxhbi4KICAgICAg +ICAvLyBLbGljayBhdWYgZGVuIE5hbWVuIG9lZmZuZXQgd2VpdGVyaGluIGRhcyBqZXdlaWxpZ2Ug +TW9kYWwuCiAgICAgICAgZnVuY3Rpb24gcHBfcGVyc29uSWRBdXNFdmVudChldikgewogICAgICAg +ICAgICAvLyBSZWloZW5mb2xnZTogenVlcnN0IHNwZXppZmlzY2hlIFNlbGVrdG9yZW4gKG1pdCBk +YXRhLWlkIGF1ZgogICAgICAgICAgICAvLyBlaW5lbSBJbm5lci1TcGFuKSwgZGFubiBnZW5lcmlz +Y2hlIC5uYW1lbi16ZWlsZS1Db250YWluZXIuCiAgICAgICAgICAgIHZhciBlbCA9CiAgICAgICAg +ICAgICAgICBldi50YXJnZXQuY2xvc2VzdCgnLnBlcnNvbi1uYW1lLWxpbmtbZGF0YS1pZF0nKSB8 +fAogICAgICAgICAgICAgICAgZXYudGFyZ2V0LmNsb3Nlc3QoJy53cC1uYW1lW2RhdGEtcGVyc29u +LWlkXScpIHx8CiAgICAgICAgICAgICAgICBldi50YXJnZXQuY2xvc2VzdCgnLm5hbWVuLXplaWxl +W2RhdGEtcGVyc29uLWlkXScpOwogICAgICAgICAgICBpZiAoIWVsKSByZXR1cm4gbnVsbDsKICAg +ICAgICAgICAgcmV0dXJuIHsgaWQ6IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpIHx8IGVsLmdl +dEF0dHJpYnV0ZSgnZGF0YS1wZXJzb24taWQnKSwgYW5rZXI6IGVsIH07CiAgICAgICAgfQogICAg +ICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGV2KSB7 +CiAgICAgICAgICAgIHZhciBoaXQgPSBwcF9wZXJzb25JZEF1c0V2ZW50KGV2KTsKICAgICAgICAg +ICAgaWYgKGhpdCkgcGVyc29uUG9wb3ZlclplaWdlbihoaXQuaWQsIGhpdC5hbmtlcik7CiAgICAg +ICAgfSk7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBmdW5j +dGlvbihldikgewogICAgICAgICAgICB2YXIgaGl0ID0gcHBfcGVyc29uSWRBdXNFdmVudChldik7 +CiAgICAgICAgICAgIGlmICghaGl0KSByZXR1cm47CiAgICAgICAgICAgIC8vIFdlbm4gTWF1cyBh +dWYgZWluZSBhbmRlcmUgUGVyc29uLVRyaWdnZXItWmVsbGUgZ2xlaXRldCwgTklDSFQKICAgICAg +ICAgICAgLy8gdmVyc3RlY2tlbiDigJQgZGVyIG1vdXNlb3Zlci1IYW5kbGVyIHplaWNobmV0IGVp +bmZhY2ggbmV1LgogICAgICAgICAgICB2YXIgcmVsID0gZXYucmVsYXRlZFRhcmdldDsKICAgICAg +ICAgICAgaWYgKHJlbCAmJiByZWwuY2xvc2VzdCAmJiAoCiAgICAgICAgICAgICAgICByZWwuY2xv +c2VzdCgnLnBlcnNvbi1uYW1lLWxpbmtbZGF0YS1pZF0nKSB8fAogICAgICAgICAgICAgICAgcmVs +LmNsb3Nlc3QoJy53cC1uYW1lW2RhdGEtcGVyc29uLWlkXScpIHx8CiAgICAgICAgICAgICAgICBy +ZWwuY2xvc2VzdCgnLm5hbWVuLXplaWxlW2RhdGEtcGVyc29uLWlkXScpIHx8CiAgICAgICAgICAg +ICAgICByZWwuY2xvc2VzdCgnI3ZpMy1wZXJzb24tcG9wb3ZlcicpCiAgICAgICAgICAgICkpIHJl +dHVybjsKICAgICAgICAgICAgcGVyc29uUG9wb3ZlclZlcnN0ZWNrZW4oKTsKICAgICAgICB9KTsK +ICAgICAgICAvLyBQb3BvdmVyIHNlbGJzdCBzb2xsdGUgYmVpbSBIb3Zlci1JbiBuaWNodCBhdXNi +bGVuZGVuIChVc2VyIGRhcmYKICAgICAgICAvLyBoaW5laW5rbGlja2VuLCB6LkIuIHVtIFRleHQg +enUga29waWVyZW4pLgogICAgICAgIHZhciBwcEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo +J3ZpMy1wZXJzb24tcG9wb3ZlcicpOwogICAgICAgIGlmIChwcEVsKSB7CiAgICAgICAgICAgIHBw +RWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGZ1bmN0aW9uKCkgeyAvKiB6ZWlnZVRp +bWVyIGVoIGluYWt0aXYgKi8gfSk7CiAgICAgICAgICAgIHBwRWwuYWRkRXZlbnRMaXN0ZW5lcign +bW91c2VsZWF2ZScsIHBlcnNvblBvcG92ZXJWZXJzdGVja2VuKTsKICAgICAgICB9CiAgICAgICAg +Ly8gS29tbWVudGFyLVBvcG92ZXIgYW5hbG9nOiBIb3Zlci1JbiBoYWVsdCBvZmZlbiwgSG92ZXIt +T3V0IHNjaGxpZXNzdAogICAgICAgIC8vIG1pdCBrdXJ6ZXIgVmVyem9lZ2VydW5nIOKAlCBVc2Vy +IHNvbGwgWmVpdCBoYWJlbiwgdWViZXIgZGllIFplbGxlIDwtPgogICAgICAgIC8vIFBvcG92ZXIt +QnJ1ZWNrZSB6dSB3YW5kZXJuIHVuZCBUZXh0IHp1IGtvcGllcmVuLgogICAgICAgIHZhciBrcEVs +ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpMy1rb21tZW50YXItcG9wb3ZlcicpOwogICAg +ICAgIGlmIChrcEVsKSB7CiAgICAgICAgICAgIGtwRWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vl +bnRlcicsIGtvbW1lbnRhclBvcG92ZXJGZXN0aGFsdGVuKTsKICAgICAgICAgICAga3BFbC5hZGRF +dmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywga29tbWVudGFyUG9wb3ZlclZlcnN0ZWNrZW4pOwog +ICAgICAgIH0KCiAgICAgICAgLy8gTW9kYWwKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ +ZCgnbW9kYWwtc2NobGllc3Nlbi1idG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG1vZGFs +U2NobGllc3Nlbik7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLW92ZXJs +YXknKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAg +Ly8gUXVpY2stV2luIG5hY2ggVVgtQXVkaXQgKDIwMjYtMDUtMjkpOiBkYXRhLW5vLWNsb3NlIHJl +c3Bla3RpZXJlbiwKICAgICAgICAgICAgLy8gZGFtaXQgTW9kYWxzIHdpZSBkYXMgRXhjZWwtSW1w +b3J0LVByb2dyZXNzIChsYWV1ZnQsIGRhcmYgbmljaHQKICAgICAgICAgICAgLy8gYWJnZWJyb2No +ZW4gd2VyZGVuKSBuaWNodCBkdXJjaCB2ZXJzZWhlbnRsaWNoZW4gQmFja2Ryb3AtS2xpY2sKICAg +ICAgICAgICAgLy8gc2NobGllc3Nlbi4gRGFzIEF0dHJpYnV0IHdpcmQgdm9tIEF1ZnJ1ZmVyIGdl +c2V0enQgKyBpbgogICAgICAgICAgICAvLyBtb2RhbFNjaGxpZXNzZW4gd2llZGVyIGdlcmFldW10 +LgogICAgICAgICAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMgJiYgdGhpcy5nZXRBdHRyaWJ1dGUo +J2RhdGEtbm8tY2xvc2UnKSAhPT0gJzEnKSBtb2RhbFNjaGxpZXNzZW4oKTsKICAgICAgICB9KTsK +CiAgICAgICAgLy8gR2VidXJ0c3RhZy1Nb2RhbDogS2xpY2sgYXVmIGVpbmVuIFRhZy9Nb25hdC9K +YWhyLUJ1dHRvbi4gRXZlbnQtCiAgICAgICAgLy8gRGVsZWdhdGlvbiBhdWYgbW9kYWwtb3Zlcmxh +eSwgd2VpbCBkZXIgSW5oYWx0IGJlaSBqZWRlbSBLbGljawogICAgICAgIC8vIG5ldSBnZXJlbmRl +cnQgd2lyZCAoaW5uZXJIVE1MIGF1ZiAjZ2ItbW9kYWwtaW5oYWx0KS4KICAgICAgICBkb2N1bWVu +dC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtb3ZlcmxheScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNr JywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgn -LmVrdi1sb2VzY2hlbicpOwogICAgICAgICAgICBpZiAoIWJ0biB8fCAhZWRpdG9yQWt0aXYoKSkg -cmV0dXJuOwogICAgICAgICAgICB2YXIga2lkID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcp -OwogICAgICAgICAgICBpZiAoIWtpZCkgcmV0dXJuOwogICAgICAgICAgICBiZXN0YWV0aWdlbign -RGllc2VuIEtvbW1lbnRhciB3aXJrbGljaCBsw7ZzY2hlbj8gRGllIEFrdGlvbiB3aXJkIGltIExv -Z2J1Y2ggcHJvdG9rb2xsaWVydC4nLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGtvbW1l -bnRhckxvZXNjaGVuKGVkaXRvckRhdHVtKCksIGVkaXRvclBlcnNvbklkKCksIGtpZCwgZnVuY3Rp -b24ob2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAob2spIGVkaXRvcktvbW1lbnRhclZlcmxh -dWZSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwgeyBqYURhbmdl -cjogdHJ1ZSwgamFUZXh0OiAnTMO2c2NoZW4nIH0pOwogICAgICAgIH0pOwoKICAgICAgICAvLyBQ -ZXJzb24tSG92ZXItUG9wb3ZlcjogemVpZ3QgU3RhbW1kYXRlbiArIDE0LVRhZ2UtU2NoaWNodHZv -cnNjaGF1CiAgICAgICAgLy8gYmVpbSBIb3ZlciB1ZWJlciBOYW1lbiBpbiBQbGFudW5nIC8gUGVy -c29uYWx2ZXJ3YWx0dW5nIC8gV29jaGVucGxhbi4KICAgICAgICAvLyBLbGljayBhdWYgZGVuIE5h -bWVuIG9lZmZuZXQgd2VpdGVyaGluIGRhcyBqZXdlaWxpZ2UgTW9kYWwuCiAgICAgICAgZnVuY3Rp -b24gcHBfcGVyc29uSWRBdXNFdmVudChldikgewogICAgICAgICAgICAvLyBSZWloZW5mb2xnZTog -enVlcnN0IHNwZXppZmlzY2hlIFNlbGVrdG9yZW4gKG1pdCBkYXRhLWlkIGF1ZgogICAgICAgICAg -ICAvLyBlaW5lbSBJbm5lci1TcGFuKSwgZGFubiBnZW5lcmlzY2hlIC5uYW1lbi16ZWlsZS1Db250 -YWluZXIuCiAgICAgICAgICAgIHZhciBlbCA9CiAgICAgICAgICAgICAgICBldi50YXJnZXQuY2xv -c2VzdCgnLnBlcnNvbi1uYW1lLWxpbmtbZGF0YS1pZF0nKSB8fAogICAgICAgICAgICAgICAgZXYu -dGFyZ2V0LmNsb3Nlc3QoJy53cC1uYW1lW2RhdGEtcGVyc29uLWlkXScpIHx8CiAgICAgICAgICAg -ICAgICBldi50YXJnZXQuY2xvc2VzdCgnLm5hbWVuLXplaWxlW2RhdGEtcGVyc29uLWlkXScpOwog -ICAgICAgICAgICBpZiAoIWVsKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgcmV0dXJuIHsgaWQ6 -IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpIHx8IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wZXJz -b24taWQnKSwgYW5rZXI6IGVsIH07CiAgICAgICAgfQogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50 -TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGV2KSB7CiAgICAgICAgICAgIHZhciBoaXQg -PSBwcF9wZXJzb25JZEF1c0V2ZW50KGV2KTsKICAgICAgICAgICAgaWYgKGhpdCkgcGVyc29uUG9w -b3ZlclplaWdlbihoaXQuaWQsIGhpdC5hbmtlcik7CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1l -bnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBmdW5jdGlvbihldikgewogICAgICAgICAg -ICB2YXIgaGl0ID0gcHBfcGVyc29uSWRBdXNFdmVudChldik7CiAgICAgICAgICAgIGlmICghaGl0 -KSByZXR1cm47CiAgICAgICAgICAgIC8vIFdlbm4gTWF1cyBhdWYgZWluZSBhbmRlcmUgUGVyc29u -LVRyaWdnZXItWmVsbGUgZ2xlaXRldCwgTklDSFQKICAgICAgICAgICAgLy8gdmVyc3RlY2tlbiDi -gJQgZGVyIG1vdXNlb3Zlci1IYW5kbGVyIHplaWNobmV0IGVpbmZhY2ggbmV1LgogICAgICAgICAg -ICB2YXIgcmVsID0gZXYucmVsYXRlZFRhcmdldDsKICAgICAgICAgICAgaWYgKHJlbCAmJiByZWwu -Y2xvc2VzdCAmJiAoCiAgICAgICAgICAgICAgICByZWwuY2xvc2VzdCgnLnBlcnNvbi1uYW1lLWxp -bmtbZGF0YS1pZF0nKSB8fAogICAgICAgICAgICAgICAgcmVsLmNsb3Nlc3QoJy53cC1uYW1lW2Rh -dGEtcGVyc29uLWlkXScpIHx8CiAgICAgICAgICAgICAgICByZWwuY2xvc2VzdCgnLm5hbWVuLXpl -aWxlW2RhdGEtcGVyc29uLWlkXScpIHx8CiAgICAgICAgICAgICAgICByZWwuY2xvc2VzdCgnI3Zp -My1wZXJzb24tcG9wb3ZlcicpCiAgICAgICAgICAgICkpIHJldHVybjsKICAgICAgICAgICAgcGVy -c29uUG9wb3ZlclZlcnN0ZWNrZW4oKTsKICAgICAgICB9KTsKICAgICAgICAvLyBQb3BvdmVyIHNl -bGJzdCBzb2xsdGUgYmVpbSBIb3Zlci1JbiBuaWNodCBhdXNibGVuZGVuIChVc2VyIGRhcmYKICAg -ICAgICAvLyBoaW5laW5rbGlja2VuLCB6LkIuIHVtIFRleHQgenUga29waWVyZW4pLgogICAgICAg -IHZhciBwcEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpMy1wZXJzb24tcG9wb3Zlcicp -OwogICAgICAgIGlmIChwcEVsKSB7CiAgICAgICAgICAgIHBwRWwuYWRkRXZlbnRMaXN0ZW5lcign -bW91c2VlbnRlcicsIGZ1bmN0aW9uKCkgeyAvKiB6ZWlnZVRpbWVyIGVoIGluYWt0aXYgKi8gfSk7 -CiAgICAgICAgICAgIHBwRWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHBlcnNvblBv -cG92ZXJWZXJzdGVja2VuKTsKICAgICAgICB9CiAgICAgICAgLy8gS29tbWVudGFyLVBvcG92ZXIg -YW5hbG9nOiBIb3Zlci1JbiBoYWVsdCBvZmZlbiwgSG92ZXItT3V0IHNjaGxpZXNzdAogICAgICAg -IC8vIG1pdCBrdXJ6ZXIgVmVyem9lZ2VydW5nIOKAlCBVc2VyIHNvbGwgWmVpdCBoYWJlbiwgdWVi -ZXIgZGllIFplbGxlIDwtPgogICAgICAgIC8vIFBvcG92ZXItQnJ1ZWNrZSB6dSB3YW5kZXJuIHVu -ZCBUZXh0IHp1IGtvcGllcmVuLgogICAgICAgIHZhciBrcEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVu -dEJ5SWQoJ3ZpMy1rb21tZW50YXItcG9wb3ZlcicpOwogICAgICAgIGlmIChrcEVsKSB7CiAgICAg -ICAgICAgIGtwRWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGtvbW1lbnRhclBvcG92 -ZXJGZXN0aGFsdGVuKTsKICAgICAgICAgICAga3BFbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxl -YXZlJywga29tbWVudGFyUG9wb3ZlclZlcnN0ZWNrZW4pOwogICAgICAgIH0KCiAgICAgICAgLy8g -TW9kYWwKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtc2NobGllc3Nlbi1i -dG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG1vZGFsU2NobGllc3Nlbik7CiAgICAgICAg -ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLW92ZXJsYXknKS5hZGRFdmVudExpc3RlbmVy -KCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgLy8gUXVpY2stV2luIG5hY2ggVVgt -QXVkaXQgKDIwMjYtMDUtMjkpOiBkYXRhLW5vLWNsb3NlIHJlc3Bla3RpZXJlbiwKICAgICAgICAg -ICAgLy8gZGFtaXQgTW9kYWxzIHdpZSBkYXMgRXhjZWwtSW1wb3J0LVByb2dyZXNzIChsYWV1ZnQs -IGRhcmYgbmljaHQKICAgICAgICAgICAgLy8gYWJnZWJyb2NoZW4gd2VyZGVuKSBuaWNodCBkdXJj -aCB2ZXJzZWhlbnRsaWNoZW4gQmFja2Ryb3AtS2xpY2sKICAgICAgICAgICAgLy8gc2NobGllc3Nl -bi4gRGFzIEF0dHJpYnV0IHdpcmQgdm9tIEF1ZnJ1ZmVyIGdlc2V0enQgKyBpbgogICAgICAgICAg -ICAvLyBtb2RhbFNjaGxpZXNzZW4gd2llZGVyIGdlcmFldW10LgogICAgICAgICAgICBpZiAoZS50 -YXJnZXQgPT09IHRoaXMgJiYgdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtbm8tY2xvc2UnKSAhPT0g -JzEnKSBtb2RhbFNjaGxpZXNzZW4oKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gR2VidXJ0c3Rh -Zy1Nb2RhbDogS2xpY2sgYXVmIGVpbmVuIFRhZy9Nb25hdC9KYWhyLUJ1dHRvbi4gRXZlbnQtCiAg -ICAgICAgLy8gRGVsZWdhdGlvbiBhdWYgbW9kYWwtb3ZlcmxheSwgd2VpbCBkZXIgSW5oYWx0IGJl -aSBqZWRlbSBLbGljawogICAgICAgIC8vIG5ldSBnZXJlbmRlcnQgd2lyZCAoaW5uZXJIVE1MIGF1 -ZiAjZ2ItbW9kYWwtaW5oYWx0KS4KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9k -YWwtb3ZlcmxheScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAg -ICAgICAgICB2YXIgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgnLmdiLWJ0bicpOwogICAgICAgICAg -ICBpZiAoIWJ0bikgcmV0dXJuOwogICAgICAgICAgICB2YXIgdHlwID0gYnRuLmdldEF0dHJpYnV0 -ZSgnZGF0YS1nYi10eXAnKTsKICAgICAgICAgICAgdmFyIHdlcnQgPSBwYXJzZUludChidG4uZ2V0 -QXR0cmlidXRlKCdkYXRhLWdiLXdlcnQnKSwgMTApOwogICAgICAgICAgICBnZWJ1cnRzdGFnTW9k -YWxLbGljayh0eXAsIHdlcnQpOwogICAgICAgIH0pOwoKICAgIH0KCiAgICBmdW5jdGlvbiBhZG1p -bkxpc3RlbmVyRWlucmljaHRlbigpIHsKICAgICAgICAvLyA9PT09PSBBZG1pbiBFdmVudHMgPT09 -PT0KCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1wZXJzb24tbmV1JykuYWRk -RXZlbnRMaXN0ZW5lcignY2xpY2snLCBwZXJzb25OZXVEaWFsb2cpOwogICAgICAgIHZhciBidG5T -b3J0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1tYW51ZWxsZS1zb3J0aWVydW5nJyk7 -CiAgICAgICAgaWYgKGJ0blNvcnQpIGJ0blNvcnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBt -YW51ZWxsZVNvcnRpZXJ1bmdEaWFsb2cpOwoKICAgICAgICAvLyBFaW5mYWNoLUtsaWNrIGF1ZiBp -bmxpbmUtbWFya2llcnRlIERhdGVuLVplbGxlbi4gQnV0dG9ucyBpbiBkZXJzZWxiZW4KICAgICAg -ICAvLyBaZWlsZSBoYWJlbiBkYXRhLWFrdGlvbiArIHdlcmRlbiBpbSB6d2VpdGVuIENsaWNrLUhh -bmRsZXIgYXVzZ2V3ZXJ0ZXQsCiAgICAgICAgLy8gZG9ydCBnZXdpbm50IGRlciBCdXR0b24gKGVp -Z2VuZXIgY2xvc2VzdCgpIG1hdGNoKS4KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn -cGVyc29uYWwtdGJvZHknKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsK -ICAgICAgICAgICAgLy8gV2VubiBlaW4gQWt0aW9ucy1CdXR0b24gZ2V0cm9mZmVuIHdpcmQsIE5J -Q0hUIGFscyBJbmxpbmUtS2xpY2sgd2VydGVuLgogICAgICAgICAgICBpZiAoZS50YXJnZXQuY2xv -c2VzdCgnYnV0dG9uW2RhdGEtYWt0aW9uXScpKSByZXR1cm47CiAgICAgICAgICAgIHZhciBpbmxp -bmUgPSBlLnRhcmdldC5jbG9zZXN0KCcucGVyc29uYWwtaW5saW5lJyk7CiAgICAgICAgICAgIGlm -ICghaW5saW5lKSByZXR1cm47CiAgICAgICAgICAgIHBlcnNvbmFsRmVsZElubGluZUVkaXQocGFy -c2VJbnQoaW5saW5lLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpLCAxMCksIGlubGluZSk7CiAgICAg -ICAgfSk7CgogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwZXJzb25hbC10Ym9keScp -LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIg -cmFuZ1NwYW4gPSBlLnRhcmdldC5jbG9zZXN0KCcucmFuZy1lZGl0Jyk7CiAgICAgICAgICAgIGlm -IChyYW5nU3BhbikgewogICAgICAgICAgICAgICAgcmFuZ0lubGluZUVkaXQocGFyc2VJbnQocmFu -Z1NwYW4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyksIDEwKSwgcmFuZ1NwYW4pOwogICAgICAgICAg -ICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBmdW5rU3BhbiA9IGUu -dGFyZ2V0LmNsb3Nlc3QoJy5mdW5rdGlvbi1lZGl0Jyk7CiAgICAgICAgICAgIGlmIChmdW5rU3Bh -bikgewogICAgICAgICAgICAgICAgZnVua3Rpb25JbmxpbmVFZGl0KHBhcnNlSW50KGZ1bmtTcGFu -LmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpLCAxMCksIGZ1bmtTcGFuKTsKICAgICAgICAgICAgICAg -IHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZGdyZFNwYW4gPSBlLnRhcmdl -dC5jbG9zZXN0KCcuZGllbnN0Z3JhZC1lZGl0Jyk7CiAgICAgICAgICAgIGlmIChkZ3JkU3Bhbikg -ewogICAgICAgICAgICAgICAgZGllbnN0Z3JhZElubGluZUVkaXQocGFyc2VJbnQoZGdyZFNwYW4u -Z2V0QXR0cmlidXRlKCdkYXRhLWlkJyksIDEwKSwgZGdyZFNwYW4pOwogICAgICAgICAgICAgICAg -cmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBlbGRnbENlbGwgPSBlLnRhcmdl -dC5jbG9zZXN0KCcuZWxkZ2wtZWRpdCcpOwogICAgICAgICAgICBpZiAoZWxkZ2xDZWxsKSB7CiAg -ICAgICAgICAgICAgICBlbGRnbElubGluZVRvZ2dsZShwYXJzZUludChlbGRnbENlbGwuZ2V0QXR0 -cmlidXRlKCdkYXRhLWlkJyksIDEwKSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg -ICAgIH0KICAgICAgICAgICAgdmFyIGFwQ2VsbCA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5hbnNwcmVj -aHBhcnRuZXItZWRpdCcpOwogICAgICAgICAgICBpZiAoYXBDZWxsKSB7CiAgICAgICAgICAgICAg -ICBhbnNwcmVjaHBhcnRuZXJJbmxpbmVUb2dnbGUocGFyc2VJbnQoYXBDZWxsLmdldEF0dHJpYnV0 -ZSgnZGF0YS1pZCcpLCAxMCkpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9 -CiAgICAgICAgICAgIHZhciBpcENlbGwgPSBlLnRhcmdldC5jbG9zZXN0KCcuaW5wbGFudW5nLWVk -aXQnKTsKICAgICAgICAgICAgaWYgKGlwQ2VsbCkgewogICAgICAgICAgICAgICAgaW5QbGFudW5n -SW5saW5lVG9nZ2xlKHBhcnNlSW50KGlwQ2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKSwgMTAp -KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIg -bmFtZUxpbmsgPSBlLnRhcmdldC5jbG9zZXN0KCcucGVyc29uLW5hbWUtbGluaycpOwogICAgICAg -ICAgICBpZiAobmFtZUxpbmspIHsKICAgICAgICAgICAgICAgIHBlcnNvbkJlYXJiZWl0ZW5EaWFs -b2cocGFyc2VJbnQobmFtZUxpbmsuZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyksIDEwKSk7CiAgICAg -ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGJ0biA9IGUu -dGFyZ2V0LmNsb3Nlc3QoJ2J1dHRvbicpOwogICAgICAgICAgICBpZiAoIWJ0bikgcmV0dXJuOwog -ICAgICAgICAgICB2YXIgaWQgPSBwYXJzZUludChidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkJykp -OwogICAgICAgICAgICB2YXIgYWt0aW9uID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1ha3Rpb24n -KTsKICAgICAgICAgICAgaWYgKGFrdGlvbiA9PT0gJ2JlYXJiZWl0ZW4nKSBwZXJzb25CZWFyYmVp -dGVuRGlhbG9nKGlkKTsKICAgICAgICAgICAgZWxzZSBpZiAoYWt0aW9uID09PSAncGVyc29uLXRl -c3RlbicpIGltcGVyc29uYXRlUGVyc29uKGlkKTsKICAgICAgICAgICAgZWxzZSBpZiAoYWt0aW9u -ID09PSAnZW1haWwnKSBwZXJzb25FbWFpbERpYWxvZyhpZCk7CiAgICAgICAgICAgIGVsc2UgaWYg -KGFrdGlvbiA9PT0gJ3Vtc2V0emVuJykgewogICAgICAgICAgICAgICAgYmVzdGFldGlnZW4oJ1Bl -cnNvbiBhdXMgZGVyIFBsYW51bmcgZW50ZmVybmVuPyBCZXN0ZWhlbmRlIEVpbnRyw6RnZSBibGVp -YmVuIGVyaGFsdGVuIHVuZCBrw7ZubmVuIHBlciDigJ5VbWdlc2V0enRlIGVpbmJsZW5kZW4iIHdp -ZWRlciBzaWNodGJhciBnZW1hY2h0IHdlcmRlbi4nLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAg -ICAgICAgICBwZXJzb25TdGF0dXNTZXR6ZW4oaWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgIH0s -IHsgdGl0ZWw6ICdQZXJzb24gdW1zZXR6ZW4nLCBqYVRleHQ6ICdVbXNldHplbicgfSk7CiAgICAg -ICAgICAgIH0gZWxzZSBpZiAoYWt0aW9uID09PSAncmVha3RpdmllcmVuJykgewogICAgICAgICAg -ICAgICAgcGVyc29uU3RhdHVzU2V0emVuKGlkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAg -ICAgICAvLyBQYXBpZXJrb3JiLUxpZmVjeWNsZSAoQ2hlcnJ5LVBpY2sgMzAwOWVhOCwgaGludGVy -IFRvZ2dsZSBgZmVhdHVyZXMucGFwaWVya29yYlVJYCkuCiAgICAgICAgICAgIGVsc2UgaWYgKGFr -dGlvbiA9PT0gJ2luLXBhcGllcmtvcmInKSB7CiAgICAgICAgICAgICAgICB2YXIgdGFnZSA9IFou -YWRtaW4ucGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1bmcgIT0gbnVsbCA/IFouYWRtaW4ucGFwaWVy -a29yYlRhZ2VBdWZiZXdhaHJ1bmcgOiAzMDsKICAgICAgICAgICAgICAgIGJlc3RhZXRpZ2VuKCdQ -ZXJzb24gaW4gZGVuIFBhcGllcmtvcmIgdmVyc2NoaWViZW4/XG5cblNpZSB3aXJkIG5hY2ggJyAr -IHRhZ2UgKyAnIFRhZ2VuIGF1dG9tYXRpc2NoIGVuZGfDvGx0aWcgZ2Vsw7ZzY2h0LiBCaXMgZGFo -aW4ga2FubiBzaWUgd2llZGVyaGVyZ2VzdGVsbHQgd2VyZGVuLicsIGZ1bmN0aW9uKCkgewogICAg -ICAgICAgICAgICAgICAgIGFwaURlbGV0ZSgnL2FwaS9wZXJzb25lbi8nICsgaWQpLnRoZW4oZnVu -Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gWi5wbGFudW5nLnBlcnNv -bmVuLmZpbmQoZnVuY3Rpb24oeCkgeyByZXR1cm4geC5pZCA9PT0gaWQ7IH0pOwogICAgICAgICAg -ICAgICAgICAgICAgICBpZiAocCkgcC5nZWxvZXNjaHRBbSA9IG5ldyBEYXRlKCkudG9JU09TdHJp -bmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5OZXVBdWZiYXVlbigpOwogICAg -ICAgICAgICAgICAgICAgICAgICBwZXJzb25hbFRhYmVsbGVSZW5kZXJuKCk7CiAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZW5SZW5kZXJuID09PSAnZnVuY3Rpb24nKSB7IG5h -bWVuUmVuZGVybigpOyBkYXRlbkdyaWRSZW5kZXJuKCk7IGtvcGZSZW5kZXJuKCk7IH0KICAgICAg -ICAgICAgICAgICAgICAgICAgdG9hc3QoJ1BlcnNvbiBpbiBQYXBpZXJrb3JiIHZlcnNjaG9iZW4n -LCAnZXJmb2xnJyk7CiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkgeyB0 -b2FzdCgnRmVobGVyOiAnICsgZS5tZXNzYWdlLCAnZmVobGVyJyk7IH0pOwogICAgICAgICAgICAg -ICAgfSwgeyB0aXRlbDogJ0luIFBhcGllcmtvcmInLCBqYVRleHQ6ICdJbiBQYXBpZXJrb3JiJywg -amFEYW5nZXI6IHRydWUgfSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWt0aW9uID09PSAnd2ll -ZGVyaGVyc3RlbGxlbicpIHsKICAgICAgICAgICAgICAgIGFwaVB1dCgnL2FwaS9wZXJzb25lbi8n -ICsgaWQsIHsgZ2Vsb2VzY2h0QW06IG51bGwsIGFrdGl2OiB0cnVlIH0pLnRoZW4oZnVuY3Rpb24o -KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBaLnBsYW51bmcucGVyc29uZW4uZmluZChm -dW5jdGlvbih4KSB7IHJldHVybiB4LmlkID09PSBpZDsgfSk7CiAgICAgICAgICAgICAgICAgICAg -aWYgKHApIHsgcC5nZWxvZXNjaHRBbSA9IG51bGw7IHAuYWt0aXYgPSB0cnVlOyB9CiAgICAgICAg -ICAgICAgICAgICAgcGVyc29uZW5OZXVBdWZiYXVlbigpOwogICAgICAgICAgICAgICAgICAgIHBl -cnNvbmFsVGFiZWxsZVJlbmRlcm4oKTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5h -bWVuUmVuZGVybiA9PT0gJ2Z1bmN0aW9uJykgeyBuYW1lblJlbmRlcm4oKTsgZGF0ZW5HcmlkUmVu -ZGVybigpOyBrb3BmUmVuZGVybigpOyB9CiAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ1BlcnNv -biB3aWVkZXJoZXJnZXN0ZWxsdCcsICdlcmZvbGcnKTsKICAgICAgICAgICAgICAgIH0pLmNhdGNo -KGZ1bmN0aW9uKGUpIHsgdG9hc3QoJ0ZlaGxlcjogJyArIGUubWVzc2FnZSwgJ2ZlaGxlcicpOyB9 -KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChha3Rpb24gPT09ICdlbmRndWVsdGlnLWxvZXNjaGVu -JykgewogICAgICAgICAgICAgICAgYmVzdGFldGlnZW4oJ1BlcnNvbiBFTkRHw5xMVElHIGzDtnNj -aGVuP1xuXG5FaW50csOkZ2UgaW4gZGVyIFBsYW51bmcgdmVyd2Fpc2VuIChibGVpYmVuIGFiZXIg -dGVjaG5pc2NoIGVyaGFsdGVuKS4gTG9nYnVjaC0gdW5kIFN0YXRpc3Rpay1IaXN0b3JpZSBibGVp -YmVuIHNpY2h0YmFyLiBEaWVzZSBBa3Rpb24ga2FubiBuaWNodCByw7xja2fDpG5naWcgZ2VtYWNo -dCB3ZXJkZW4uJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgYXBpRGVsZXRlKCcv -YXBpL3BlcnNvbmVuLycgKyBpZCArICc/ZW5kZ3VlbHRpZz0xJykudGhlbihmdW5jdGlvbigpIHsK -ICAgICAgICAgICAgICAgICAgICAgICAgWi5wbGFudW5nLnBlcnNvbmVuID0gKFoucGxhbnVuZy5w -ZXJzb25lbiB8fCBbXSkuZmlsdGVyKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHguaWQgIT09IGlkOyB9 -KTsKICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5OZXVBdWZiYXVlbigpOwogICAgICAg -ICAgICAgICAgICAgICAgICBwZXJzb25hbFRhYmVsbGVSZW5kZXJuKCk7CiAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICh0eXBlb2YgbmFtZW5SZW5kZXJuID09PSAnZnVuY3Rpb24nKSB7IG5hbWVu -UmVuZGVybigpOyBkYXRlbkdyaWRSZW5kZXJuKCk7IGtvcGZSZW5kZXJuKCk7IH0KICAgICAgICAg -ICAgICAgICAgICAgICAgdG9hc3QoJ1BlcnNvbiBlbmRnw7xsdGlnIGdlbMO2c2NodCcsICdlcmZv -bGcnKTsKICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRvYXN0KCdG -ZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAgICAgICAgICAgICB9LCB7 -IHRpdGVsOiAnRW5kZ8O8bHRpZyBsw7ZzY2hlbicsIGphVGV4dDogJ0VuZGfDvGx0aWcgbMO2c2No -ZW4nLCBqYURhbmdlcjogdHJ1ZSB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAg -ICB2YXIgZmlsdGVyQ2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkbWluLXBlcnNvbmFs -LWZpbHRlcicpOwogICAgICAgIGlmIChmaWx0ZXJDaGspIGZpbHRlckNoay5hZGRFdmVudExpc3Rl -bmVyKCdjaGFuZ2UnLCBwZXJzb25hbFRhYmVsbGVSZW5kZXJuKTsKICAgICAgICB2YXIgcGFwaWVy -a29yYkZpbHRlckNoayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZG1pbi1wYXBpZXJrb3Ji -LWZpbHRlcicpOwogICAgICAgIGlmIChwYXBpZXJrb3JiRmlsdGVyQ2hrKSBwYXBpZXJrb3JiRmls -dGVyQ2hrLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHBlcnNvbmFsVGFiZWxsZVJlbmRlcm4p -OwoKICAgICAgICB2YXIgdW1nQ2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Noay11bWdl -c2V0enRlLWVpbmJsZW5kZW4nKTsKICAgICAgICBpZiAodW1nQ2hrKSB1bWdDaGsuYWRkRXZlbnRM -aXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIFoudW1nZXNldHp0ZUVp -bmJsZW5kZW4gPSB1bWdDaGsuY2hlY2tlZDsKICAgICAgICAgICAgcGVyc29uZW5OZXVBdWZiYXVl -bigpOwogICAgICAgICAgICBuYW1lblJlbmRlcm4oKTsKICAgICAgICAgICAgZGF0ZW5HcmlkUmVu -ZGVybigpOwogICAgICAgICAgICBrb3BmUmVuZGVybigpOwogICAgICAgIH0pOwoKICAgICAgICAv -LyBTdGFuZG9ydGUKICAgICAgICB2YXIgYnRuU3ROZXUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ -ZCgnYnRuLXN0YW5kb3J0LW5ldScpOwogICAgICAgIGlmIChidG5TdE5ldSkgYnRuU3ROZXUuYWRk -RXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgWi5hZG1pbi5z -dGFuZG9ydGUgPSBaLmFkbWluLnN0YW5kb3J0ZSB8fCBbXTsKICAgICAgICAgICAgWi5hZG1pbi5z -dGFuZG9ydGUucHVzaCh7IG5hbWU6ICdOZXVlciBTdGFuZG9ydCcsIGt1ZXJ6ZWw6ICcnLCBpc3RQ -b29sOiB0cnVlIH0pOwogICAgICAgICAgICBzdGFuZG9ydGVSZW5kZXJuKCk7CiAgICAgICAgfSk7 -CiAgICAgICAgdmFyIHN0VGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhbmRvcnRl -LXRib2R5Jyk7CiAgICAgICAgaWYgKHN0VGJvZHkpIHN0VGJvZHkuYWRkRXZlbnRMaXN0ZW5lcign -Y2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBidG4gPSBlLnRhcmdldC5jbG9z -ZXN0KCdidXR0b24nKTsKICAgICAgICAgICAgaWYgKCFidG4pIHJldHVybjsKICAgICAgICAgICAg -dmFyIGlkeCA9IHBhcnNlSW50KGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4JykpOwogICAgICAg -ICAgICB2YXIgYWt0aW9uID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1ha3Rpb24nKTsKICAgICAg -ICAgICAgaWYgKGFrdGlvbiA9PT0gJ3N0YW5kb3J0LWxvZXNjaGVuJykgewogICAgICAgICAgICAg -ICAgdmFyIHN0TmFtZSA9IFouYWRtaW4uc3RhbmRvcnRlW2lkeF0ubmFtZSB8fCAnJzsKICAgICAg -ICAgICAgICAgIGJlc3RhZXRpZ2VuKCdTdGFuZG9ydCDigJ4nICsgc3ROYW1lICsgJyIgd2lya2xp -Y2ggbMO2c2NoZW4/JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgWi5hZG1pbi5z -dGFuZG9ydGUuc3BsaWNlKGlkeCwgMSk7CiAgICAgICAgICAgICAgICAgICAgc3RhbmRvcnRlUmVu -ZGVybigpOwogICAgICAgICAgICAgICAgfSwgeyB0aXRlbDogJ1N0YW5kb3J0IGzDtnNjaGVuJywg -amFEYW5nZXI6IHRydWUgfSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWt0aW9uID09PSAnc3Rh -bmRvcnQtcmh5dGhtdXMnKSB7CiAgICAgICAgICAgICAgICByaHl0aG11c0dlbmVyYXRvckRpYWxv -ZyhpZHgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGJ0blN0U3BlaWNo -ZXJuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1zdGFuZG9ydGUtc3BlaWNoZXJuJyk7 -CiAgICAgICAgaWYgKGJ0blN0U3BlaWNoZXJuKSBidG5TdFNwZWljaGVybi5hZGRFdmVudExpc3Rl -bmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgZGF0ZW4gPSBzdGFuZG9y -dGVBdXNUYWJlbGxlTGVzZW4oKTsKICAgICAgICAgICAgYXBpUHV0KCcvYXBpL2FkbWluL3N0YW5k -b3J0ZScsIGRhdGVuKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgWi5hZG1pbi5z -dGFuZG9ydGUgPSBkYXRlbjsKICAgICAgICAgICAgICAgIGtvcGZSZW5kZXJuKCk7CiAgICAgICAg -ICAgICAgICBkaXJ0eVNldHplbignc3RhbmRvcnRlJywgZmFsc2UpOwogICAgICAgICAgICAgICAg -dGFiRHJhZnRMb2VzY2hlbignc3RhbmRvcnRlJyk7CiAgICAgICAgICAgICAgICB0b2FzdCgnU3Rh -bmRvcnRlIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycpOwogICAgICAgICAgICB9KS5jYXRjaChmdW5j -dGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAg -ICAgICAgfSk7CgogICAgICAgIC8vIERpZW5zdGdydXBwZW4g4oCUIEt1ZXJ6ZWwsIEJlemVpY2hu -dW5nLCBGYXJiZW4uIEJlaSBLdWVyemVsLUFlbmRlcnVuZwogICAgICAgIC8vIHdlcmRlbiBhbGxl -IFBlcnNvbmVuIGRpZXNlciBHcnVwcGUgYXV0b21hdGlzY2ggdW1nZXNjaHJpZWJlbgogICAgICAg -IC8vIChjYXNjYWRlIHJlbmFtZSkuCiAgICAgICAgdmFyIGJ0bkdydU5ldSA9IGRvY3VtZW50Lmdl -dEVsZW1lbnRCeUlkKCdidG4tZ3J1cHBlbi1uZXUnKTsKICAgICAgICBpZiAoYnRuR3J1TmV1KSBi -dG5HcnVOZXUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAg -ICAgWi5hZG1pbi5ncnVwcGVuID0gKFouYWRtaW4uZ3J1cHBlbiB8fCBbXSkuc2xpY2UoKTsKICAg -ICAgICAgICAgWi5hZG1pbi5ncnVwcGVuLnB1c2goeyBuYW1lOiAnJywgYmV6ZWljaG51bmc6ICcn -LCBoaW50ZXJncnVuZDogJyM1NDZFN0EnLCBzY2hyaWZ0OiAnI0ZGRkZGRicgfSk7CiAgICAgICAg -ICAgIGdydXBwZW5UYWJlbGxlUmVuZGVybigpOwogICAgICAgICAgICAvLyBGb2t1cyBhdWYgZGFz -IGdlcmFkZSBhbmdlbGVndGUgS3VlcnplbC1GZWxkCiAgICAgICAgICAgIHZhciBsZXR6dGVaZWls -ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNncnVwcGVuLXRib2R5IHRyOmxhc3QtY2hpbGQg -LmdydXBwZS1rdWVyemVsLWlucHV0Jyk7CiAgICAgICAgICAgIGlmIChsZXR6dGVaZWlsZSkgbGV0 -enRlWmVpbGUuZm9jdXMoKTsKICAgICAgICB9KTsKCiAgICAgICAgdmFyIGdydXBwZW5UYm9keSA9 -IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncnVwcGVuLXRib2R5Jyk7CiAgICAgICAgaWYgKGdy -dXBwZW5UYm9keSkgZ3J1cHBlblRib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rp -b24oZSkgewogICAgICAgICAgICB2YXIgYnRuU29ydCA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRh -LWFrdGlvbj0iZ3J1cHBlLXJhdWYiXSxbZGF0YS1ha3Rpb249ImdydXBwZS1ydW50ZXIiXScpOwog -ICAgICAgICAgICBpZiAoYnRuU29ydCAmJiAhYnRuU29ydC5kaXNhYmxlZCkgewogICAgICAgICAg -ICAgICAgdmFyIHNvcnRJZHggPSBwYXJzZUludChidG5Tb3J0LmdldEF0dHJpYnV0ZSgnZGF0YS1p -ZHgnKSwgMTApOwogICAgICAgICAgICAgICAgdmFyIHJhdWYgPSBidG5Tb3J0LmdldEF0dHJpYnV0 -ZSgnZGF0YS1ha3Rpb24nKSA9PT0gJ2dydXBwZS1yYXVmJzsKICAgICAgICAgICAgICAgIHZhciB6 -aWVsSWR4ID0gcmF1ZiA/IHNvcnRJZHggLSAxIDogc29ydElkeCArIDE7CiAgICAgICAgICAgICAg -ICB2YXIgZ3JwID0gWi5hZG1pbi5ncnVwcGVuOwogICAgICAgICAgICAgICAgaWYgKHppZWxJZHgg -Pj0gMCAmJiB6aWVsSWR4IDwgZ3JwLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHZhciB0 -bXAgPSBncnBbc29ydElkeF07CiAgICAgICAgICAgICAgICAgICAgZ3JwW3NvcnRJZHhdID0gZ3Jw -W3ppZWxJZHhdOwogICAgICAgICAgICAgICAgICAgIGdycFt6aWVsSWR4XSA9IHRtcDsKICAgICAg -ICAgICAgICAgICAgICBncnVwcGVuVGFiZWxsZVJlbmRlcm4oKTsKICAgICAgICAgICAgICAgICAg -ICBkaXJ0eVNldHplbignZ3J1cHBlbicsIHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAg -ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBidG4gPSBlLnRh -cmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249ImdydXBwZS1sb2VzY2hlbiJdJyk7CiAgICAgICAg -ICAgIGlmICghYnRuIHx8IGJ0bi5kaXNhYmxlZCkgcmV0dXJuOwogICAgICAgICAgICB2YXIgaWR4 -ID0gcGFyc2VJbnQoYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSwgMTApOwogICAgICAgICAg -ICB2YXIgZ3IgPSAoWi5hZG1pbi5ncnVwcGVuIHx8IFtdKVtpZHhdOwogICAgICAgICAgICBpZiAo -IWdyKSByZXR1cm47CiAgICAgICAgICAgIC8vIERvcHBlbHRlIFNpY2hlcmhlaXQ6IFBlcnNvbmVu -LVphZWhsdW5nIGVybmV1dCBwcnVlZmVuCiAgICAgICAgICAgIHZhciB6YWVobCA9IGdydXBwZW5Q -ZXJzb25lblphZWhsZW4oKTsKICAgICAgICAgICAgaWYgKCh6YWVobFtnci5uYW1lXSB8fCAwKSA+ -IDApIHsKICAgICAgICAgICAgICAgIHRvYXN0KCdHcnVwcGUgIicgKyBnci5uYW1lICsgJyIgaGF0 -IG5vY2ggJyArIHphZWhsW2dyLm5hbWVdICsgJyBha3RpdmUgUGVyc29uZW4g4oCUIGthbm4gbmlj -aHQgZ2Vsw7ZzY2h0IHdlcmRlbicsICd3YXJudW5nJyk7CiAgICAgICAgICAgICAgICByZXR1cm47 -CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYmVzdGFldGlnZW4oJ0RpZW5zdGdydXBwZSAiJyAr -IGdyLm5hbWUgKyAnIiAoJyArIChnci5iZXplaWNobnVuZyB8fCAnJykgKyAnKSB3aXJrbGljaCBs -w7ZzY2hlbj9cblxuRGllIEdydXBwZSB3aXJkIG5pY2h0IGF1cyBQZXJzb25lbi1FaW50csOkZ2Vu -IGVudGZlcm50LCBkaWUgc2llIGJlcmVpdHMgZ2VudXR6dCBoYWJlbiAoYWt0dWVsbDoga2VpbmUp -IOKAlCBudXIgYXVzIGRlciBBZG1pbi1MaXN0ZS4nLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAg -ICAgIFouYWRtaW4uZ3J1cHBlbi5zcGxpY2UoaWR4LCAxKTsKICAgICAgICAgICAgICAgIGdydXBw -ZW5UYWJlbGxlUmVuZGVybigpOwogICAgICAgICAgICAgICAgdG9hc3QoJ0dydXBwZSBsb2thbCBl -bnRmZXJudCDigJQgamV0enQgIlNwZWljaGVybiIgZHLDvGNrZW4nLCAnaW5mbycpOwogICAgICAg -ICAgICB9LCB7IHRpdGVsOiAnR3J1cHBlIGzDtnNjaGVuJywgamFEYW5nZXI6IHRydWUgfSk7CiAg -ICAgICAgfSk7CgogICAgICAgIHZhciBidG5HcnVTcGVpY2hlcm4gPSBkb2N1bWVudC5nZXRFbGVt -ZW50QnlJZCgnYnRuLWdydXBwZW4tc3BlaWNoZXJuJyk7CiAgICAgICAgaWYgKGJ0bkdydVNwZWlj -aGVybikgYnRuR3J1U3BlaWNoZXJuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24o -KSB7CiAgICAgICAgICAgIHZhciBrdWVySW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFs -bCgnLmdydXBwZS1rdWVyemVsLWlucHV0Jyk7CiAgICAgICAgICAgIHZhciBiZXpJbnB1dHMgID0g -ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdydXBwZS1iZXotaW5wdXQnKTsKICAgICAgICAg -ICAgdmFyIGhnSW5wdXRzICAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZ3J1cHBlLWhn -LWlucHV0Jyk7CiAgICAgICAgICAgIHZhciBzZklucHV0cyAgID0gZG9jdW1lbnQucXVlcnlTZWxl -Y3RvckFsbCgnLmdydXBwZS1zZi1pbnB1dCcpOwogICAgICAgICAgICB2YXIgbmV1ZUdyID0gKFou -YWRtaW4uZ3J1cHBlbiB8fCBbXSkubWFwKGZ1bmN0aW9uKGcpIHsgcmV0dXJuIE9iamVjdC5hc3Np -Z24oe30sIGcpOyB9KTsKICAgICAgICAgICAgdmFyIHJlbmFtZU1hcCA9IHt9OyAgICAgLy8gYWx0 -ZXNLdWVyemVsIC0+IG5ldWVzS3VlcnplbAogICAgICAgICAgICB2YXIgZHVwbGljYXRlQ2hlY2sg -PSB7fTsKICAgICAgICAgICAgdmFyIGZlaGxlciA9IG51bGw7CgogICAgICAgICAgICBrdWVySW5w -dXRzLmZvckVhY2goZnVuY3Rpb24oaW5wKSB7CiAgICAgICAgICAgICAgICBpZiAoZmVobGVyKSBy -ZXR1cm47CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoaW5wLmdldEF0dHJpYnV0 -ZSgnZGF0YS1pZHgnKSk7CiAgICAgICAgICAgICAgICB2YXIgYWx0S3VlcnplbCA9IGlucC5nZXRB -dHRyaWJ1dGUoJ2RhdGEtYWx0Jyk7CiAgICAgICAgICAgICAgICB2YXIgbmV1S3VlcnplbCA9IGlu -cC52YWx1ZS50cmltKCk7CiAgICAgICAgICAgICAgICBpZiAoaXNOYU4oaWR4KSB8fCAhbmV1ZUdy -W2lkeF0pIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICghbmV1S3VlcnplbCkgeyBmZWhsZXIg -PSAnS8O8cnplbCBkYXJmIG5pY2h0IGxlZXIgc2VpbiAoWmVpbGUgJyArIChpZHggKyAxKSArICcp -JzsgcmV0dXJuOyB9CiAgICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlQ2hlY2tbbmV1S3Vlcnpl -bF0pIHsgZmVobGVyID0gJ0vDvHJ6ZWwgIicgKyBuZXVLdWVyemVsICsgJyIgaXN0IG1laHJmYWNo -IHZlcmdlYmVuJzsgcmV0dXJuOyB9CiAgICAgICAgICAgICAgICBkdXBsaWNhdGVDaGVja1tuZXVL -dWVyemVsXSA9IHRydWU7CiAgICAgICAgICAgICAgICAvLyBSZW5hbWUgbnVyIHdlbm4gZXMgZWlu -IGVjaHRlcyBhbHRlcyBLdWVyemVsIGdhYiDigJQgbmV1ZSBHcnVwcGVuIChhbHRLdWVyemVsID09 -PSAnJykKICAgICAgICAgICAgICAgIC8vIGJyYXVjaGVuIGtlaW5lbiBDYXNjYWRlLgogICAgICAg -ICAgICAgICAgaWYgKGFsdEt1ZXJ6ZWwgJiYgbmV1S3VlcnplbCAhPT0gYWx0S3VlcnplbCkgcmVu -YW1lTWFwW2FsdEt1ZXJ6ZWxdID0gbmV1S3VlcnplbDsKICAgICAgICAgICAgICAgIG5ldWVHcltp -ZHhdLm5hbWUgPSBuZXVLdWVyemVsOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKGZl -aGxlcikgeyB0b2FzdChmZWhsZXIsICd3YXJudW5nJyk7IHJldHVybjsgfQoKICAgICAgICAgICAg -YmV6SW5wdXRzLmZvckVhY2goZnVuY3Rpb24oaW5wKSB7CiAgICAgICAgICAgICAgICB2YXIgaWR4 -ID0gcGFyc2VJbnQoaW5wLmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSk7CiAgICAgICAgICAgICAg -ICBpZiAoIWlzTmFOKGlkeCkgJiYgbmV1ZUdyW2lkeF0pIG5ldWVHcltpZHhdLmJlemVpY2hudW5n -ID0gaW5wLnZhbHVlLnRyaW0oKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGhnSW5wdXRz -LmZvckVhY2goZnVuY3Rpb24oaW5wKSB7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gcGFyc2VJ -bnQoaW5wLmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSk7CiAgICAgICAgICAgICAgICBpZiAoIWlz -TmFOKGlkeCkgJiYgbmV1ZUdyW2lkeF0pIG5ldWVHcltpZHhdLmhpbnRlcmdydW5kID0gaW5wLnZh -bHVlOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgc2ZJbnB1dHMuZm9yRWFjaChmdW5jdGlv -bihpbnApIHsKICAgICAgICAgICAgICAgIHZhciBpZHggPSBwYXJzZUludChpbnAuZ2V0QXR0cmli -dXRlKCdkYXRhLWlkeCcpKTsKICAgICAgICAgICAgICAgIGlmICghaXNOYU4oaWR4KSAmJiBuZXVl -R3JbaWR4XSkgbmV1ZUdyW2lkeF0uc2NocmlmdCA9IGlucC52YWx1ZTsKICAgICAgICAgICAgfSk7 -CiAgICAgICAgICAgIC8vICJJbiBQbGFudW5nIHNpY2h0YmFyIi1DaGVja2JveCBlaW5sZXNlbiAo -RGVmYXVsdCB0cnVlKS4KICAgICAgICAgICAgdmFyIGlucGxJbnB1dHMgPSBkb2N1bWVudC5xdWVy -eVNlbGVjdG9yQWxsKCcuZ3J1cHBlLWlucGxhbnVuZy1pbnB1dCcpOwogICAgICAgICAgICBpbnBs -SW5wdXRzLmZvckVhY2goZnVuY3Rpb24oaW5wKSB7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0g -cGFyc2VJbnQoaW5wLmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSk7CiAgICAgICAgICAgICAgICBp -ZiAoIWlzTmFOKGlkeCkgJiYgbmV1ZUdyW2lkeF0pIG5ldWVHcltpZHhdLmluUGxhbnVuZyA9ICEh -aW5wLmNoZWNrZWQ7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvLyAiQW5zcHJlY2hwYXJ0 -bmVyIG3DtmdsaWNoIi1DaGVja2JveCBlaW5sZXNlbiAoRGVmYXVsdCB0cnVlKS4KICAgICAgICAg -ICAgLy8gUGVuZGFudCB6dXIgaW5QbGFudW5nLUxvZ2lrOiBzdGV1ZXJ0LCBvYiBQZXJzb25lbiBk -aWVzZXIgR3J1cHBlCiAgICAgICAgICAgIC8vIGltIFBlcnNvbmFsLVRhYiBhbHMgQW5zcHJlY2hw -YXJ0bmVyIG1hcmtpZXJ0IHdlcmRlbiBkdWVyZmVuCiAgICAgICAgICAgIC8vIHVuZCBpbSBJbmZv -LU1vZGFsIG1pdCBNYWlsLUJ1dHRvbiBlcnNjaGVpbmVuLgogICAgICAgICAgICB2YXIgZGFyZkFw -SW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdydXBwZS1kYXJmYXAtaW5wdXQn -KTsKICAgICAgICAgICAgZGFyZkFwSW5wdXRzLmZvckVhY2goZnVuY3Rpb24oaW5wKSB7CiAgICAg +LmdiLWJ0bicpOwogICAgICAgICAgICBpZiAoIWJ0bikgcmV0dXJuOwogICAgICAgICAgICB2YXIg +dHlwID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1nYi10eXAnKTsKICAgICAgICAgICAgdmFyIHdl +cnQgPSBwYXJzZUludChidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWdiLXdlcnQnKSwgMTApOwogICAg +ICAgICAgICBnZWJ1cnRzdGFnTW9kYWxLbGljayh0eXAsIHdlcnQpOwogICAgICAgIH0pOwoKICAg +IH0KCiAgICBmdW5jdGlvbiBhZG1pbkxpc3RlbmVyRWlucmljaHRlbigpIHsKICAgICAgICAvLyA9 +PT09PSBBZG1pbiBFdmVudHMgPT09PT0KCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo +J2J0bi1wZXJzb24tbmV1JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBwZXJzb25OZXVEaWFs +b2cpOwogICAgICAgIHZhciBidG5Tb3J0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1t +YW51ZWxsZS1zb3J0aWVydW5nJyk7CiAgICAgICAgaWYgKGJ0blNvcnQpIGJ0blNvcnQuYWRkRXZl +bnRMaXN0ZW5lcignY2xpY2snLCBtYW51ZWxsZVNvcnRpZXJ1bmdEaWFsb2cpOwoKICAgICAgICAv +LyBFaW5mYWNoLUtsaWNrIGF1ZiBpbmxpbmUtbWFya2llcnRlIERhdGVuLVplbGxlbi4gQnV0dG9u +cyBpbiBkZXJzZWxiZW4KICAgICAgICAvLyBaZWlsZSBoYWJlbiBkYXRhLWFrdGlvbiArIHdlcmRl +biBpbSB6d2VpdGVuIENsaWNrLUhhbmRsZXIgYXVzZ2V3ZXJ0ZXQsCiAgICAgICAgLy8gZG9ydCBn +ZXdpbm50IGRlciBCdXR0b24gKGVpZ2VuZXIgY2xvc2VzdCgpIG1hdGNoKS4KICAgICAgICBkb2N1 +bWVudC5nZXRFbGVtZW50QnlJZCgncGVyc29uYWwtdGJvZHknKS5hZGRFdmVudExpc3RlbmVyKCdj +bGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgLy8gV2VubiBlaW4gQWt0aW9ucy1CdXR0 +b24gZ2V0cm9mZmVuIHdpcmQsIE5JQ0hUIGFscyBJbmxpbmUtS2xpY2sgd2VydGVuLgogICAgICAg +ICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdCgnYnV0dG9uW2RhdGEtYWt0aW9uXScpKSByZXR1cm47 +CiAgICAgICAgICAgIHZhciBpbmxpbmUgPSBlLnRhcmdldC5jbG9zZXN0KCcucGVyc29uYWwtaW5s +aW5lJyk7CiAgICAgICAgICAgIGlmICghaW5saW5lKSByZXR1cm47CiAgICAgICAgICAgIHBlcnNv +bmFsRmVsZElubGluZUVkaXQocGFyc2VJbnQoaW5saW5lLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcp +LCAxMCksIGlubGluZSk7CiAgICAgICAgfSk7CgogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC +eUlkKCdwZXJzb25hbC10Ym9keScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24o +ZSkgewogICAgICAgICAgICB2YXIgcmFuZ1NwYW4gPSBlLnRhcmdldC5jbG9zZXN0KCcucmFuZy1l +ZGl0Jyk7CiAgICAgICAgICAgIGlmIChyYW5nU3BhbikgewogICAgICAgICAgICAgICAgcmFuZ0lu +bGluZUVkaXQocGFyc2VJbnQocmFuZ1NwYW4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyksIDEwKSwg +cmFuZ1NwYW4pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAg +ICAgIHZhciBmdW5rU3BhbiA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5mdW5rdGlvbi1lZGl0Jyk7CiAg +ICAgICAgICAgIGlmIChmdW5rU3BhbikgewogICAgICAgICAgICAgICAgZnVua3Rpb25JbmxpbmVF +ZGl0KHBhcnNlSW50KGZ1bmtTcGFuLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpLCAxMCksIGZ1bmtT +cGFuKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2 +YXIgZGdyZFNwYW4gPSBlLnRhcmdldC5jbG9zZXN0KCcuZGllbnN0Z3JhZC1lZGl0Jyk7CiAgICAg +ICAgICAgIGlmIChkZ3JkU3BhbikgewogICAgICAgICAgICAgICAgZGllbnN0Z3JhZElubGluZUVk +aXQocGFyc2VJbnQoZGdyZFNwYW4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyksIDEwKSwgZGdyZFNw +YW4pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZh +ciBlbGRnbENlbGwgPSBlLnRhcmdldC5jbG9zZXN0KCcuZWxkZ2wtZWRpdCcpOwogICAgICAgICAg +ICBpZiAoZWxkZ2xDZWxsKSB7CiAgICAgICAgICAgICAgICBlbGRnbElubGluZVRvZ2dsZShwYXJz +ZUludChlbGRnbENlbGwuZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyksIDEwKSk7CiAgICAgICAgICAg +ICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGFwQ2VsbCA9IGUudGFy +Z2V0LmNsb3Nlc3QoJy5hbnNwcmVjaHBhcnRuZXItZWRpdCcpOwogICAgICAgICAgICBpZiAoYXBD +ZWxsKSB7CiAgICAgICAgICAgICAgICBhbnNwcmVjaHBhcnRuZXJJbmxpbmVUb2dnbGUocGFyc2VJ +bnQoYXBDZWxsLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpLCAxMCkpOwogICAgICAgICAgICAgICAg +cmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBpcENlbGwgPSBlLnRhcmdldC5j +bG9zZXN0KCcuaW5wbGFudW5nLWVkaXQnKTsKICAgICAgICAgICAgaWYgKGlwQ2VsbCkgewogICAg +ICAgICAgICAgICAgaW5QbGFudW5nSW5saW5lVG9nZ2xlKHBhcnNlSW50KGlwQ2VsbC5nZXRBdHRy +aWJ1dGUoJ2RhdGEtaWQnKSwgMTApKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg +ICAgfQogICAgICAgICAgICB2YXIgbmFtZUxpbmsgPSBlLnRhcmdldC5jbG9zZXN0KCcucGVyc29u +LW5hbWUtbGluaycpOwogICAgICAgICAgICBpZiAobmFtZUxpbmspIHsKICAgICAgICAgICAgICAg +IHBlcnNvbkJlYXJiZWl0ZW5EaWFsb2cocGFyc2VJbnQobmFtZUxpbmsuZ2V0QXR0cmlidXRlKCdk +YXRhLWlkJyksIDEwKSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAg +ICAgICAgICAgdmFyIGJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJ2J1dHRvbicpOwogICAgICAgICAg +ICBpZiAoIWJ0bikgcmV0dXJuOwogICAgICAgICAgICB2YXIgaWQgPSBwYXJzZUludChidG4uZ2V0 +QXR0cmlidXRlKCdkYXRhLWlkJykpOwogICAgICAgICAgICB2YXIgYWt0aW9uID0gYnRuLmdldEF0 +dHJpYnV0ZSgnZGF0YS1ha3Rpb24nKTsKICAgICAgICAgICAgaWYgKGFrdGlvbiA9PT0gJ2JlYXJi +ZWl0ZW4nKSBwZXJzb25CZWFyYmVpdGVuRGlhbG9nKGlkKTsKICAgICAgICAgICAgZWxzZSBpZiAo +YWt0aW9uID09PSAncGVyc29uLXRlc3RlbicpIGltcGVyc29uYXRlUGVyc29uKGlkKTsKICAgICAg +ICAgICAgZWxzZSBpZiAoYWt0aW9uID09PSAnZW1haWwnKSBwZXJzb25FbWFpbERpYWxvZyhpZCk7 +CiAgICAgICAgICAgIGVsc2UgaWYgKGFrdGlvbiA9PT0gJ3Vtc2V0emVuJykgewogICAgICAgICAg +ICAgICAgYmVzdGFldGlnZW4oJ1BlcnNvbiBhdXMgZGVyIFBsYW51bmcgZW50ZmVybmVuPyBCZXN0 +ZWhlbmRlIEVpbnRyw6RnZSBibGVpYmVuIGVyaGFsdGVuIHVuZCBrw7ZubmVuIHBlciDigJ5VbWdl +c2V0enRlIGVpbmJsZW5kZW4iIHdpZWRlciBzaWNodGJhciBnZW1hY2h0IHdlcmRlbi4nLCBmdW5j +dGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBwZXJzb25TdGF0dXNTZXR6ZW4oaWQsIGZhbHNl +KTsKICAgICAgICAgICAgICAgIH0sIHsgdGl0ZWw6ICdQZXJzb24gdW1zZXR6ZW4nLCBqYVRleHQ6 +ICdVbXNldHplbicgfSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWt0aW9uID09PSAncmVha3Rp +dmllcmVuJykgewogICAgICAgICAgICAgICAgcGVyc29uU3RhdHVzU2V0emVuKGlkLCB0cnVlKTsK +ICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBQYXBpZXJrb3JiLUxpZmVjeWNsZSAoQ2hlcnJ5 +LVBpY2sgMzAwOWVhOCwgaGludGVyIFRvZ2dsZSBgZmVhdHVyZXMucGFwaWVya29yYlVJYCkuCiAg +ICAgICAgICAgIGVsc2UgaWYgKGFrdGlvbiA9PT0gJ2luLXBhcGllcmtvcmInKSB7CiAgICAgICAg +ICAgICAgICB2YXIgdGFnZSA9IFouYWRtaW4ucGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1bmcgIT0g +bnVsbCA/IFouYWRtaW4ucGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1bmcgOiAzMDsKICAgICAgICAg +ICAgICAgIGJlc3RhZXRpZ2VuKCdQZXJzb24gaW4gZGVuIFBhcGllcmtvcmIgdmVyc2NoaWViZW4/ +XG5cblNpZSB3aXJkIG5hY2ggJyArIHRhZ2UgKyAnIFRhZ2VuIGF1dG9tYXRpc2NoIGVuZGfDvGx0 +aWcgZ2Vsw7ZzY2h0LiBCaXMgZGFoaW4ga2FubiBzaWUgd2llZGVyaGVyZ2VzdGVsbHQgd2VyZGVu +LicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGFwaURlbGV0ZSgnL2FwaS9wZXJz +b25lbi8nICsgaWQpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZh +ciBwID0gWi5wbGFudW5nLnBlcnNvbmVuLmZpbmQoZnVuY3Rpb24oeCkgeyByZXR1cm4geC5pZCA9 +PT0gaWQ7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocCkgcC5nZWxvZXNjaHRBbSA9 +IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29u +ZW5OZXVBdWZiYXVlbigpOwogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hbFRhYmVsbGVS +ZW5kZXJuKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZW5SZW5kZXJu +ID09PSAnZnVuY3Rpb24nKSB7IG5hbWVuUmVuZGVybigpOyBkYXRlbkdyaWRSZW5kZXJuKCk7IGtv +cGZSZW5kZXJuKCk7IH0KICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ1BlcnNvbiBpbiBQ +YXBpZXJrb3JiIHZlcnNjaG9iZW4nLCAnZXJmb2xnJyk7CiAgICAgICAgICAgICAgICAgICAgfSku +Y2F0Y2goZnVuY3Rpb24oZSkgeyB0b2FzdCgnRmVobGVyOiAnICsgZS5tZXNzYWdlLCAnZmVobGVy +Jyk7IH0pOwogICAgICAgICAgICAgICAgfSwgeyB0aXRlbDogJ0luIFBhcGllcmtvcmInLCBqYVRl +eHQ6ICdJbiBQYXBpZXJrb3JiJywgamFEYW5nZXI6IHRydWUgfSk7CiAgICAgICAgICAgIH0gZWxz +ZSBpZiAoYWt0aW9uID09PSAnd2llZGVyaGVyc3RlbGxlbicpIHsKICAgICAgICAgICAgICAgIGFw +aVB1dCgnL2FwaS9wZXJzb25lbi8nICsgaWQsIHsgZ2Vsb2VzY2h0QW06IG51bGwsIGFrdGl2OiB0 +cnVlIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBaLnBs +YW51bmcucGVyc29uZW4uZmluZChmdW5jdGlvbih4KSB7IHJldHVybiB4LmlkID09PSBpZDsgfSk7 +CiAgICAgICAgICAgICAgICAgICAgaWYgKHApIHsgcC5nZWxvZXNjaHRBbSA9IG51bGw7IHAuYWt0 +aXYgPSB0cnVlOyB9CiAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5OZXVBdWZiYXVlbigpOwog +ICAgICAgICAgICAgICAgICAgIHBlcnNvbmFsVGFiZWxsZVJlbmRlcm4oKTsKICAgICAgICAgICAg +ICAgICAgICBpZiAodHlwZW9mIG5hbWVuUmVuZGVybiA9PT0gJ2Z1bmN0aW9uJykgeyBuYW1lblJl +bmRlcm4oKTsgZGF0ZW5HcmlkUmVuZGVybigpOyBrb3BmUmVuZGVybigpOyB9CiAgICAgICAgICAg +ICAgICAgICAgdG9hc3QoJ1BlcnNvbiB3aWVkZXJoZXJnZXN0ZWxsdCcsICdlcmZvbGcnKTsKICAg +ICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsgdG9hc3QoJ0ZlaGxlcjogJyArIGUu +bWVzc2FnZSwgJ2ZlaGxlcicpOyB9KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChha3Rpb24gPT09 +ICdlbmRndWVsdGlnLWxvZXNjaGVuJykgewogICAgICAgICAgICAgICAgYmVzdGFldGlnZW4oJ1Bl +cnNvbiBFTkRHw5xMVElHIGzDtnNjaGVuP1xuXG5FaW50csOkZ2UgaW4gZGVyIFBsYW51bmcgdmVy +d2Fpc2VuIChibGVpYmVuIGFiZXIgdGVjaG5pc2NoIGVyaGFsdGVuKS4gTG9nYnVjaC0gdW5kIFN0 +YXRpc3Rpay1IaXN0b3JpZSBibGVpYmVuIHNpY2h0YmFyLiBEaWVzZSBBa3Rpb24ga2FubiBuaWNo +dCByw7xja2fDpG5naWcgZ2VtYWNodCB3ZXJkZW4uJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAg +ICAgICAgICAgYXBpRGVsZXRlKCcvYXBpL3BlcnNvbmVuLycgKyBpZCArICc/ZW5kZ3VlbHRpZz0x +JykudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgWi5wbGFudW5nLnBl +cnNvbmVuID0gKFoucGxhbnVuZy5wZXJzb25lbiB8fCBbXSkuZmlsdGVyKGZ1bmN0aW9uKHgpIHsg +cmV0dXJuIHguaWQgIT09IGlkOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5O +ZXVBdWZiYXVlbigpOwogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hbFRhYmVsbGVSZW5k +ZXJuKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZW5SZW5kZXJuID09 +PSAnZnVuY3Rpb24nKSB7IG5hbWVuUmVuZGVybigpOyBkYXRlbkdyaWRSZW5kZXJuKCk7IGtvcGZS +ZW5kZXJuKCk7IH0KICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ1BlcnNvbiBlbmRnw7xs +dGlnIGdlbMO2c2NodCcsICdlcmZvbGcnKTsKICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChm +dW5jdGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7 +CiAgICAgICAgICAgICAgICB9LCB7IHRpdGVsOiAnRW5kZ8O8bHRpZyBsw7ZzY2hlbicsIGphVGV4 +dDogJ0VuZGfDvGx0aWcgbMO2c2NoZW4nLCBqYURhbmdlcjogdHJ1ZSB9KTsKICAgICAgICAgICAg +fQogICAgICAgIH0pOwoKICAgICAgICB2YXIgZmlsdGVyQ2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVu +dEJ5SWQoJ2FkbWluLXBlcnNvbmFsLWZpbHRlcicpOwogICAgICAgIGlmIChmaWx0ZXJDaGspIGZp +bHRlckNoay5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBwZXJzb25hbFRhYmVsbGVSZW5kZXJu +KTsKICAgICAgICB2YXIgcGFwaWVya29yYkZpbHRlckNoayA9IGRvY3VtZW50LmdldEVsZW1lbnRC +eUlkKCdhZG1pbi1wYXBpZXJrb3JiLWZpbHRlcicpOwogICAgICAgIGlmIChwYXBpZXJrb3JiRmls +dGVyQ2hrKSBwYXBpZXJrb3JiRmlsdGVyQ2hrLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHBl +cnNvbmFsVGFiZWxsZVJlbmRlcm4pOwoKICAgICAgICB2YXIgdW1nQ2hrID0gZG9jdW1lbnQuZ2V0 +RWxlbWVudEJ5SWQoJ2Noay11bWdlc2V0enRlLWVpbmJsZW5kZW4nKTsKICAgICAgICBpZiAodW1n +Q2hrKSB1bWdDaGsuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAg +ICAgICAgIFoudW1nZXNldHp0ZUVpbmJsZW5kZW4gPSB1bWdDaGsuY2hlY2tlZDsKICAgICAgICAg +ICAgcGVyc29uZW5OZXVBdWZiYXVlbigpOwogICAgICAgICAgICBuYW1lblJlbmRlcm4oKTsKICAg +ICAgICAgICAgZGF0ZW5HcmlkUmVuZGVybigpOwogICAgICAgICAgICBrb3BmUmVuZGVybigpOwog +ICAgICAgIH0pOwoKICAgICAgICAvLyBTdGFuZG9ydGUKICAgICAgICB2YXIgYnRuU3ROZXUgPSBk +b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXN0YW5kb3J0LW5ldScpOwogICAgICAgIGlmIChi +dG5TdE5ldSkgYnRuU3ROZXUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsK +ICAgICAgICAgICAgWi5hZG1pbi5zdGFuZG9ydGUgPSBaLmFkbWluLnN0YW5kb3J0ZSB8fCBbXTsK +ICAgICAgICAgICAgWi5hZG1pbi5zdGFuZG9ydGUucHVzaCh7IG5hbWU6ICdOZXVlciBTdGFuZG9y +dCcsIGt1ZXJ6ZWw6ICcnLCBpc3RQb29sOiB0cnVlIH0pOwogICAgICAgICAgICBzdGFuZG9ydGVS +ZW5kZXJuKCk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHN0VGJvZHkgPSBkb2N1bWVudC5nZXRF +bGVtZW50QnlJZCgnc3RhbmRvcnRlLXRib2R5Jyk7CiAgICAgICAgaWYgKHN0VGJvZHkpIHN0VGJv +ZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZh +ciBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCdidXR0b24nKTsKICAgICAgICAgICAgaWYgKCFidG4p +IHJldHVybjsKICAgICAgICAgICAgdmFyIGlkeCA9IHBhcnNlSW50KGJ0bi5nZXRBdHRyaWJ1dGUo +J2RhdGEtaWR4JykpOwogICAgICAgICAgICB2YXIgYWt0aW9uID0gYnRuLmdldEF0dHJpYnV0ZSgn +ZGF0YS1ha3Rpb24nKTsKICAgICAgICAgICAgaWYgKGFrdGlvbiA9PT0gJ3N0YW5kb3J0LWxvZXNj +aGVuJykgewogICAgICAgICAgICAgICAgdmFyIHN0TmFtZSA9IFouYWRtaW4uc3RhbmRvcnRlW2lk +eF0ubmFtZSB8fCAnJzsKICAgICAgICAgICAgICAgIGJlc3RhZXRpZ2VuKCdTdGFuZG9ydCDigJ4n +ICsgc3ROYW1lICsgJyIgd2lya2xpY2ggbMO2c2NoZW4/JywgZnVuY3Rpb24oKSB7CiAgICAgICAg +ICAgICAgICAgICAgWi5hZG1pbi5zdGFuZG9ydGUuc3BsaWNlKGlkeCwgMSk7CiAgICAgICAgICAg +ICAgICAgICAgc3RhbmRvcnRlUmVuZGVybigpOwogICAgICAgICAgICAgICAgfSwgeyB0aXRlbDog +J1N0YW5kb3J0IGzDtnNjaGVuJywgamFEYW5nZXI6IHRydWUgfSk7CiAgICAgICAgICAgIH0gZWxz +ZSBpZiAoYWt0aW9uID09PSAnc3RhbmRvcnQtcmh5dGhtdXMnKSB7CiAgICAgICAgICAgICAgICBy +aHl0aG11c0dlbmVyYXRvckRpYWxvZyhpZHgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAg +ICAgICAgdmFyIGJ0blN0U3BlaWNoZXJuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1z +dGFuZG9ydGUtc3BlaWNoZXJuJyk7CiAgICAgICAgaWYgKGJ0blN0U3BlaWNoZXJuKSBidG5TdFNw +ZWljaGVybi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAg +ICB2YXIgZGF0ZW4gPSBzdGFuZG9ydGVBdXNUYWJlbGxlTGVzZW4oKTsKICAgICAgICAgICAgYXBp +UHV0KCcvYXBpL2FkbWluL3N0YW5kb3J0ZScsIGRhdGVuKS50aGVuKGZ1bmN0aW9uKCkgewogICAg +ICAgICAgICAgICAgWi5hZG1pbi5zdGFuZG9ydGUgPSBkYXRlbjsKICAgICAgICAgICAgICAgIGtv +cGZSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICBkaXJ0eVNldHplbignc3RhbmRvcnRlJywgZmFs +c2UpOwogICAgICAgICAgICAgICAgdGFiRHJhZnRMb2VzY2hlbignc3RhbmRvcnRlJyk7CiAgICAg +ICAgICAgICAgICB0b2FzdCgnU3RhbmRvcnRlIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycpOwogICAg +ICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3Nh +Z2UsICdmZWhsZXInKTsgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIERpZW5zdGdydXBwZW4g +4oCUIEt1ZXJ6ZWwsIEJlemVpY2hudW5nLCBGYXJiZW4uIEJlaSBLdWVyemVsLUFlbmRlcnVuZwog +ICAgICAgIC8vIHdlcmRlbiBhbGxlIFBlcnNvbmVuIGRpZXNlciBHcnVwcGUgYXV0b21hdGlzY2gg +dW1nZXNjaHJpZWJlbgogICAgICAgIC8vIChjYXNjYWRlIHJlbmFtZSkuCiAgICAgICAgdmFyIGJ0 +bkdydU5ldSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tZ3J1cHBlbi1uZXUnKTsKICAg +ICAgICBpZiAoYnRuR3J1TmV1KSBidG5HcnVOZXUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBm +dW5jdGlvbigpIHsKICAgICAgICAgICAgWi5hZG1pbi5ncnVwcGVuID0gKFouYWRtaW4uZ3J1cHBl +biB8fCBbXSkuc2xpY2UoKTsKICAgICAgICAgICAgWi5hZG1pbi5ncnVwcGVuLnB1c2goeyBuYW1l +OiAnJywgYmV6ZWljaG51bmc6ICcnLCBoaW50ZXJncnVuZDogJyM1NDZFN0EnLCBzY2hyaWZ0OiAn +I0ZGRkZGRicgfSk7CiAgICAgICAgICAgIGdydXBwZW5UYWJlbGxlUmVuZGVybigpOwogICAgICAg +ICAgICAvLyBGb2t1cyBhdWYgZGFzIGdlcmFkZSBhbmdlbGVndGUgS3VlcnplbC1GZWxkCiAgICAg +ICAgICAgIHZhciBsZXR6dGVaZWlsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNncnVwcGVu +LXRib2R5IHRyOmxhc3QtY2hpbGQgLmdydXBwZS1rdWVyemVsLWlucHV0Jyk7CiAgICAgICAgICAg +IGlmIChsZXR6dGVaZWlsZSkgbGV0enRlWmVpbGUuZm9jdXMoKTsKICAgICAgICB9KTsKCiAgICAg +ICAgdmFyIGdydXBwZW5UYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncnVwcGVuLXRi +b2R5Jyk7CiAgICAgICAgaWYgKGdydXBwZW5UYm9keSkgZ3J1cHBlblRib2R5LmFkZEV2ZW50TGlz +dGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgYnRuU29ydCA9IGUu +dGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFrdGlvbj0iZ3J1cHBlLXJhdWYiXSxbZGF0YS1ha3Rpb249 +ImdydXBwZS1ydW50ZXIiXScpOwogICAgICAgICAgICBpZiAoYnRuU29ydCAmJiAhYnRuU29ydC5k +aXNhYmxlZCkgewogICAgICAgICAgICAgICAgdmFyIHNvcnRJZHggPSBwYXJzZUludChidG5Tb3J0 +LmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSwgMTApOwogICAgICAgICAgICAgICAgdmFyIHJhdWYg +PSBidG5Tb3J0LmdldEF0dHJpYnV0ZSgnZGF0YS1ha3Rpb24nKSA9PT0gJ2dydXBwZS1yYXVmJzsK +ICAgICAgICAgICAgICAgIHZhciB6aWVsSWR4ID0gcmF1ZiA/IHNvcnRJZHggLSAxIDogc29ydElk +eCArIDE7CiAgICAgICAgICAgICAgICB2YXIgZ3JwID0gWi5hZG1pbi5ncnVwcGVuOwogICAgICAg +ICAgICAgICAgaWYgKHppZWxJZHggPj0gMCAmJiB6aWVsSWR4IDwgZ3JwLmxlbmd0aCkgewogICAg +ICAgICAgICAgICAgICAgIHZhciB0bXAgPSBncnBbc29ydElkeF07CiAgICAgICAgICAgICAgICAg +ICAgZ3JwW3NvcnRJZHhdID0gZ3JwW3ppZWxJZHhdOwogICAgICAgICAgICAgICAgICAgIGdycFt6 +aWVsSWR4XSA9IHRtcDsKICAgICAgICAgICAgICAgICAgICBncnVwcGVuVGFiZWxsZVJlbmRlcm4o +KTsKICAgICAgICAgICAgICAgICAgICBkaXJ0eVNldHplbignZ3J1cHBlbicsIHRydWUpOwogICAg +ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAg +ICAgICAgIHZhciBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249ImdydXBwZS1s +b2VzY2hlbiJdJyk7CiAgICAgICAgICAgIGlmICghYnRuIHx8IGJ0bi5kaXNhYmxlZCkgcmV0dXJu +OwogICAgICAgICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1p +ZHgnKSwgMTApOwogICAgICAgICAgICB2YXIgZ3IgPSAoWi5hZG1pbi5ncnVwcGVuIHx8IFtdKVtp +ZHhdOwogICAgICAgICAgICBpZiAoIWdyKSByZXR1cm47CiAgICAgICAgICAgIC8vIERvcHBlbHRl +IFNpY2hlcmhlaXQ6IFBlcnNvbmVuLVphZWhsdW5nIGVybmV1dCBwcnVlZmVuCiAgICAgICAgICAg +IHZhciB6YWVobCA9IGdydXBwZW5QZXJzb25lblphZWhsZW4oKTsKICAgICAgICAgICAgaWYgKCh6 +YWVobFtnci5uYW1lXSB8fCAwKSA+IDApIHsKICAgICAgICAgICAgICAgIHRvYXN0KCdHcnVwcGUg +IicgKyBnci5uYW1lICsgJyIgaGF0IG5vY2ggJyArIHphZWhsW2dyLm5hbWVdICsgJyBha3RpdmUg +UGVyc29uZW4g4oCUIGthbm4gbmljaHQgZ2Vsw7ZzY2h0IHdlcmRlbicsICd3YXJudW5nJyk7CiAg +ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYmVzdGFldGln +ZW4oJ0RpZW5zdGdydXBwZSAiJyArIGdyLm5hbWUgKyAnIiAoJyArIChnci5iZXplaWNobnVuZyB8 +fCAnJykgKyAnKSB3aXJrbGljaCBsw7ZzY2hlbj9cblxuRGllIEdydXBwZSB3aXJkIG5pY2h0IGF1 +cyBQZXJzb25lbi1FaW50csOkZ2VuIGVudGZlcm50LCBkaWUgc2llIGJlcmVpdHMgZ2VudXR6dCBo +YWJlbiAoYWt0dWVsbDoga2VpbmUpIOKAlCBudXIgYXVzIGRlciBBZG1pbi1MaXN0ZS4nLCBmdW5j +dGlvbigpIHsKICAgICAgICAgICAgICAgIFouYWRtaW4uZ3J1cHBlbi5zcGxpY2UoaWR4LCAxKTsK +ICAgICAgICAgICAgICAgIGdydXBwZW5UYWJlbGxlUmVuZGVybigpOwogICAgICAgICAgICAgICAg +dG9hc3QoJ0dydXBwZSBsb2thbCBlbnRmZXJudCDigJQgamV0enQgIlNwZWljaGVybiIgZHLDvGNr +ZW4nLCAnaW5mbycpOwogICAgICAgICAgICB9LCB7IHRpdGVsOiAnR3J1cHBlIGzDtnNjaGVuJywg +amFEYW5nZXI6IHRydWUgfSk7CiAgICAgICAgfSk7CgogICAgICAgIHZhciBidG5HcnVTcGVpY2hl +cm4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWdydXBwZW4tc3BlaWNoZXJuJyk7CiAg +ICAgICAgaWYgKGJ0bkdydVNwZWljaGVybikgYnRuR3J1U3BlaWNoZXJuLmFkZEV2ZW50TGlzdGVu +ZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBrdWVySW5wdXRzID0gZG9j +dW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdydXBwZS1rdWVyemVsLWlucHV0Jyk7CiAgICAgICAg +ICAgIHZhciBiZXpJbnB1dHMgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdydXBwZS1i +ZXotaW5wdXQnKTsKICAgICAgICAgICAgdmFyIGhnSW5wdXRzICAgPSBkb2N1bWVudC5xdWVyeVNl +bGVjdG9yQWxsKCcuZ3J1cHBlLWhnLWlucHV0Jyk7CiAgICAgICAgICAgIHZhciBzZklucHV0cyAg +ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdydXBwZS1zZi1pbnB1dCcpOwogICAgICAg +ICAgICB2YXIgbmV1ZUdyID0gKFouYWRtaW4uZ3J1cHBlbiB8fCBbXSkubWFwKGZ1bmN0aW9uKGcp +IHsgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGcpOyB9KTsKICAgICAgICAgICAgdmFyIHJlbmFt +ZU1hcCA9IHt9OyAgICAgLy8gYWx0ZXNLdWVyemVsIC0+IG5ldWVzS3VlcnplbAogICAgICAgICAg +ICB2YXIgZHVwbGljYXRlQ2hlY2sgPSB7fTsKICAgICAgICAgICAgdmFyIGZlaGxlciA9IG51bGw7 +CgogICAgICAgICAgICBrdWVySW5wdXRzLmZvckVhY2goZnVuY3Rpb24oaW5wKSB7CiAgICAgICAg +ICAgICAgICBpZiAoZmVobGVyKSByZXR1cm47CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gcGFy +c2VJbnQoaW5wLmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSk7CiAgICAgICAgICAgICAgICB2YXIg +YWx0S3VlcnplbCA9IGlucC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYWx0Jyk7CiAgICAgICAgICAgICAg +ICB2YXIgbmV1S3VlcnplbCA9IGlucC52YWx1ZS50cmltKCk7CiAgICAgICAgICAgICAgICBpZiAo +aXNOYU4oaWR4KSB8fCAhbmV1ZUdyW2lkeF0pIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICgh +bmV1S3VlcnplbCkgeyBmZWhsZXIgPSAnS8O8cnplbCBkYXJmIG5pY2h0IGxlZXIgc2VpbiAoWmVp +bGUgJyArIChpZHggKyAxKSArICcpJzsgcmV0dXJuOyB9CiAgICAgICAgICAgICAgICBpZiAoZHVw +bGljYXRlQ2hlY2tbbmV1S3VlcnplbF0pIHsgZmVobGVyID0gJ0vDvHJ6ZWwgIicgKyBuZXVLdWVy +emVsICsgJyIgaXN0IG1laHJmYWNoIHZlcmdlYmVuJzsgcmV0dXJuOyB9CiAgICAgICAgICAgICAg +ICBkdXBsaWNhdGVDaGVja1tuZXVLdWVyemVsXSA9IHRydWU7CiAgICAgICAgICAgICAgICAvLyBS +ZW5hbWUgbnVyIHdlbm4gZXMgZWluIGVjaHRlcyBhbHRlcyBLdWVyemVsIGdhYiDigJQgbmV1ZSBH +cnVwcGVuIChhbHRLdWVyemVsID09PSAnJykKICAgICAgICAgICAgICAgIC8vIGJyYXVjaGVuIGtl +aW5lbiBDYXNjYWRlLgogICAgICAgICAgICAgICAgaWYgKGFsdEt1ZXJ6ZWwgJiYgbmV1S3Vlcnpl +bCAhPT0gYWx0S3VlcnplbCkgcmVuYW1lTWFwW2FsdEt1ZXJ6ZWxdID0gbmV1S3VlcnplbDsKICAg +ICAgICAgICAgICAgIG5ldWVHcltpZHhdLm5hbWUgPSBuZXVLdWVyemVsOwogICAgICAgICAgICB9 +KTsKICAgICAgICAgICAgaWYgKGZlaGxlcikgeyB0b2FzdChmZWhsZXIsICd3YXJudW5nJyk7IHJl +dHVybjsgfQoKICAgICAgICAgICAgYmV6SW5wdXRzLmZvckVhY2goZnVuY3Rpb24oaW5wKSB7CiAg +ICAgICAgICAgICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoaW5wLmdldEF0dHJpYnV0ZSgnZGF0YS1p +ZHgnKSk7CiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKGlkeCkgJiYgbmV1ZUdyW2lkeF0pIG5l +dWVHcltpZHhdLmJlemVpY2hudW5nID0gaW5wLnZhbHVlLnRyaW0oKTsKICAgICAgICAgICAgfSk7 +CiAgICAgICAgICAgIGhnSW5wdXRzLmZvckVhY2goZnVuY3Rpb24oaW5wKSB7CiAgICAgICAgICAg +ICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoaW5wLmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSk7CiAg +ICAgICAgICAgICAgICBpZiAoIWlzTmFOKGlkeCkgJiYgbmV1ZUdyW2lkeF0pIG5ldWVHcltpZHhd +LmhpbnRlcmdydW5kID0gaW5wLnZhbHVlOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgc2ZJ +bnB1dHMuZm9yRWFjaChmdW5jdGlvbihpbnApIHsKICAgICAgICAgICAgICAgIHZhciBpZHggPSBw +YXJzZUludChpbnAuZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpKTsKICAgICAgICAgICAgICAgIGlm +ICghaXNOYU4oaWR4KSAmJiBuZXVlR3JbaWR4XSkgbmV1ZUdyW2lkeF0uc2NocmlmdCA9IGlucC52 +YWx1ZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vICJJbiBQbGFudW5nIHNpY2h0YmFy +Ii1DaGVja2JveCBlaW5sZXNlbiAoRGVmYXVsdCB0cnVlKS4KICAgICAgICAgICAgdmFyIGlucGxJ +bnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZ3J1cHBlLWlucGxhbnVuZy1pbnB1 +dCcpOwogICAgICAgICAgICBpbnBsSW5wdXRzLmZvckVhY2goZnVuY3Rpb24oaW5wKSB7CiAgICAg ICAgICAgICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoaW5wLmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgn KSk7CiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKGlkeCkgJiYgbmV1ZUdyW2lkeF0pIG5ldWVH -cltpZHhdLmRhcmZBbnNwcmVjaHBhcnRuZXIgPSAhIWlucC5jaGVja2VkOwogICAgICAgICAgICB9 -KTsKCiAgICAgICAgICAgIHZhciByZW5hbWVLZXlzID0gT2JqZWN0LmtleXMocmVuYW1lTWFwKTsK -ICAgICAgICAgICAgZnVuY3Rpb24gbmFjaFNwZWljaGVybigpIHsKICAgICAgICAgICAgICAgIFou -YWRtaW4uZ3J1cHBlbiA9IG5ldWVHcjsKICAgICAgICAgICAgICAgIFouZ3J1cHBlbk1hcCA9IHt9 -OwogICAgICAgICAgICAgICAgbmV1ZUdyLmZvckVhY2goZnVuY3Rpb24oZ3IpIHsKICAgICAgICAg -ICAgICAgICAgICBaLmdydXBwZW5NYXBbZ3IubmFtZV0gPSB7IGhpbnRlcmdydW5kOiBnci5oaW50 -ZXJncnVuZCwgc2NocmlmdDogZ3Iuc2NocmlmdCwgYmV6ZWljaG51bmc6IGdyLmJlemVpY2hudW5n -IH07CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIC8vIGluUGxhbnVuZy1GbGFn -IChvZGVyIFVtYmVuZW5udW5nKSBrYW5uIGRpZSBTaWNodGJhcmtlaXQKICAgICAgICAgICAgICAg -IC8vIGdhbnplciBHcnVwcGVuIHZlcmFlbmRlcm4g4oCUIFBlcnNvbmVuLUZpbHRlciBuZXUgZ3Jl -aWZlbgogICAgICAgICAgICAgICAgLy8gbGFzc2VuIHVuZCBQbGFudGFmZWwga29tcGxldHQgbmV1 -IGF1ZmJhdWVuLgogICAgICAgICAgICAgICAgcGVyc29uZW5OZXVBdWZiYXVlbigpOwogICAgICAg -ICAgICAgICAgaWYgKHR5cGVvZiBuYW1lblJlbmRlcm4gPT09ICdmdW5jdGlvbicpIG5hbWVuUmVu -ZGVybigpOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrb3BmUmVuZGVybiA9PT0gJ2Z1bmN0 -aW9uJykga29wZlJlbmRlcm4oKTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0ZW5Hcmlk -UmVuZGVybiA9PT0gJ2Z1bmN0aW9uJykgZGF0ZW5HcmlkUmVuZGVybigpOwogICAgICAgICAgICAg -ICAgcGVyc29uYWxUYWJlbGxlUmVuZGVybigpOwogICAgICAgICAgICAgICAgZ3J1cHBlblRhYmVs -bGVSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICB2YXIgc3VmZml4ID0gcmVuYW1lS2V5cy5sZW5n -dGggPyAnICgnICsgcmVuYW1lS2V5cy5sZW5ndGggKyAnIEvDvHJ6ZWwgdW1iZW5hbm50ICsgUGVy -c29uZW4gbWlncmllcnQpJyA6ICcnOwogICAgICAgICAgICAgICAgZGlydHlTZXR6ZW4oJ2dydXBw -ZW4nLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB0YWJEcmFmdExvZXNjaGVuKCdncnVwcGVuJyk7 -CiAgICAgICAgICAgICAgICB0b2FzdCgnRGllbnN0Z3J1cHBlbiBnZXNwZWljaGVydCcgKyBzdWZm -aXgsICdlcmZvbGcnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZnVuY3Rpb24gYXVzZnVl -aHJlbigpIHsKICAgICAgICAgICAgICAgIGFwaVB1dCgnL2FwaS9hZG1pbicsIE9iamVjdC5hc3Np -Z24oe30sIFouYWRtaW4sIHsgZ3J1cHBlbjogbmV1ZUdyIH0pKS50aGVuKGZ1bmN0aW9uKCkgewog -ICAgICAgICAgICAgICAgICAgIGlmICghcmVuYW1lS2V5cy5sZW5ndGgpIHsgbmFjaFNwZWljaGVy -bigpOyByZXR1cm47IH0KICAgICAgICAgICAgICAgICAgICAoWi5wbGFudW5nLnBlcnNvbmVuIHx8 -IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAu -Z3J1cHBlICYmIHJlbmFtZU1hcFtwLmdydXBwZV0pIHAuZ3J1cHBlID0gcmVuYW1lTWFwW3AuZ3J1 -cHBlXTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g -YXBpUHV0KCcvYXBpL3BsYW51bmcnLCBaLnBsYW51bmcpLnRoZW4obmFjaFNwZWljaGVybik7CiAg -ICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBl -Lm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEth -c2thZGVuLVdhcm51bmc6IHdlbm4gS3VlcnplbCB1bWJlbmFubnQgd2VyZGVuLCBzaW5kIEFMTEUK -ICAgICAgICAgICAgLy8gUGVyc29uZW4gbWl0IGRlbSBhbHRlbiBLdWVyemVsIGJldHJvZmZlbiDi -gJQgdm9yaGVyIHplaWdlbiwKICAgICAgICAgICAgLy8gd2llIHZpZWxlIGRhcyBzaW5kLCBiZXZv -ciBzdGlsbHNjaHdlaWdlbmQgbWlncmllcnQgd2lyZC4KICAgICAgICAgICAgLy8gYmVzdGFldGln -ZW4oKSBlc2NhcHQgSFRNTDsgbWl0IFxuIHVuZCBwcmUtbGluZSB3aXJkIGRlciBCbG9jawogICAg -ICAgICAgICAvLyB0cm90emRlbSBtZWhyemVpbGlnIGRhcmdlc3RlbGx0LgogICAgICAgICAgICBp -ZiAocmVuYW1lS2V5cy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhciBiZXRyb2ZmZW4gPSAw -OwogICAgICAgICAgICAgICAgdmFyIGRldGFpbHMgPSByZW5hbWVLZXlzLm1hcChmdW5jdGlvbihh -bHQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IChaLnBsYW51bmcucGVyc29uZW4gfHwg -W10pLmZpbHRlcihmdW5jdGlvbihwKSB7IHJldHVybiBwLmdydXBwZSA9PT0gYWx0OyB9KS5sZW5n -dGg7CiAgICAgICAgICAgICAgICAgICAgYmV0cm9mZmVuICs9IG47CiAgICAgICAgICAgICAgICAg -ICAgcmV0dXJuICcgIOKAoiAnICsgYWx0ICsgJyDihpIgJyArIHJlbmFtZU1hcFthbHRdICsgJyAg -KCcgKyBuICsgJyBQZXJzb24nICsgKG4gPT09IDEgPyAnJyA6ICdlbicpICsgJyknOwogICAgICAg -ICAgICAgICAgfSkuam9pbignXG4nKTsKICAgICAgICAgICAgICAgIGJlc3RhZXRpZ2VuKAogICAg -ICAgICAgICAgICAgICAgICdGb2xnZW5kZSBEaWVuc3RncnVwcGVuLUvDvHJ6ZWwgd2VyZGVuIHVt -YmVuYW5udCDigJQgYWxsZSB6dWdlb3JkbmV0ZW4gUGVyc29uZW4gd2VyZGVuIGF1dG9tYXRpc2No -IG1pZ3JpZXJ0OlxuXG4nICsKICAgICAgICAgICAgICAgICAgICBkZXRhaWxzICsKICAgICAgICAg -ICAgICAgICAgICAnXG5cbkluc2dlc2FtdCAnICsgYmV0cm9mZmVuICsgJyBQZXJzb24nICsgKGJl -dHJvZmZlbiA9PT0gMSA/ICcnIDogJ2VuJykgKyAnIGJldHJvZmZlbi4nLAogICAgICAgICAgICAg -ICAgICAgIGF1c2Z1ZWhyZW4sCiAgICAgICAgICAgICAgICAgICAgeyB0aXRlbDogJ0RpZW5zdGdy -dXBwZW4gdW1iZW5lbm5lbicsIGphVGV4dDogJ1Vtc2V0emVuJyB9CiAgICAgICAgICAgICAgICAp -OwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF1c2Z1 -ZWhyZW4oKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gRXhjZWwtSW1wb3J0CiAgICAgICAgdmFy -IGltcEZpbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1wLWRhdGVpJyk7CiAgICAgICAg -aWYgKGltcEZpbGUpIGltcEZpbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24o -ZSkgewogICAgICAgICAgICB2YXIgZiA9IGUudGFyZ2V0LmZpbGVzICYmIGUudGFyZ2V0LmZpbGVz -WzBdOwogICAgICAgICAgICBpZiAoZikgaW1wRGF0ZWlWZXJhcmJlaXRlbihmKTsKICAgICAgICB9 -KTsKCiAgICAgICAgLy8gQmV6ZWljaG51bmdlbgogICAgICAgIHZhciBidG5CZXpTcGVpY2hlcm4g -PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWJlemVpY2hudW5nZW4tc3BlaWNoZXJuJyk7 -CiAgICAgICAgaWYgKGJ0bkJlelNwZWljaGVybikgYnRuQmV6U3BlaWNoZXJuLmFkZEV2ZW50TGlz -dGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtYXAgPSBiZXplaWNo -bnVuZ2VuQXVzVGFiZWxsZUxlc2VuKCk7CiAgICAgICAgICAgIGFwaVB1dCgnL2FwaS9hZG1pbi9i -ZXplaWNobnVuZ2VuJywgbWFwKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgWi5h -ZG1pbi5iZXplaWNobnVuZ2VuID0gbWFwOwogICAgICAgICAgICAgICAgYmV6ZWljaG51bmdlbkFu -d2VuZGVuKCk7CiAgICAgICAgICAgICAgICBkaXJ0eVNldHplbignYmV6ZWljaG51bmdlbicsIGZh -bHNlKTsKICAgICAgICAgICAgICAgIHRvYXN0KCdCZXplaWNobnVuZ2VuIGdlc3BlaWNoZXJ0IOKA -lCBSZWxvYWQgZsO8ciBhbGxlIE51dHplciBuw7Z0aWcnLCAnZXJmb2xnJyk7CiAgICAgICAgICAg -IH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsgdG9hc3QoJ0ZlaGxlcjogJyArIGUubWVzc2FnZSwgJ2Zl -aGxlcicpOyB9KTsKICAgICAgICB9KTsKICAgICAgICB2YXIgYnRuQmV6UmVzZXQgPSBkb2N1bWVu -dC5nZXRFbGVtZW50QnlJZCgnYnRuLWJlemVpY2hudW5nZW4tcmVzZXQnKTsKICAgICAgICBpZiAo -YnRuQmV6UmVzZXQpIGJ0bkJlelJlc2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rp -b24oKSB7CiAgICAgICAgICAgIGJlc3RhZXRpZ2VuKCdBbGxlIGVpZ2VuZW4gQmV6ZWljaG51bmdl -biBsw7ZzY2hlbiB1bmQgYXVmIERlZmF1bHRzIHp1csO8Y2tzZXR6ZW4/JywgZnVuY3Rpb24oKSB7 -CiAgICAgICAgICAgICAgICBhcGlQdXQoJy9hcGkvYWRtaW4vYmV6ZWljaG51bmdlbicsIHt9KS50 -aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIFouYWRtaW4uYmV6ZWljaG51bmdl -biA9IHt9OwogICAgICAgICAgICAgICAgICAgIGJlemVpY2hudW5nZW5SZW5kZXJuKCk7CiAgICAg -ICAgICAgICAgICAgICAgYmV6ZWljaG51bmdlbkFud2VuZGVuKCk7CiAgICAgICAgICAgICAgICAg -ICAgdG9hc3QoJ0JlemVpY2hudW5nZW4genVyw7xja2dlc2V0enQnLCAnZXJmb2xnJyk7CiAgICAg -ICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1l -c3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAgICAgICAgIH0sIHsgdGl0ZWw6ICdCZXplaWNobnVu -Z2VuIHp1csO8Y2tzZXR6ZW4nLCBqYVRleHQ6ICdadXLDvGNrc2V0emVuJywgamFEYW5nZXI6IHRy -dWUgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEJlemVpY2hudW5nZW4gJiBMaXN0ZW4g4oCU -IERpZW5zdGdyYWRlICsgRnVua3Rpb25lbiBlZGl0aWVyYmFyCiAgICAgICAgLy8gKFBoYXNlIDEg -LyAyMDI2LTA1LTE5KS4gQmVpZGUgTGlzdGVuIHdlcmRlbiBhbHMgVGVpbCB2b24KICAgICAgICAv -LyBaLmFkbWluIHZpYSAvYXBpL2FkbWluIGdlc3BlaWNoZXJ0IChrZWluIGVpZ2VuZXIgRW5kcG9p -bnQsIHdlaWwKICAgICAgICAvLyBiZWlkZXMgcmVpbmUgQXJyYXktRmVsZGVyIHNpbmQgdW5kIGRl -ciBMZXNlLVBmYWQgb2huZWhpbiBhbGxlcwogICAgICAgIC8vIGF1ZiBlaW5tYWwgaG9sdCkuCiAg -ICAgICAgdmFyIGJ0bkRncmROZXUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWRpZW5z -dGdyYWQtbmV1Jyk7CiAgICAgICAgaWYgKGJ0bkRncmROZXUpIGJ0bkRncmROZXUuYWRkRXZlbnRM -aXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFaLmFkbWluLmRp -ZW5zdGdyYWRlKSBaLmFkbWluLmRpZW5zdGdyYWRlID0gW107CiAgICAgICAgICAgIFouYWRtaW4u -ZGllbnN0Z3JhZGUucHVzaCgnJyk7CiAgICAgICAgICAgIGxpc3RlbkRpZW5zdGdyYWRlUmVuZGVy -bigpOwogICAgICAgICAgICAvLyBGb2t1cyBhdWZzIG5ldWUgSW5wdXRmZWxkCiAgICAgICAgICAg -IHZhciBpbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGdyYWQtaW5wdXQnKTsK -ICAgICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGgpIGlucHV0c1tpbnB1dHMubGVuZ3RoIC0gMV0u -Zm9jdXMoKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgYnRuRGdyZFNwZWljaGVybiA9IGRvY3Vt -ZW50LmdldEVsZW1lbnRCeUlkKCdidG4tZGllbnN0Z3JhZGUtc3BlaWNoZXJuJyk7CiAgICAgICAg -aWYgKGJ0bkRncmRTcGVpY2hlcm4pIGJ0bkRncmRTcGVpY2hlcm4uYWRkRXZlbnRMaXN0ZW5lcign -Y2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGxpc3RlID0gZGllbnN0Z3JhZGVB -dXNUYWJlbGxlTGVzZW4oKTsKICAgICAgICAgICAgWi5hZG1pbi5kaWVuc3RncmFkZSA9IGxpc3Rl -OwogICAgICAgICAgICBhcGlQdXQoJy9hcGkvYWRtaW4nLCBaLmFkbWluKS50aGVuKGZ1bmN0aW9u -KCkgewogICAgICAgICAgICAgICAgbGlzdGVuRGllbnN0Z3JhZGVSZW5kZXJuKCk7CiAgICAgICAg -ICAgICAgICB0b2FzdCgnRGllbnN0Z3JhZGUgZ2VzcGVpY2hlcnQnLCAnZXJmb2xnJyk7CiAgICAg -ICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsgdG9hc3QoJ0ZlaGxlcjogJyArIGUubWVzc2Fn -ZSwgJ2ZlaGxlcicpOyB9KTsKICAgICAgICB9KTsKCiAgICAgICAgdmFyIGJ0bkZ1bmtOZXUgPSBk -b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWZ1bmt0aW9uLW5ldScpOwogICAgICAgIGlmIChi -dG5GdW5rTmV1KSBidG5GdW5rTmV1LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24o -KSB7CiAgICAgICAgICAgIGlmICghWi5hZG1pbi5mdW5rdGlvbmVuKSBaLmFkbWluLmZ1bmt0aW9u -ZW4gPSBbXTsKICAgICAgICAgICAgWi5hZG1pbi5mdW5rdGlvbmVuLnB1c2goeyBjb2RlOiAnJywg -cmFuZzogOTkgfSk7CiAgICAgICAgICAgIGxpc3RlbkZ1bmt0aW9uZW5SZW5kZXJuKCk7CiAgICAg -ICAgICAgIHZhciBpbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZnVuay1pbnB1 -dC1jb2RlJyk7CiAgICAgICAgICAgIGlmIChpbnB1dHMubGVuZ3RoKSBpbnB1dHNbaW5wdXRzLmxl -bmd0aCAtIDFdLmZvY3VzKCk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGJ0bkZ1bmtTcGVpY2hl -cm4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWZ1bmt0aW9uZW4tc3BlaWNoZXJuJyk7 -CiAgICAgICAgaWYgKGJ0bkZ1bmtTcGVpY2hlcm4pIGJ0bkZ1bmtTcGVpY2hlcm4uYWRkRXZlbnRM -aXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGxpc3RlID0gZnVu -a3Rpb25lbkF1c1RhYmVsbGVMZXNlbigpOwogICAgICAgICAgICBaLmFkbWluLmZ1bmt0aW9uZW4g -PSBsaXN0ZTsKICAgICAgICAgICAgYXBpUHV0KCcvYXBpL2FkbWluJywgWi5hZG1pbikudGhlbihm -dW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGxpc3RlbkZ1bmt0aW9uZW5SZW5kZXJuKCk7CiAg -ICAgICAgICAgICAgICB0b2FzdCgnRnVua3Rpb25lbiBnZXNwZWljaGVydCcsICdlcmZvbGcnKTsK +cltpZHhdLmluUGxhbnVuZyA9ICEhaW5wLmNoZWNrZWQ7CiAgICAgICAgICAgIH0pOwogICAgICAg +ICAgICAvLyAiQW5zcHJlY2hwYXJ0bmVyIG3DtmdsaWNoIi1DaGVja2JveCBlaW5sZXNlbiAoRGVm +YXVsdCB0cnVlKS4KICAgICAgICAgICAgLy8gUGVuZGFudCB6dXIgaW5QbGFudW5nLUxvZ2lrOiBz +dGV1ZXJ0LCBvYiBQZXJzb25lbiBkaWVzZXIgR3J1cHBlCiAgICAgICAgICAgIC8vIGltIFBlcnNv +bmFsLVRhYiBhbHMgQW5zcHJlY2hwYXJ0bmVyIG1hcmtpZXJ0IHdlcmRlbiBkdWVyZmVuCiAgICAg +ICAgICAgIC8vIHVuZCBpbSBJbmZvLU1vZGFsIG1pdCBNYWlsLUJ1dHRvbiBlcnNjaGVpbmVuLgog +ICAgICAgICAgICB2YXIgZGFyZkFwSW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgn +LmdydXBwZS1kYXJmYXAtaW5wdXQnKTsKICAgICAgICAgICAgZGFyZkFwSW5wdXRzLmZvckVhY2go +ZnVuY3Rpb24oaW5wKSB7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoaW5wLmdl +dEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSk7CiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKGlkeCkg +JiYgbmV1ZUdyW2lkeF0pIG5ldWVHcltpZHhdLmRhcmZBbnNwcmVjaHBhcnRuZXIgPSAhIWlucC5j +aGVja2VkOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHZhciByZW5hbWVLZXlzID0gT2Jq +ZWN0LmtleXMocmVuYW1lTWFwKTsKICAgICAgICAgICAgZnVuY3Rpb24gbmFjaFNwZWljaGVybigp +IHsKICAgICAgICAgICAgICAgIFouYWRtaW4uZ3J1cHBlbiA9IG5ldWVHcjsKICAgICAgICAgICAg +ICAgIFouZ3J1cHBlbk1hcCA9IHt9OwogICAgICAgICAgICAgICAgbmV1ZUdyLmZvckVhY2goZnVu +Y3Rpb24oZ3IpIHsKICAgICAgICAgICAgICAgICAgICBaLmdydXBwZW5NYXBbZ3IubmFtZV0gPSB7 +IGhpbnRlcmdydW5kOiBnci5oaW50ZXJncnVuZCwgc2NocmlmdDogZ3Iuc2NocmlmdCwgYmV6ZWlj +aG51bmc6IGdyLmJlemVpY2hudW5nIH07CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg +ICAgIC8vIGluUGxhbnVuZy1GbGFnIChvZGVyIFVtYmVuZW5udW5nKSBrYW5uIGRpZSBTaWNodGJh +cmtlaXQKICAgICAgICAgICAgICAgIC8vIGdhbnplciBHcnVwcGVuIHZlcmFlbmRlcm4g4oCUIFBl +cnNvbmVuLUZpbHRlciBuZXUgZ3JlaWZlbgogICAgICAgICAgICAgICAgLy8gbGFzc2VuIHVuZCBQ +bGFudGFmZWwga29tcGxldHQgbmV1IGF1ZmJhdWVuLgogICAgICAgICAgICAgICAgcGVyc29uZW5O +ZXVBdWZiYXVlbigpOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lblJlbmRlcm4gPT09 +ICdmdW5jdGlvbicpIG5hbWVuUmVuZGVybigpOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBr +b3BmUmVuZGVybiA9PT0gJ2Z1bmN0aW9uJykga29wZlJlbmRlcm4oKTsKICAgICAgICAgICAgICAg +IGlmICh0eXBlb2YgZGF0ZW5HcmlkUmVuZGVybiA9PT0gJ2Z1bmN0aW9uJykgZGF0ZW5HcmlkUmVu +ZGVybigpOwogICAgICAgICAgICAgICAgcGVyc29uYWxUYWJlbGxlUmVuZGVybigpOwogICAgICAg +ICAgICAgICAgZ3J1cHBlblRhYmVsbGVSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICB2YXIgc3Vm +Zml4ID0gcmVuYW1lS2V5cy5sZW5ndGggPyAnICgnICsgcmVuYW1lS2V5cy5sZW5ndGggKyAnIEvD +vHJ6ZWwgdW1iZW5hbm50ICsgUGVyc29uZW4gbWlncmllcnQpJyA6ICcnOwogICAgICAgICAgICAg +ICAgZGlydHlTZXR6ZW4oJ2dydXBwZW4nLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB0YWJEcmFm +dExvZXNjaGVuKCdncnVwcGVuJyk7CiAgICAgICAgICAgICAgICB0b2FzdCgnRGllbnN0Z3J1cHBl +biBnZXNwZWljaGVydCcgKyBzdWZmaXgsICdlcmZvbGcnKTsKICAgICAgICAgICAgfQoKICAgICAg +ICAgICAgZnVuY3Rpb24gYXVzZnVlaHJlbigpIHsKICAgICAgICAgICAgICAgIGFwaVB1dCgnL2Fw +aS9hZG1pbicsIE9iamVjdC5hc3NpZ24oe30sIFouYWRtaW4sIHsgZ3J1cHBlbjogbmV1ZUdyIH0p +KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGlmICghcmVuYW1lS2V5cy5s +ZW5ndGgpIHsgbmFjaFNwZWljaGVybigpOyByZXR1cm47IH0KICAgICAgICAgICAgICAgICAgICAo +Wi5wbGFudW5nLnBlcnNvbmVuIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHApIHsKICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKHAuZ3J1cHBlICYmIHJlbmFtZU1hcFtwLmdydXBwZV0pIHAuZ3J1 +cHBlID0gcmVuYW1lTWFwW3AuZ3J1cHBlXTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg +ICAgICAgICAgICAgICByZXR1cm4gYXBpUHV0KCcvYXBpL3BsYW51bmcnLCBaLnBsYW51bmcpLnRo +ZW4obmFjaFNwZWljaGVybik7CiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7 +IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAgICAgICAg +IH0KCiAgICAgICAgICAgIC8vIEthc2thZGVuLVdhcm51bmc6IHdlbm4gS3VlcnplbCB1bWJlbmFu +bnQgd2VyZGVuLCBzaW5kIEFMTEUKICAgICAgICAgICAgLy8gUGVyc29uZW4gbWl0IGRlbSBhbHRl +biBLdWVyemVsIGJldHJvZmZlbiDigJQgdm9yaGVyIHplaWdlbiwKICAgICAgICAgICAgLy8gd2ll +IHZpZWxlIGRhcyBzaW5kLCBiZXZvciBzdGlsbHNjaHdlaWdlbmQgbWlncmllcnQgd2lyZC4KICAg +ICAgICAgICAgLy8gYmVzdGFldGlnZW4oKSBlc2NhcHQgSFRNTDsgbWl0IFxuIHVuZCBwcmUtbGlu +ZSB3aXJkIGRlciBCbG9jawogICAgICAgICAgICAvLyB0cm90emRlbSBtZWhyemVpbGlnIGRhcmdl +c3RlbGx0LgogICAgICAgICAgICBpZiAocmVuYW1lS2V5cy5sZW5ndGgpIHsKICAgICAgICAgICAg +ICAgIHZhciBiZXRyb2ZmZW4gPSAwOwogICAgICAgICAgICAgICAgdmFyIGRldGFpbHMgPSByZW5h +bWVLZXlzLm1hcChmdW5jdGlvbihhbHQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbiA9ICha +LnBsYW51bmcucGVyc29uZW4gfHwgW10pLmZpbHRlcihmdW5jdGlvbihwKSB7IHJldHVybiBwLmdy +dXBwZSA9PT0gYWx0OyB9KS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgYmV0cm9mZmVuICs9 +IG47CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcgIOKAoiAnICsgYWx0ICsgJyDihpIgJyAr +IHJlbmFtZU1hcFthbHRdICsgJyAgKCcgKyBuICsgJyBQZXJzb24nICsgKG4gPT09IDEgPyAnJyA6 +ICdlbicpICsgJyknOwogICAgICAgICAgICAgICAgfSkuam9pbignXG4nKTsKICAgICAgICAgICAg +ICAgIGJlc3RhZXRpZ2VuKAogICAgICAgICAgICAgICAgICAgICdGb2xnZW5kZSBEaWVuc3RncnVw +cGVuLUvDvHJ6ZWwgd2VyZGVuIHVtYmVuYW5udCDigJQgYWxsZSB6dWdlb3JkbmV0ZW4gUGVyc29u +ZW4gd2VyZGVuIGF1dG9tYXRpc2NoIG1pZ3JpZXJ0OlxuXG4nICsKICAgICAgICAgICAgICAgICAg +ICBkZXRhaWxzICsKICAgICAgICAgICAgICAgICAgICAnXG5cbkluc2dlc2FtdCAnICsgYmV0cm9m +ZmVuICsgJyBQZXJzb24nICsgKGJldHJvZmZlbiA9PT0gMSA/ICcnIDogJ2VuJykgKyAnIGJldHJv +ZmZlbi4nLAogICAgICAgICAgICAgICAgICAgIGF1c2Z1ZWhyZW4sCiAgICAgICAgICAgICAgICAg +ICAgeyB0aXRlbDogJ0RpZW5zdGdydXBwZW4gdW1iZW5lbm5lbicsIGphVGV4dDogJ1Vtc2V0emVu +JyB9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg +ICB9CiAgICAgICAgICAgIGF1c2Z1ZWhyZW4oKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gRXhj +ZWwtSW1wb3J0CiAgICAgICAgdmFyIGltcEZpbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn +aW1wLWRhdGVpJyk7CiAgICAgICAgaWYgKGltcEZpbGUpIGltcEZpbGUuYWRkRXZlbnRMaXN0ZW5l +cignY2hhbmdlJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgZiA9IGUudGFyZ2V0LmZp +bGVzICYmIGUudGFyZ2V0LmZpbGVzWzBdOwogICAgICAgICAgICBpZiAoZikgaW1wRGF0ZWlWZXJh +cmJlaXRlbihmKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gQmV6ZWljaG51bmdlbgogICAgICAg +IHZhciBidG5CZXpTcGVpY2hlcm4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWJlemVp +Y2hudW5nZW4tc3BlaWNoZXJuJyk7CiAgICAgICAgaWYgKGJ0bkJlelNwZWljaGVybikgYnRuQmV6 +U3BlaWNoZXJuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAg +ICAgIHZhciBtYXAgPSBiZXplaWNobnVuZ2VuQXVzVGFiZWxsZUxlc2VuKCk7CiAgICAgICAgICAg +IGFwaVB1dCgnL2FwaS9hZG1pbi9iZXplaWNobnVuZ2VuJywgbWFwKS50aGVuKGZ1bmN0aW9uKCkg +ewogICAgICAgICAgICAgICAgWi5hZG1pbi5iZXplaWNobnVuZ2VuID0gbWFwOwogICAgICAgICAg +ICAgICAgYmV6ZWljaG51bmdlbkFud2VuZGVuKCk7CiAgICAgICAgICAgICAgICBkaXJ0eVNldHpl +bignYmV6ZWljaG51bmdlbicsIGZhbHNlKTsKICAgICAgICAgICAgICAgIHRvYXN0KCdCZXplaWNo +bnVuZ2VuIGdlc3BlaWNoZXJ0IOKAlCBSZWxvYWQgZsO8ciBhbGxlIE51dHplciBuw7Z0aWcnLCAn +ZXJmb2xnJyk7CiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsgdG9hc3QoJ0ZlaGxl +cjogJyArIGUubWVzc2FnZSwgJ2ZlaGxlcicpOyB9KTsKICAgICAgICB9KTsKICAgICAgICB2YXIg +YnRuQmV6UmVzZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWJlemVpY2hudW5nZW4t +cmVzZXQnKTsKICAgICAgICBpZiAoYnRuQmV6UmVzZXQpIGJ0bkJlelJlc2V0LmFkZEV2ZW50TGlz +dGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGJlc3RhZXRpZ2VuKCdBbGxl +IGVpZ2VuZW4gQmV6ZWljaG51bmdlbiBsw7ZzY2hlbiB1bmQgYXVmIERlZmF1bHRzIHp1csO8Y2tz +ZXR6ZW4/JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBhcGlQdXQoJy9hcGkvYWRtaW4v +YmV6ZWljaG51bmdlbicsIHt9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg +IFouYWRtaW4uYmV6ZWljaG51bmdlbiA9IHt9OwogICAgICAgICAgICAgICAgICAgIGJlemVpY2hu +dW5nZW5SZW5kZXJuKCk7CiAgICAgICAgICAgICAgICAgICAgYmV6ZWljaG51bmdlbkFud2VuZGVu +KCk7CiAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ0JlemVpY2hudW5nZW4genVyw7xja2dlc2V0 +enQnLCAnZXJmb2xnJyk7CiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRv +YXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAgICAgICAgIH0s +IHsgdGl0ZWw6ICdCZXplaWNobnVuZ2VuIHp1csO8Y2tzZXR6ZW4nLCBqYVRleHQ6ICdadXLDvGNr +c2V0emVuJywgamFEYW5nZXI6IHRydWUgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEJlemVp +Y2hudW5nZW4gJiBMaXN0ZW4g4oCUIERpZW5zdGdyYWRlICsgRnVua3Rpb25lbiBlZGl0aWVyYmFy +CiAgICAgICAgLy8gKFBoYXNlIDEgLyAyMDI2LTA1LTE5KS4gQmVpZGUgTGlzdGVuIHdlcmRlbiBh +bHMgVGVpbCB2b24KICAgICAgICAvLyBaLmFkbWluIHZpYSAvYXBpL2FkbWluIGdlc3BlaWNoZXJ0 +IChrZWluIGVpZ2VuZXIgRW5kcG9pbnQsIHdlaWwKICAgICAgICAvLyBiZWlkZXMgcmVpbmUgQXJy +YXktRmVsZGVyIHNpbmQgdW5kIGRlciBMZXNlLVBmYWQgb2huZWhpbiBhbGxlcwogICAgICAgIC8v +IGF1ZiBlaW5tYWwgaG9sdCkuCiAgICAgICAgdmFyIGJ0bkRncmROZXUgPSBkb2N1bWVudC5nZXRF +bGVtZW50QnlJZCgnYnRuLWRpZW5zdGdyYWQtbmV1Jyk7CiAgICAgICAgaWYgKGJ0bkRncmROZXUp +IGJ0bkRncmROZXUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAg +ICAgICAgaWYgKCFaLmFkbWluLmRpZW5zdGdyYWRlKSBaLmFkbWluLmRpZW5zdGdyYWRlID0gW107 +CiAgICAgICAgICAgIFouYWRtaW4uZGllbnN0Z3JhZGUucHVzaCgnJyk7CiAgICAgICAgICAgIGxp +c3RlbkRpZW5zdGdyYWRlUmVuZGVybigpOwogICAgICAgICAgICAvLyBGb2t1cyBhdWZzIG5ldWUg +SW5wdXRmZWxkCiAgICAgICAgICAgIHZhciBpbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9y +QWxsKCcuZGdyYWQtaW5wdXQnKTsKICAgICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGgpIGlucHV0 +c1tpbnB1dHMubGVuZ3RoIC0gMV0uZm9jdXMoKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgYnRu +RGdyZFNwZWljaGVybiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tZGllbnN0Z3JhZGUt +c3BlaWNoZXJuJyk7CiAgICAgICAgaWYgKGJ0bkRncmRTcGVpY2hlcm4pIGJ0bkRncmRTcGVpY2hl +cm4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFy +IGxpc3RlID0gZGllbnN0Z3JhZGVBdXNUYWJlbGxlTGVzZW4oKTsKICAgICAgICAgICAgWi5hZG1p +bi5kaWVuc3RncmFkZSA9IGxpc3RlOwogICAgICAgICAgICBhcGlQdXQoJy9hcGkvYWRtaW4nLCBa +LmFkbWluKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbGlzdGVuRGllbnN0Z3Jh +ZGVSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICB0b2FzdCgnRGllbnN0Z3JhZGUgZ2VzcGVpY2hl +cnQnLCAnZXJmb2xnJyk7CiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsgdG9hc3Qo +J0ZlaGxlcjogJyArIGUubWVzc2FnZSwgJ2ZlaGxlcicpOyB9KTsKICAgICAgICB9KTsKCiAgICAg +ICAgdmFyIGJ0bkZ1bmtOZXUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWZ1bmt0aW9u +LW5ldScpOwogICAgICAgIGlmIChidG5GdW5rTmV1KSBidG5GdW5rTmV1LmFkZEV2ZW50TGlzdGVu +ZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghWi5hZG1pbi5mdW5rdGlv +bmVuKSBaLmFkbWluLmZ1bmt0aW9uZW4gPSBbXTsKICAgICAgICAgICAgWi5hZG1pbi5mdW5rdGlv +bmVuLnB1c2goeyBjb2RlOiAnJywgcmFuZzogOTkgfSk7CiAgICAgICAgICAgIGxpc3RlbkZ1bmt0 +aW9uZW5SZW5kZXJuKCk7CiAgICAgICAgICAgIHZhciBpbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNl +bGVjdG9yQWxsKCcuZnVuay1pbnB1dC1jb2RlJyk7CiAgICAgICAgICAgIGlmIChpbnB1dHMubGVu +Z3RoKSBpbnB1dHNbaW5wdXRzLmxlbmd0aCAtIDFdLmZvY3VzKCk7CiAgICAgICAgfSk7CiAgICAg +ICAgdmFyIGJ0bkZ1bmtTcGVpY2hlcm4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWZ1 +bmt0aW9uZW4tc3BlaWNoZXJuJyk7CiAgICAgICAgaWYgKGJ0bkZ1bmtTcGVpY2hlcm4pIGJ0bkZ1 +bmtTcGVpY2hlcm4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAg +ICAgICAgdmFyIGxpc3RlID0gZnVua3Rpb25lbkF1c1RhYmVsbGVMZXNlbigpOwogICAgICAgICAg +ICBaLmFkbWluLmZ1bmt0aW9uZW4gPSBsaXN0ZTsKICAgICAgICAgICAgYXBpUHV0KCcvYXBpL2Fk +bWluJywgWi5hZG1pbikudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGxpc3RlbkZ1 +bmt0aW9uZW5SZW5kZXJuKCk7CiAgICAgICAgICAgICAgICB0b2FzdCgnRnVua3Rpb25lbiBnZXNw +ZWljaGVydCcsICdlcmZvbGcnKTsKICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkgeyB0 +b2FzdCgnRmVobGVyOiAnICsgZS5tZXNzYWdlLCAnZmVobGVyJyk7IH0pOwogICAgICAgIH0pOwoK +ICAgICAgICAvLyBSZWloZW5mb2xnZSAvIExvZXNjaGVuIOKAlCBFdmVudC1EZWxlZ2F0aW9uIGF1 +ZiBiZWlkZSBUYWJlbGxlbiwKICAgICAgICAvLyBkaWVzZWxiZSBMb2dpayBmdWVyIERncmFkIHVu +ZCBGdW5rdGlvbmVuLCBudXIgdW50ZXJzY2hpZWRsaWNoZXIKICAgICAgICAvLyBTdGF0ZS1TbG90 +IGluIFouYWRtaW4uCiAgICAgICAgdmFyIGxpc3RlblRhYiA9IGRvY3VtZW50LmdldEVsZW1lbnRC +eUlkKCdhZG1pbi10YWItbGlzdGVuJyk7CiAgICAgICAgaWYgKGxpc3RlblRhYikgbGlzdGVuVGFi +LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIg +YnRuID0gZS50YXJnZXQuY2xvc2VzdCgnYnV0dG9uW2RhdGEtYWt0aW9uXScpOwogICAgICAgICAg +ICBpZiAoIWJ0bikgcmV0dXJuOwogICAgICAgICAgICB2YXIgYWt0aW9uID0gYnRuLmdldEF0dHJp +YnV0ZSgnZGF0YS1ha3Rpb24nKTsKICAgICAgICAgICAgdmFyIGlkeCAgICA9IHBhcnNlSW50KGJ0 +bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4JyksIDEwKTsKICAgICAgICAgICAgLy8gRGllbnN0Z3Jh +ZGUtQWt0aW9uZW4KICAgICAgICAgICAgaWYgKGFrdGlvbiA9PT0gJ2RncmFkLXVwJyB8fCBha3Rp +b24gPT09ICdkZ3JhZC1kb3duJyB8fCBha3Rpb24gPT09ICdkZ3JhZC1sb2VzY2hlbicpIHsKICAg +ICAgICAgICAgICAgIC8vIFZvciBqZWRlciBTdHJ1a3R1cmFlbmRlcnVuZzogYWt0dWVsbGUgSW5w +dXQtV2VydGUgZWluc2FtbWVsbiwKICAgICAgICAgICAgICAgIC8vIGRhbWl0IG5pY2h0LWdlc3Bl +aWNoZXJ0ZSBFZGl0aWVydW5nZW4gZXJoYWx0ZW4gYmxlaWJlbi4KICAgICAgICAgICAgICAgIFou +YWRtaW4uZGllbnN0Z3JhZGUgPSBkaWVuc3RncmFkZUF1c1RhYmVsbGVMZXNlbigpOwogICAgICAg +ICAgICAgICAgaWYgKGFrdGlvbiA9PT0gJ2RncmFkLXVwJyAmJiBpZHggPiAwKSB7CiAgICAgICAg +ICAgICAgICAgICAgdmFyIHRtcCA9IFouYWRtaW4uZGllbnN0Z3JhZGVbaWR4LTFdOwogICAgICAg +ICAgICAgICAgICAgIFouYWRtaW4uZGllbnN0Z3JhZGVbaWR4LTFdID0gWi5hZG1pbi5kaWVuc3Rn +cmFkZVtpZHhdOwogICAgICAgICAgICAgICAgICAgIFouYWRtaW4uZGllbnN0Z3JhZGVbaWR4XSAg +ID0gdG1wOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChha3Rpb24gPT09ICdkZ3JhZC1kb3du +JyAmJiBpZHggPCBaLmFkbWluLmRpZW5zdGdyYWRlLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAg +ICAgICAgICB2YXIgdG1wMiA9IFouYWRtaW4uZGllbnN0Z3JhZGVbaWR4KzFdOwogICAgICAgICAg +ICAgICAgICAgIFouYWRtaW4uZGllbnN0Z3JhZGVbaWR4KzFdID0gWi5hZG1pbi5kaWVuc3RncmFk +ZVtpZHhdOwogICAgICAgICAgICAgICAgICAgIFouYWRtaW4uZGllbnN0Z3JhZGVbaWR4XSAgID0g +dG1wMjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWt0aW9uID09PSAnZGdyYWQtbG9lc2No +ZW4nKSB7CiAgICAgICAgICAgICAgICAgICAgWi5hZG1pbi5kaWVuc3RncmFkZS5zcGxpY2UoaWR4 +LCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3RlbkRpZW5zdGdyYWRl +UmVuZGVybigpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAg +ICAgIC8vIEZ1bmt0aW9uZW4tQWt0aW9uZW4KICAgICAgICAgICAgaWYgKGFrdGlvbiA9PT0gJ2Z1 +bmstdXAnIHx8IGFrdGlvbiA9PT0gJ2Z1bmstZG93bicgfHwgYWt0aW9uID09PSAnZnVuay1sb2Vz +Y2hlbicpIHsKICAgICAgICAgICAgICAgIFouYWRtaW4uZnVua3Rpb25lbiA9IGZ1bmt0aW9uZW5B +dXNUYWJlbGxlTGVzZW4oKTsKICAgICAgICAgICAgICAgIGlmIChha3Rpb24gPT09ICdmdW5rLXVw +JyAmJiBpZHggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBaLmFkbWluLmZ1bmt0 +aW9uZW5baWR4LTFdOwogICAgICAgICAgICAgICAgICAgIFouYWRtaW4uZnVua3Rpb25lbltpZHgt +MV0gPSBaLmFkbWluLmZ1bmt0aW9uZW5baWR4XTsKICAgICAgICAgICAgICAgICAgICBaLmFkbWlu +LmZ1bmt0aW9uZW5baWR4XSAgID0gdDsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWt0aW9u +ID09PSAnZnVuay1kb3duJyAmJiBpZHggPCBaLmFkbWluLmZ1bmt0aW9uZW4ubGVuZ3RoIC0gMSkg +ewogICAgICAgICAgICAgICAgICAgIHZhciB0MiA9IFouYWRtaW4uZnVua3Rpb25lbltpZHgrMV07 +CiAgICAgICAgICAgICAgICAgICAgWi5hZG1pbi5mdW5rdGlvbmVuW2lkeCsxXSA9IFouYWRtaW4u +ZnVua3Rpb25lbltpZHhdOwogICAgICAgICAgICAgICAgICAgIFouYWRtaW4uZnVua3Rpb25lbltp +ZHhdICAgPSB0MjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWt0aW9uID09PSAnZnVuay1s +b2VzY2hlbicpIHsKICAgICAgICAgICAgICAgICAgICBaLmFkbWluLmZ1bmt0aW9uZW4uc3BsaWNl +KGlkeCwgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsaXN0ZW5GdW5rdGlv +bmVuUmVuZGVybigpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIE1pa3Jv +dGVhbXMtRWRpdG9yIOKAlCBQaGFzZSAyICgyMDI2LTA1LTE5KS4gWi5hZG1pbi5taWtyb3RlYW1z +IGFscwogICAgICAgIC8vIGdlcGZsZWd0ZSBMaXN0ZS4gUGVyc29uZW4gcHJvIFRlYW0gdmlhIE1v +ZGFsIChtaWtyb3RlYW1QZXJzb25lbkRpYWxvZykuCiAgICAgICAgdmFyIGJ0bk10TmV1ID0gZG9j +dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1taWtyb3RlYW0tbmV1Jyk7CiAgICAgICAgaWYgKGJ0 +bk10TmV1KSBidG5NdE5ldS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewog +ICAgICAgICAgICBpZiAoIVouYWRtaW4ubWlrcm90ZWFtcykgWi5hZG1pbi5taWtyb3RlYW1zID0g +W107CiAgICAgICAgICAgIC8vIFN0cnVrdHVyaWVydGUgSUQtVm9yc2NobGFnOiB0XzxTdGFuZG9y +dD5fPEdydXBwZT47IGJlaSBsZWVyZW4KICAgICAgICAgICAgLy8gU3RhbW0tRmVsZGVybiBibGVp +YnQgZGVyIFVzZXIgc2VsYnN0IHp1c3RhZW5kaWcuCiAgICAgICAgICAgIFouYWRtaW4ubWlrcm90 +ZWFtcyA9IG1pa3JvdGVhbXNBdXNUYWJlbGxlTGVzZW4oKTsKICAgICAgICAgICAgWi5hZG1pbi5t +aWtyb3RlYW1zLnB1c2goeyBpZDogJ3RfTkVVXycgKyBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KSwg +bmFtZTogJycsIHN0YW5kb3J0OiAnJywgZ3J1cHBlOiAnJywgcGVyc29uSWRzOiBbXSB9KTsKICAg +ICAgICAgICAgbWlrcm90ZWFtc1JlbmRlcm4oKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgYnRu +TXRTcGVpY2hlcm4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLW1pa3JvdGVhbXMtc3Bl +aWNoZXJuJyk7CiAgICAgICAgaWYgKGJ0bk10U3BlaWNoZXJuKSBidG5NdFNwZWljaGVybi5hZGRF +dmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgbGlzdGUg +PSBtaWtyb3RlYW1zQXVzVGFiZWxsZUxlc2VuKCk7CiAgICAgICAgICAgIFouYWRtaW4ubWlrcm90 +ZWFtcyA9IGxpc3RlOwogICAgICAgICAgICBhcGlQdXQoJy9hcGkvYWRtaW4nLCBaLmFkbWluKS50 +aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbWlrcm90ZWFtc1JlbmRlcm4oKTsKICAg +ICAgICAgICAgICAgIHRvYXN0KGxpc3RlLmxlbmd0aCArICcgTWlrcm90ZWFtcyBnZXNwZWljaGVy +dCcsICdlcmZvbGcnKTsKICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkgeyB0b2FzdCgn +RmVobGVyOiAnICsgZS5tZXNzYWdlLCAnZmVobGVyJyk7IH0pOwogICAgICAgIH0pOwoKICAgICAg +ICAvLyBUYWJlbGxlbi1FdmVudC1EZWxlZ2F0aW9uOiBVcC9Eb3duL0xvZXNjaGVuL1BlcnNvbmVu +LU1vZGFsCiAgICAgICAgdmFyIG10VGFiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkbWlu +LXRhYi1taWtyb3RlYW1zJyk7CiAgICAgICAgaWYgKG10VGFiKSBtdFRhYi5hZGRFdmVudExpc3Rl +bmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIGJ0biA9IGUudGFyZ2V0 +LmNsb3Nlc3QoJ2J1dHRvbltkYXRhLWFrdGlvbl0nKTsKICAgICAgICAgICAgaWYgKCFidG4pIHJl +dHVybjsKICAgICAgICAgICAgdmFyIGFrdGlvbiA9IGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtYWt0 +aW9uJyk7CiAgICAgICAgICAgIHZhciBpZHggICAgPSBwYXJzZUludChidG4uZ2V0QXR0cmlidXRl +KCdkYXRhLWlkeCcpLCAxMCk7CiAgICAgICAgICAgIGlmIChpc05hTihpZHgpKSByZXR1cm47CiAg +ICAgICAgICAgIGlmIChha3Rpb24gPT09ICdtdC1wZXJzb25lbicpIHsKICAgICAgICAgICAgICAg +IG1pa3JvdGVhbVBlcnNvbmVuRGlhbG9nKGlkeCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAg +ICAgICAgICAgIH0KICAgICAgICAgICAgLy8gU3RydWt0dXJhZW5kZXJ1bmdlbiDigJQgdm9yaGVy +IGRpZSBJbnB1dHMgZWluc2FtbWVsbi4KICAgICAgICAgICAgWi5hZG1pbi5taWtyb3RlYW1zID0g +bWlrcm90ZWFtc0F1c1RhYmVsbGVMZXNlbigpOwogICAgICAgICAgICB2YXIgbCA9IFouYWRtaW4u +bWlrcm90ZWFtczsKICAgICAgICAgICAgaWYgKGFrdGlvbiA9PT0gJ210LXVwJyAmJiBpZHggPiAw +KSB7CiAgICAgICAgICAgICAgICB2YXIgdCA9IGxbaWR4LTFdOyBsW2lkeC0xXSA9IGxbaWR4XTsg +bFtpZHhdID0gdDsKICAgICAgICAgICAgfSBlbHNlIGlmIChha3Rpb24gPT09ICdtdC1kb3duJyAm +JiBpZHggPCBsLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgICAgIHZhciB0MiA9IGxbaWR4KzFd +OyBsW2lkeCsxXSA9IGxbaWR4XTsgbFtpZHhdID0gdDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAo +YWt0aW9uID09PSAnbXQtbG9lc2NoZW4nKSB7CiAgICAgICAgICAgICAgICBsLnNwbGljZShpZHgs +IDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1pa3JvdGVhbXNSZW5kZXJuKCk7CiAgICAg +ICAgfSk7CgogICAgICAgIC8vIEUtTWFpbC1Wb3JsYWdlbiDigJQgS2FydGVuLUxheW91dCAoRmlu +ZGluZyBDLjcgLyBTcGVjIEYuMSkKICAgICAgICAvLyBLbGljayBhdWYgZWluZSBLYXJ0ZSBvZWZm +bmV0IGVtYWlsVm9ybGFnZUJlYXJiZWl0ZW5Nb2RhbCgpOyBTYXZlCiAgICAgICAgLy8gZXJmb2xn +dCBhdXMgZGVtIE1vZGFsIGhlcmF1cy4gRGVyIGZydWVoZXIgemVudHJhbGUgIlZvcmxhZ2VuCiAg +ICAgICAgLy8gc3BlaWNoZXJuIi1CdXR0b24gaXN0IHdlZywgd2VpbCBTYXZlIGpldHp0IHBybyBW +b3JsYWdlIHN0YXR0ZmluZGV0LgogICAgICAgIHZhciBlbWFpbEthcnRlbiA9IGRvY3VtZW50Lmdl +dEVsZW1lbnRCeUlkKCdlbWFpbHZvcmxhZ2VuLWluaGFsdCcpOwogICAgICAgIGlmIChlbWFpbEth +cnRlbikgZW1haWxLYXJ0ZW4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7 +CiAgICAgICAgICAgIC8vIEhpZGUgLyBTaG93IHRvZ2dsZTogVm9ybGFnZSBhdXMgZGVyIFByaW1h +ZXJhbnNpY2h0IGF1c2JsZW5kZW4KICAgICAgICAgICAgLy8gYnp3LiB3aWVkZXIgZWluYmxlbmRl +bi4gUGVyc2lzdGllcnVuZyBhbHMKICAgICAgICAgICAgLy8gYWRtaW4uZW1haWxWb3JsYWdlbltr +ZXldLnZlcnN0ZWNrdCA9IGJvb2wsIGdlc3BlaWNoZXJ0IHVlYmVyCiAgICAgICAgICAgIC8vIC9h +cGkvYWRtaW4uIERpZSBIaWRlLUtsaWNrcyBicmF1Y2hlbiBzdG9wUHJvcGFnYXRpb24sIHNvbnN0 +CiAgICAgICAgICAgIC8vIHd1ZXJkZSBkZXIgS2FydGVuLUNsaWNrLUhhbmRsZXIgZGFydW50ZXIg +ZGFzIEJlYXJiZWl0ZW4tTW9kYWwKICAgICAgICAgICAgLy8gb2VmZm5lbi4KICAgICAgICAgICAg +dmFyIGhpZGVCdG4gPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249ImV2LWhpZGUiXSwg +W2RhdGEtYWt0aW9uPSJldi1zaG93Il0nKTsKICAgICAgICAgICAgaWYgKGhpZGVCdG4pIHsKICAg +ICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICB2YXIga2V5 +ID0gaGlkZUJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdm9ybGFnZScpOwogICAgICAgICAgICAgICAg +dmFyIHZlcnN0ZWNrdCA9IGhpZGVCdG4uZ2V0QXR0cmlidXRlKCdkYXRhLWFrdGlvbicpID09PSAn +ZXYtaGlkZSc7CiAgICAgICAgICAgICAgICBpZiAoIVouYWRtaW4uZW1haWxWb3JsYWdlbikgWi5h +ZG1pbi5lbWFpbFZvcmxhZ2VuID0ge307CiAgICAgICAgICAgICAgICBpZiAoIVouYWRtaW4uZW1h +aWxWb3JsYWdlbltrZXldKSBaLmFkbWluLmVtYWlsVm9ybGFnZW5ba2V5XSA9IHt9OwogICAgICAg +ICAgICAgICAgWi5hZG1pbi5lbWFpbFZvcmxhZ2VuW2tleV0udmVyc3RlY2t0ID0gdmVyc3RlY2t0 +OwogICAgICAgICAgICAgICAgYXBpUHV0KCcvYXBpL2FkbWluJywgWi5hZG1pbikudGhlbihmdW5j +dGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBlbWFpbFZvcmxhZ2VuUmVuZGVybigpOwogICAg +ICAgICAgICAgICAgICAgIHRvYXN0KHZlcnN0ZWNrdCA/ICdWb3JsYWdlIGF1c2dlYmxlbmRldCcg +OiAnVm9ybGFnZSBlaW5nZWJsZW5kZXQnLCAnZXJmb2xnJyk7CiAgICAgICAgICAgICAgICB9KS5j +YXRjaChmdW5jdGlvbihlcnIpIHsgdG9hc3QoJ0ZlaGxlcjogJyArIGVyci5tZXNzYWdlLCAnZmVo +bGVyJyk7IH0pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAg +ICAgIHZhciBrYXJ0ZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5lbWFpbHZvcmxhZ2Uta2FydGUnKTsK +ICAgICAgICAgICAgaWYgKGthcnRlKSBlbWFpbFZvcmxhZ2VCZWFyYmVpdGVuTW9kYWwoa2FydGUu +Z2V0QXR0cmlidXRlKCdkYXRhLXZvcmxhZ2UnKSk7CiAgICAgICAgfSk7CiAgICAgICAgLy8gVGFz +dGF0dXItQWt0aXZpZXJ1bmcgZGVyIEthcnRlbiAocm9sZT1idXR0b24sIGtlaW4gbmF0aXZlcyA8 +YnV0dG9uPgogICAgICAgIC8vIG1laHIg4oCUIEVudGVyL1NwYWNlIG11ZXNzZW4gd2lyIHNlbGJz +dCBiZWhhbmRlbG4pLgogICAgICAgIGlmIChlbWFpbEthcnRlbikgZW1haWxLYXJ0ZW4uYWRkRXZl +bnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKGUua2V5 +ICE9PSAnRW50ZXInICYmIGUua2V5ICE9PSAnICcgJiYgZS5rZXkgIT09ICdTcGFjZWJhcicpIHJl +dHVybjsKICAgICAgICAgICAgdmFyIGthcnRlID0gZS50YXJnZXQuY2xvc2VzdCgnLmVtYWlsdm9y +bGFnZS1rYXJ0ZScpOwogICAgICAgICAgICBpZiAoIWthcnRlIHx8IGUudGFyZ2V0LmNsb3Nlc3Qo +Jy5ldmstaGlkZS1idG4nKSkgcmV0dXJuOwogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7 +CiAgICAgICAgICAgIGVtYWlsVm9ybGFnZUJlYXJiZWl0ZW5Nb2RhbChrYXJ0ZS5nZXRBdHRyaWJ1 +dGUoJ2RhdGEtdm9ybGFnZScpKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gRWluc3RlbGx1bmdl +biDigJQgSmFociArIEluYWt0aXZpdGFldCArIFBhcGllcmtvcmItQXVmYmV3YWhydW5nICsgRS1N +YWlsLQogICAgICAgIC8vIERvbWFpbiAoSW5mb3RleHRlIHNpbmQgaW0gVGFiICJJbmZvcm1hdGlv +biAmIEhpbGZlIikuCiAgICAgICAgLy8gS29uZmlndXJhdGlvbjogZWluemVsbmUsIGF0b21hcmUg +KyB2YWxpZGllcnRlIEZlbGRlci4gRGVyIEVuZHBvaW50CiAgICAgICAgLy8gL2FwaS9hZG1pbi9l +aW5zdGVsbHVuZ2VuIGlzdCBQYXJ0aWFsLU1lcmdlLWbDpGhpZyAoa2VpbiBWb2xsLU92ZXJ3cml0 +ZSksCiAgICAgICAgLy8gZGFoZXIgaXN0IGZlbGR3ZWlzZXMgQVVUTy1TUEVJQ0hFUk4gaGllciBz +aWNoZXI6IGplZGUgw4RuZGVydW5nIHdpcmQKICAgICAgICAvLyBuYWNoIGt1cnplciBUaXBwLVBh +dXNlIGF1dG9tYXRpc2NoIHBlcnNpc3RpZXJ0LiBEZXIg4oCeU3BlaWNoZXJuIi1CdXR0b24KICAg +ICAgICAvLyBibGVpYnQgYWxzIGV4cGxpeml0ZXIgRmFsbGJhY2sgZXJoYWx0ZW4uCiAgICAgICAg +ZnVuY3Rpb24gZWluc3RlbGx1bmdlbkxlc2VuKCkgewogICAgICAgICAgICB2YXIgcGFwaWVya29y +YkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VpbnMtcGFwaWVya29yYi10YWdlJyk7CiAg +ICAgICAgICAgIHZhciBlbWFpbERvbWFpbkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vp +bnMtZW1haWwtZG9tYWluJyk7CiAgICAgICAgICAgIHZhciBhdmF0YXJHcm9lc3NlRWwgPSBkb2N1 +bWVudC5nZXRFbGVtZW50QnlJZCgnZWlucy1hdmF0YXItZ3JvZXNzZScpOwogICAgICAgICAgICAv +LyBBdmF0YXItR3JvZXNzZSB6d2lzY2hlbiAxMDAgdW5kIDYwMCBjbGFtcGVuLCBkYW1pdCBiZWxp +ZWJpZyBncm9zc2UKICAgICAgICAgICAgLy8gQmlsZGVyIGRlbiBEYXRhRGlyIG5pY2h0IHVlYmVy +cmFzY2hlbmQgbWl0IE1CLUZpbGVzIGZ1ZWxsZW4uCiAgICAgICAgICAgIHZhciBhdmF0YXJHciA9 +IGF2YXRhckdyb2Vzc2VFbCA/IHBhcnNlSW50KGF2YXRhckdyb2Vzc2VFbC52YWx1ZSwgMTApIDog +MjAwOwogICAgICAgICAgICBpZiAoaXNOYU4oYXZhdGFyR3IpIHx8IGF2YXRhckdyIDwgMTAwKSBh +dmF0YXJHciA9IDEwMDsKICAgICAgICAgICAgZWxzZSBpZiAoYXZhdGFyR3IgPiA2MDApIGF2YXRh +ckdyID0gNjAwOwogICAgICAgICAgICB2YXIgZWRpdG9yVHJpZ2dlckVsID0gZG9jdW1lbnQuZ2V0 +RWxlbWVudEJ5SWQoJ2VpbnMtZWRpdG9yLXRyaWdnZXInKTsKICAgICAgICAgICAgdmFyIGVkaXRv +clRyaWdnZXJXZXJ0ID0gZWRpdG9yVHJpZ2dlckVsID8gZWRpdG9yVHJpZ2dlckVsLnZhbHVlIDog +J3JlY2h0cyc7CiAgICAgICAgICAgIGlmIChbJ3JlY2h0cycsICdsaW5rcycsICdtaXR0ZScsICdk +b3BwZWwnXS5pbmRleE9mKGVkaXRvclRyaWdnZXJXZXJ0KSA8IDApIGVkaXRvclRyaWdnZXJXZXJ0 +ID0gJ3JlY2h0cyc7CiAgICAgICAgICAgIC8vIEhpbndlaXM6IGBqYWhyYCBpc3QgaGllciBCRVdV +U1NUIG5pY2h0IGVudGhhbHRlbi4gRGFzIFBsYW51bmdzamFocgogICAgICAgICAgICAvLyB3aXJk +IGF1c3NjaGxpZXNzbGljaCB1ZWJlciBkZW4gZGVkaXppZXJ0ZW4g4oCeSmFociB3ZWNoc2VsbiIt +QnV0dG9uCiAgICAgICAgICAgIC8vIGdlYWVuZGVydCAobWl0IEJlc3RhZXRpZ3VuZyArIFJlbG9h +ZCksIGRhbWl0IFN0YXR1cyB1bmQgQW5zaWNodAogICAgICAgICAgICAvLyBuaWUgYXVzZWluYW5k +ZXJsYXVmZW4uIERhcyBlaW5zLWphaHItRmVsZCBpc3QgbnVyIGRpZSBaaWVsYXVzd2FobC4KICAg +ICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHBhcGllcmtvcmJUYWdlQXVmYmV3YWhy +dW5nOiBwYXBpZXJrb3JiRWwgPyAocGFyc2VJbnQocGFwaWVya29yYkVsLnZhbHVlLCAxMCkgfHwg +MCkgOiAzMCwKICAgICAgICAgICAgICAgIGVtYWlsQXV0b0RvbWFpbjogZW1haWxEb21haW5FbCA/ +IGVtYWlsRG9tYWluRWwudmFsdWUgOiAnQHBvbGl6ZWkubnJ3LmRlJywKICAgICAgICAgICAgICAg +IGF2YXRhckdyb2Vzc2U6IGF2YXRhckdyLAogICAgICAgICAgICAgICAgZWRpdG9yVHJpZ2dlcjog +ZWRpdG9yVHJpZ2dlcldlcnQKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rp +b24gZWluc3RlbGx1bmdlblNwZWljaGVybihhdXRvKSB7CiAgICAgICAgICAgIHZhciBkYXRlbiA9 +IGVpbnN0ZWxsdW5nZW5MZXNlbigpOwogICAgICAgICAgICByZXR1cm4gYXBpUHV0KCcvYXBpL2Fk +bWluL2VpbnN0ZWxsdW5nZW4nLCBkYXRlbikudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAg +ICAgIE9iamVjdC5hc3NpZ24oWi5hZG1pbiwgZGF0ZW4pOwogICAgICAgICAgICAgICAgZGlydHlT +ZXR6ZW4oJ2VpbnN0ZWxsdW5nZW4nLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB0b2FzdChhdXRv +ID8gJ0dlc3BlaWNoZXJ0JyA6ICdFaW5zdGVsbHVuZ2VuIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycp +OwogICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBl +Lm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAgICAgfQogICAgICAgIHZhciBidG5FaW5zU3Bl +aWNoZXJuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1laW5zdGVsbHVuZ2VuLXNwZWlj +aGVybicpOwogICAgICAgIGlmIChidG5FaW5zU3BlaWNoZXJuKSBidG5FaW5zU3BlaWNoZXJuLmFk +ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7IGVpbnN0ZWxsdW5nZW5TcGVpY2hl +cm4oZmFsc2UpOyB9KTsKICAgICAgICAvLyBBdXRvLVNhdmU6IMOEbmRlcnVuZyBhbiBlaW5lbSBL +b25maWctRmVsZCDihpIgbmFjaCA3MDAgbXMgVGlwcC1QYXVzZQogICAgICAgIC8vIGF1dG9tYXRp +c2NoIHNwZWljaGVybiAoZGVib3VuY2VkLCBlaW4gVG9hc3QgcHJvIFJ1aGVwaGFzZSkuCiAgICAg +ICAgdmFyIF9laW5zQXV0b1RpbWVyID0gbnVsbDsKICAgICAgICBbJ2VpbnMtcGFwaWVya29yYi10 +YWdlJywgJ2VpbnMtZW1haWwtZG9tYWluJywgJ2VpbnMtYXZhdGFyLWdyb2Vzc2UnLCAnZWlucy1l +ZGl0b3ItdHJpZ2dlciddLmZvckVhY2goZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgdmFyIGVs +ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgICAgICAgICBpZiAoIWVsKSByZXR1 +cm47CiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkg +ewogICAgICAgICAgICAgICAgaWYgKF9laW5zQXV0b1RpbWVyKSBjbGVhclRpbWVvdXQoX2VpbnNB +dXRvVGltZXIpOwogICAgICAgICAgICAgICAgX2VpbnNBdXRvVGltZXIgPSBzZXRUaW1lb3V0KGZ1 +bmN0aW9uKCkgeyBlaW5zdGVsbHVuZ2VuU3BlaWNoZXJuKHRydWUpOyB9LCA3MDApOwogICAgICAg +ICAgICB9KTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gSW5mb3JtYXRpb24gJiBIaWxmZSDigJQg +UmljaC1UZXh0LUVkaXRvcmVuICsgU2NobGllw59pbmZvCiAgICAgICAgdmFyIGJ0bkloU3BlaWNo +ZXJuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1pbmZvaGlsZmUtc3BlaWNoZXJuJyk7 +CiAgICAgICAgaWYgKGJ0bkloU3BlaWNoZXJuKSBidG5JaFNwZWljaGVybi5hZGRFdmVudExpc3Rl +bmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgZGF0ZW4gPSBpbmZvSGls +ZmVBdXNGZWxkZXJuTGVzZW4oKTsKICAgICAgICAgICAgYXBpUHV0KCcvYXBpL2FkbWluL2VpbnN0 +ZWxsdW5nZW4nLCBkYXRlbikudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIE9iamVj +dC5hc3NpZ24oWi5hZG1pbiwgZGF0ZW4pOwogICAgICAgICAgICAgICAgZGlydHlTZXR6ZW4oJ2lu +Zm9oaWxmZScsIGZhbHNlKTsKICAgICAgICAgICAgICAgIHRvYXN0KCdJbmZvcm1hdGlvbiAmIEhp +bGZlIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycpOwogICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlv +bihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAg +ICAgfSk7CgogICAgICAgIC8vIFN1cHBvcnQtTWFpbC1Wb3JsYWdlIChudXIgUGhpbGlwcCBSb2Vz +Z2VuKS4gU2F2ZSAvIERlZmF1bHQgLyBWb3JzY2hhdS4KICAgICAgICB2YXIgc21UZXh0YXJlYSA9 +IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdXBwb3J0bWFpbC10ZXh0Jyk7CiAgICAgICAgdmFy +IHNtRGlydHkgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VwcG9ydG1haWwtZGlydHkt +aGlud2VpcycpOwogICAgICAgIGlmIChzbVRleHRhcmVhICYmIHNtRGlydHkpIHsKICAgICAgICAg +ICAgc21UZXh0YXJlYS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCkgeyBzbURp +cnR5LnN0eWxlLmRpc3BsYXkgPSAnJzsgfSk7CiAgICAgICAgfQogICAgICAgIHZhciBidG5TbVNw +ZWljaGVybiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tc3VwcG9ydG1haWwtc3BlaWNo +ZXJuJyk7CiAgICAgICAgaWYgKGJ0blNtU3BlaWNoZXJuKSBidG5TbVNwZWljaGVybi5hZGRFdmVu +dExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdGEgPSBkb2N1 +bWVudC5nZXRFbGVtZW50QnlJZCgnc3VwcG9ydG1haWwtdGV4dCcpOwogICAgICAgICAgICBpZiAo +IXRhKSByZXR1cm47CiAgICAgICAgICAgIHZhciBkYXRlbiA9IHsgc3VwcG9ydE1haWxUZXh0OiB0 +YS52YWx1ZSB9OwogICAgICAgICAgICBhcGlQdXQoJy9hcGkvYWRtaW4vZWluc3RlbGx1bmdlbics +IGRhdGVuKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgWi5hZG1pbi5zdXBwb3J0 +TWFpbFRleHQgPSBkYXRlbi5zdXBwb3J0TWFpbFRleHQ7CiAgICAgICAgICAgICAgICBpZiAoc21E +aXJ0eSkgc21EaXJ0eS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgICAgdG9h +c3QoJ1N1cHBvcnQtTWFpbC1Wb3JsYWdlIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycpOwogICAgICAg +ICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2Us +ICdmZWhsZXInKTsgfSk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGJ0blNtRGVmYXVsdCA9IGRv +Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tc3VwcG9ydG1haWwtZGVmYXVsdCcpOwogICAgICAg +IGlmIChidG5TbURlZmF1bHQpIGJ0blNtRGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycs +IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBiZXN0YWV0aWdlbignVm9ybGFnZSBrb21wbGV0dCBh +dWYgZGVuIGVpbmdlYmF1dGVuIERlZmF1bHQgenVyw7xja3NldHplbj9cblxuRGVpbmUgYWt0dWVs +bGVuIMOEbmRlcnVuZ2VuIGdlaGVuIHZlcmxvcmVuLicsIGZ1bmN0aW9uKCkgewogICAgICAgICAg +ICAgICAgYXBpUHV0KCcvYXBpL2FkbWluL2VpbnN0ZWxsdW5nZW4nLCB7IHN1cHBvcnRNYWlsVGV4 +dDogJycgfSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBaLmFkbWluLnN1 +cHBvcnRNYWlsVGV4dCA9ICcnOwogICAgICAgICAgICAgICAgICAgIHZhciB0YSA9IGRvY3VtZW50 +LmdldEVsZW1lbnRCeUlkKCdzdXBwb3J0bWFpbC10ZXh0Jyk7CiAgICAgICAgICAgICAgICAgICAg +aWYgKHRhKSB0YS52YWx1ZSA9ICcnOwogICAgICAgICAgICAgICAgICAgIGlmIChzbURpcnR5KSBz +bURpcnR5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAgICAgICAgICAgdG9hc3Qo +J0F1ZiBEZWZhdWx0IHp1csO8Y2tnZXNldHp0JywgJ2VyZm9sZycpOwogICAgICAgICAgICAgICAg +fSkuY2F0Y2goZnVuY3Rpb24oZSkgeyB0b2FzdCgnRmVobGVyOiAnICsgZS5tZXNzYWdlLCAnZmVo +bGVyJyk7IH0pOwogICAgICAgICAgICB9LCB7IHRpdGVsOiAnRGVmYXVsdC1Wb3JsYWdlIHdpZWRl +cmhlcnN0ZWxsZW4nLCBqYVRleHQ6ICdadXLDvGNrc2V0emVuJywgamFEYW5nZXI6IHRydWUgfSk7 +CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGJ0blNtVm9yc2NoYXUgPSBkb2N1bWVudC5nZXRFbGVt +ZW50QnlJZCgnYnRuLXN1cHBvcnRtYWlsLXZvcnNjaGF1Jyk7CiAgICAgICAgaWYgKGJ0blNtVm9y +c2NoYXUpIGJ0blNtVm9yc2NoYXUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigp +IHsKICAgICAgICAgICAgLy8gQWt0dWVsbGUgRWluZ2FiZSB0ZW1wb3JhZXIgYWxzIFZvcmxhZ2Ug +YmVudXR6ZW4g4oCUIGF1Y2ggd2VubgogICAgICAgICAgICAvLyBub2NoIG5pY2h0IGdlc3BlaWNo +ZXJ0OyBzcGFydCBkYXMgImVyc3Qgc3BlaWNoZXJuLCBkYW5uCiAgICAgICAgICAgIC8vIHRlc3Rl +biItSGluLXVuZC1IZXIuCiAgICAgICAgICAgIHZhciB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRC +eUlkKCdzdXBwb3J0bWFpbC10ZXh0Jyk7CiAgICAgICAgICAgIHZhciBhbHQgPSBaLmFkbWluLnN1 +cHBvcnRNYWlsVGV4dDsKICAgICAgICAgICAgaWYgKHRhICYmIHRhLnZhbHVlLnRyaW0oKSkgWi5h +ZG1pbi5zdXBwb3J0TWFpbFRleHQgPSB0YS52YWx1ZTsKICAgICAgICAgICAgdmFyIG1haWx0byA9 +ICdtYWlsdG86cGhpbGlwcC5yb2VzZ2VuQHBvbGl6ZWkubnJ3LmRlJwogICAgICAgICAgICAgICAg +KyAnP3N1YmplY3Q9JyArIGVuY29kZVVSSUNvbXBvbmVudCgnVkkzIERHTCBQbGFudW5nIC0gRG9y +dG11bmQnKQogICAgICAgICAgICAgICAgKyAnJmJvZHk9JyArIGVuY29kZVVSSUNvbXBvbmVudChz +dXBwb3J0TWFpbEJvZHlCYXVlbigpKTsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYg +PSBtYWlsdG87CiAgICAgICAgICAgIC8vIFN0YXRlIHp1cnVlY2tyb2xsZW4sIGRhbWl0IFZvcnNj +aGF1IG5pY2h0IHZlcnNlaGVudGxpY2ggcGVyc2lzdGllcnQKICAgICAgICAgICAgWi5hZG1pbi5z +dXBwb3J0TWFpbFRleHQgPSBhbHQ7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEphaHIgd2VjaHNl +bG46IFBsYW51bmdzamFociBhdWYgZGFzIGltIEZlbGQgR0VXw4RITFRFIEphaHIgc2V0emVuIOKA +lCB2b3IKICAgICAgICAvLyBPREVSIHp1csO8Y2suIERhdGVuIG5ldSBsYWRlbiwgYWxsZSBWaWV3 +cyByZW5kZXJuLiBFaW50cmFlZ2UgYmxlaWJlbgogICAgICAgIC8vIHVudGVyIGlocmVuIGFic29s +dXRlbiBEYXR1bXNzY2hsdWVzc2VsbiBlcmhhbHRlbiAoa2VpbiBEYXRlbnZlcmx1c3QpOwogICAg +ICAgIC8vIGRlciBCdWZmZXItSmFudWFyIGRlcyBGb2xnZWphaHJlcyB3aXJkIGluIGRlciBuZXVl +biBBbnNpY2h0IHNpY2h0YmFyLgogICAgICAgIC8vIChGcnVlaGVyOiBoYXJ0ZXMgYWx0KzEg4oCU +IGlnbm9yaWVydGUgZGllIEF1c3dhaGwgdW5kIHNwcmFuZyB6LkIuIHZvbgogICAgICAgIC8vICAy +MDI3IHRyb3R6IEVpbmdhYmUgMjAyNiBhdWYgMjAyOC4gSmV0enQgemllbGdlbmF1LikKICAgICAg +ICB2YXIgYnRuSmFocmVzd2VjaHNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tamFo +cmVzd2VjaHNlbCcpOwogICAgICAgIGlmIChidG5KYWhyZXN3ZWNoc2VsKSBidG5KYWhyZXN3ZWNo +c2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZh +ciBhbHQgPSBaLmFkbWluLmphaHIgfHwgbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpOwogICAgICAg +ICAgICB2YXIgZmVsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaW5zLWphaHInKTsKICAg +ICAgICAgICAgdmFyIG5ldSA9IHBhcnNlSW50KGZlbGQgPyBmZWxkLnZhbHVlIDogJycsIDEwKTsK +ICAgICAgICAgICAgaWYgKCFuZXUgfHwgbmV1IDwgMjAyMCB8fCBuZXUgPiAyMDk5KSB7CiAgICAg +ICAgICAgICAgICB0b2FzdCgnQml0dGUgZWluIGfDvGx0aWdlcyBKYWhyIHp3aXNjaGVuIDIwMjAg +dW5kIDIwOTkgd8OkaGxlbicsICd3YXJudW5nJyk7CiAgICAgICAgICAgICAgICBpZiAoZmVsZCkg +ZmVsZC52YWx1ZSA9IGFsdDsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQog +ICAgICAgICAgICBpZiAobmV1ID09PSBhbHQpIHsKICAgICAgICAgICAgICAgIHRvYXN0KCdEYXMg +UGxhbnVuZ3NqYWhyIGlzdCBiZXJlaXRzICcgKyBhbHQgKyAnLicsICdpbmZvJyk7CiAgICAgICAg +ICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJpY2h0dW5nID0g +bmV1ID4gYWx0ID8gJ3ZvcicgOiAnenVyw7xjayc7CiAgICAgICAgICAgIGJlc3RhZXRpZ2VuKCdQ +bGFudW5nc2phaHIgdm9uICcgKyBhbHQgKyAnIGF1ZiAnICsgbmV1ICsgJyB3ZWNoc2VsbiAoJyAr +IHJpY2h0dW5nICsgJyk/XG5cbicgKwogICAgICAgICAgICAgICAgJ0RpZSBQbGFudW5nc2Fuc2lj +aHQgemVpZ3QgZGFuYWNoIEphbnVhciAnICsgbmV1ICsgJyBiaXMgSmFudWFyICcgKyAobmV1ICsg +MSkgKyAnLlxuJyArCiAgICAgICAgICAgICAgICAnS2VpbiBEYXRlbnZlcmx1c3Qg4oCUIGFsbGUg +RWludHLDpGdlIGJsZWliZW4gdW50ZXIgaWhyZW0gRGF0dW0gZXJoYWx0ZW4uJywgZnVuY3Rpb24o +KSB7CiAgICAgICAgICAgICAgICBhcGlQdXQoJy9hcGkvYWRtaW4vZWluc3RlbGx1bmdlbicsIHsg +amFocjogbmV1IH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdG9hc3Qo +J1BsYW51bmdzamFociAnICsgbmV1ICsgJyDigJQgU2VpdGUgd2lyZCBuZXUgZ2VsYWRlbicsICdl +cmZvbGcnKTsKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB3aW5k +b3cubG9jYXRpb24ucmVsb2FkKCk7IH0sIDgwMCk7CiAgICAgICAgICAgICAgICB9KS5jYXRjaChm +dW5jdGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7 +CiAgICAgICAgICAgIH0sIHsgdGl0ZWw6ICdKYWhyIHdlY2hzZWxuJywgamFUZXh0OiAnV2VjaHNl +bG4nIH0pOwogICAgICAgIH0pOwoKICAgICAgICAvLyBGZWllcnRhZ2UKICAgICAgICBkb2N1bWVu +dC5nZXRFbGVtZW50QnlJZCgnYnRuLWZlaWVydGFnLW5ldScpLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns +aWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIFouYWRtaW4uZmVpZXJ0YWdlID0gWi5hZG1p +bi5mZWllcnRhZ2UgfHwgW107CiAgICAgICAgICAgIC8vIEVyc3QgYWt0dWVsbCBzaWNodGJhcmUg +RWluZ2FiZW4gaW5zIE1vZGVsbCB6dXJ1ZWNrc3BpZWxlbiwgZGFtaXQKICAgICAgICAgICAgLy8g +dW5iZWthbm50ZSBFZGl0cyBiZWltIFJlLVJlbmRlciBuaWNodCB2ZXJsb3JlbiBnZWhlbi4KICAg +ICAgICAgICAgdmFyIGFrdHVlbGwgPSBmZWllcnRhZ2VBdXNUYWJlbGxlTGVzZW4oKTsKICAgICAg +ICAgICAgaWYgKGFrdHVlbGwubGVuZ3RoKSBaLmFkbWluLmZlaWVydGFnZSA9IGFrdHVlbGw7CiAg +ICAgICAgICAgIC8vIERlZmF1bHQtS2F0ZWdvcmllIGF1cyBkZW0gYWt0dWVsbGVuIEZpbHRlciAo +ZmFsbHMgZWluZSBiZXN0aW1tdGUKICAgICAgICAgICAgLy8gS2F0ZWdvcmllIGdlZmlsdGVydCBp +c3QpLCBzb25zdCBnZXNldHpsaWNoLgogICAgICAgICAgICB2YXIga2F0RmlsdGVyID0gKGRvY3Vt +ZW50LmdldEVsZW1lbnRCeUlkKCdmZWllcnRhZ2UtZmlsdGVyLWthdGVnb3JpZScpIHx8IHt9KS52 +YWx1ZTsKICAgICAgICAgICAgdmFyIGthdE5ldSA9IChrYXRGaWx0ZXIgJiYga2F0RmlsdGVyICE9 +PSAnYWxsZScpID8ga2F0RmlsdGVyIDogJ2dlc2V0emxpY2gnOwogICAgICAgICAgICBaLmFkbWlu +LmZlaWVydGFnZS5wdXNoKHsKICAgICAgICAgICAgICAgIGRhdHVtOiAnJywKICAgICAgICAgICAg +ICAgIGJlemVpY2hudW5nOiAnJywKICAgICAgICAgICAgICAgIGthdGVnb3JpZToga2F0TmV1LAog +ICAgICAgICAgICAgICAgYWt0aXY6IHRydWUsCiAgICAgICAgICAgICAgICB3aWNodGlnOiBmYWxz +ZSwKICAgICAgICAgICAgICAgIGljb246ICcnLAogICAgICAgICAgICAgICAga3VyemJlc2NocmVp +YnVuZzogJycsCiAgICAgICAgICAgICAgICBpbmZvVXJsOiAnJwogICAgICAgICAgICB9KTsKICAg +ICAgICAgICAgZmVpZXJ0YWdlVGFiZWxsZVJlbmRlcm4oKTsKICAgICAgICB9KTsKICAgICAgICBk +b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVpZXJ0YWdlLXRib2R5JykuYWRkRXZlbnRMaXN0ZW5l +cignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIC8vIEljb24tUGlja2VyIChhbmFs +b2cgenUgU29uZGVydGVybWluZW4pLiBTZXR6dCBkYXMgaGlkZGVuIGZpZWxkCiAgICAgICAgICAg +IC8vICdpY29uJyB1bmQgYWt0dWFsaXNpZXJ0IGRlbiBCdXR0b24tVGV4dC4gUmVzZXQgYXVmIEth +dGVnb3JpZS1EZWZhdWx0CiAgICAgICAgICAgIC8vIGVyZm9sZ3QsIGluZGVtIGRlciBVc2VyIGlt +IFBpY2tlciBkYXMgUmVzZXQtU3ltYm9sIHdhZWhsdCDigJQgZGEKICAgICAgICAgICAgLy8gZW1v +amlQaWNrZXJaZWlnZW4gZGFzIG5pY2h0IGRpcmVrdCBhbmJpZXRldCwga2FubiBkZXIgVXNlciBh +dWNoCiAgICAgICAgICAgIC8vIGRhcyBha3R1ZWxsZSBJY29uLUZlbGQgbWFudWVsbCBsZWVyZW4g +dWViZXIgRGV2VG9vbHM7IGVpbmZhY2hzdGUKICAgICAgICAgICAgLy8gUHJheGlzLUxvZXN1bmc6 +IGVpbmZhY2ggZWluIGFuZGVyZXMgSWNvbiB3YWVobGVuLgogICAgICAgICAgICB2YXIgaWNvbkJ0 +biA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5mZWllcnRhZy1pY29uLWJ0bicpOwogICAgICAgICAgICBp +ZiAoaWNvbkJ0bikgewogICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAg +ICAgICAgICAgIGVtb2ppUGlja2VyWmVpZ2VuKGljb25CdG4sIGZ1bmN0aW9uKHYpIHsKICAgICAg +ICAgICAgICAgICAgICB2YXIgaWR4ID0gaWNvbkJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4Jyk7 +CiAgICAgICAgICAgICAgICAgICAgdmFyIGhpZGRlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io +Jy5mZWllcnRhZy1pbnB1dFtkYXRhLWZlbGQ9Imljb24iXVtkYXRhLWlkeD0iJyArIGlkeCArICci +XScpOwogICAgICAgICAgICAgICAgICAgIGlmIChoaWRkZW4pIHsKICAgICAgICAgICAgICAgICAg +ICAgICAgaGlkZGVuLnZhbHVlID0gdiB8fCAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgaGlk +ZGVuLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkp +OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpY29uQnRuLnRleHRD +b250ZW50ID0gdiB8fCAn4oCUJzsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg +cmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBpbmZvQnRuID0gZS50YXJnZXQu +Y2xvc2VzdCgnLmZlaWVydGFnLWluZm8tYnRuJyk7CiAgICAgICAgICAgIGlmIChpbmZvQnRuKSB7 +CiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgZmVp +ZXJ0YWdlSW5mb01vZGFsWmVpZ2VuKGluZm9CdG4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpKTsK +ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgYnRu +ID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtYWt0aW9uPSJmZWllcnRhZy1sb2VzY2hlbiJdJyk7 +CiAgICAgICAgICAgIGlmIChidG4pIHsgWi5hZG1pbi5mZWllcnRhZ2Uuc3BsaWNlKHBhcnNlSW50 +KGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4JykpLCAxKTsgZmVpZXJ0YWdlVGFiZWxsZVJlbmRl +cm4oKTsgfQogICAgICAgIH0pOwogICAgICAgIC8vIEZpbHRlciAoS2F0ZWdvcmllIC8gSmFociAv +IG51ciBha3RpdmUpCiAgICAgICAgWydmZWllcnRhZ2UtZmlsdGVyLWthdGVnb3JpZScsICdmZWll +cnRhZ2UtZmlsdGVyLWphaHInLCAnZmVpZXJ0YWdlLWZpbHRlci1udXItYWt0aXYnXS5mb3JFYWNo +KGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRC +eUlkKGlkKTsKICAgICAgICAgICAgaWYgKGVsKSBlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2Un +LCBmZWllcnRhZ2VGaWx0ZXJBbndlbmRlbik7CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQu +Z2V0RWxlbWVudEJ5SWQoJ2J0bi1mZWllcnRhZ2Utc3BlaWNoZXJuJykuYWRkRXZlbnRMaXN0ZW5l +cignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGRhdGVuID0gZmVpZXJ0YWdl +QXVzVGFiZWxsZUxlc2VuKCk7CiAgICAgICAgICAgIGFwaVB1dCgnL2FwaS9hZG1pbi9mZWllcnRh +Z2UnLCBkYXRlbikudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIFouYWRtaW4uZmVp +ZXJ0YWdlID0gZGF0ZW47CiAgICAgICAgICAgICAgICB0YWdJbmZvc0JlcmVjaG5lbigpOwogICAg +ICAgICAgICAgICAga29wZlJlbmRlcm4oKTsgICAgICAgIC8vIEZlaWVydGFncy1IaWdobGlnaHQg +aW4gZGVyIEhhdXB0cGxhbnVuZ3MtSGVhZGVyLVplaWxlIGF1ZmZyaXNjaGVuCiAgICAgICAgICAg +ICAgICBkaXJ0eVNldHplbignZmVpZXJ0YWdlJywgZmFsc2UpOwogICAgICAgICAgICAgICAgLy8g +Ik51ciBha3RpdmUgemVpZ2VuIi1GaWx0ZXIgenVydWVja3NldHplbiDigJQgc29uc3Qgc2llaHQg +ZGVyIFVzZXIKICAgICAgICAgICAgICAgIC8vIGdlcmFkZSBoaW56dWdlZnVlZ3RlIChpbmFrdGl2 +ZSkgRmVpZXJ0YWdlIG5hY2ggZGVtIFNhdmUgbmljaHQKICAgICAgICAgICAgICAgIC8vIHVuZCBn +bGF1YnQsIGRpZSBMaXN0ZSBzZWkgdmVyc2Nod3VuZGVuLgogICAgICAgICAgICAgICAgdmFyIG51 +ckFrdGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlaWVydGFnZS1maWx0ZXItbnVyLWFr +dGl2Jyk7CiAgICAgICAgICAgICAgICBpZiAobnVyQWt0aXYgJiYgbnVyQWt0aXYuY2hlY2tlZCkg +ewogICAgICAgICAgICAgICAgICAgIG51ckFrdGl2LmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAg +ICAgICAgICAgICBmZWllcnRhZ2VGaWx0ZXJBbndlbmRlbigpOwogICAgICAgICAgICAgICAgfQog +ICAgICAgICAgICAgICAgdG9hc3QoJ0ZlaWVydGFnZSBnZXNwZWljaGVydCcsICdlcmZvbGcnKTsK ICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkgeyB0b2FzdCgnRmVobGVyOiAnICsgZS5t -ZXNzYWdlLCAnZmVobGVyJyk7IH0pOwogICAgICAgIH0pOwoKICAgICAgICAvLyBSZWloZW5mb2xn -ZSAvIExvZXNjaGVuIOKAlCBFdmVudC1EZWxlZ2F0aW9uIGF1ZiBiZWlkZSBUYWJlbGxlbiwKICAg -ICAgICAvLyBkaWVzZWxiZSBMb2dpayBmdWVyIERncmFkIHVuZCBGdW5rdGlvbmVuLCBudXIgdW50 -ZXJzY2hpZWRsaWNoZXIKICAgICAgICAvLyBTdGF0ZS1TbG90IGluIFouYWRtaW4uCiAgICAgICAg -dmFyIGxpc3RlblRhYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZG1pbi10YWItbGlzdGVu -Jyk7CiAgICAgICAgaWYgKGxpc3RlblRhYikgbGlzdGVuVGFiLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns -aWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgYnRuID0gZS50YXJnZXQuY2xvc2Vz -dCgnYnV0dG9uW2RhdGEtYWt0aW9uXScpOwogICAgICAgICAgICBpZiAoIWJ0bikgcmV0dXJuOwog -ICAgICAgICAgICB2YXIgYWt0aW9uID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1ha3Rpb24nKTsK -ICAgICAgICAgICAgdmFyIGlkeCAgICA9IHBhcnNlSW50KGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEt -aWR4JyksIDEwKTsKICAgICAgICAgICAgLy8gRGllbnN0Z3JhZGUtQWt0aW9uZW4KICAgICAgICAg -ICAgaWYgKGFrdGlvbiA9PT0gJ2RncmFkLXVwJyB8fCBha3Rpb24gPT09ICdkZ3JhZC1kb3duJyB8 -fCBha3Rpb24gPT09ICdkZ3JhZC1sb2VzY2hlbicpIHsKICAgICAgICAgICAgICAgIC8vIFZvciBq -ZWRlciBTdHJ1a3R1cmFlbmRlcnVuZzogYWt0dWVsbGUgSW5wdXQtV2VydGUgZWluc2FtbWVsbiwK -ICAgICAgICAgICAgICAgIC8vIGRhbWl0IG5pY2h0LWdlc3BlaWNoZXJ0ZSBFZGl0aWVydW5nZW4g -ZXJoYWx0ZW4gYmxlaWJlbi4KICAgICAgICAgICAgICAgIFouYWRtaW4uZGllbnN0Z3JhZGUgPSBk -aWVuc3RncmFkZUF1c1RhYmVsbGVMZXNlbigpOwogICAgICAgICAgICAgICAgaWYgKGFrdGlvbiA9 -PT0gJ2RncmFkLXVwJyAmJiBpZHggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9 -IFouYWRtaW4uZGllbnN0Z3JhZGVbaWR4LTFdOwogICAgICAgICAgICAgICAgICAgIFouYWRtaW4u -ZGllbnN0Z3JhZGVbaWR4LTFdID0gWi5hZG1pbi5kaWVuc3RncmFkZVtpZHhdOwogICAgICAgICAg -ICAgICAgICAgIFouYWRtaW4uZGllbnN0Z3JhZGVbaWR4XSAgID0gdG1wOwogICAgICAgICAgICAg -ICAgfSBlbHNlIGlmIChha3Rpb24gPT09ICdkZ3JhZC1kb3duJyAmJiBpZHggPCBaLmFkbWluLmRp -ZW5zdGdyYWRlLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdG1wMiA9IFou -YWRtaW4uZGllbnN0Z3JhZGVbaWR4KzFdOwogICAgICAgICAgICAgICAgICAgIFouYWRtaW4uZGll -bnN0Z3JhZGVbaWR4KzFdID0gWi5hZG1pbi5kaWVuc3RncmFkZVtpZHhdOwogICAgICAgICAgICAg -ICAgICAgIFouYWRtaW4uZGllbnN0Z3JhZGVbaWR4XSAgID0gdG1wMjsKICAgICAgICAgICAgICAg -IH0gZWxzZSBpZiAoYWt0aW9uID09PSAnZGdyYWQtbG9lc2NoZW4nKSB7CiAgICAgICAgICAgICAg -ICAgICAgWi5hZG1pbi5kaWVuc3RncmFkZS5zcGxpY2UoaWR4LCAxKTsKICAgICAgICAgICAgICAg -IH0KICAgICAgICAgICAgICAgIGxpc3RlbkRpZW5zdGdyYWRlUmVuZGVybigpOwogICAgICAgICAg -ICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEZ1bmt0aW9uZW4tQWt0 -aW9uZW4KICAgICAgICAgICAgaWYgKGFrdGlvbiA9PT0gJ2Z1bmstdXAnIHx8IGFrdGlvbiA9PT0g -J2Z1bmstZG93bicgfHwgYWt0aW9uID09PSAnZnVuay1sb2VzY2hlbicpIHsKICAgICAgICAgICAg -ICAgIFouYWRtaW4uZnVua3Rpb25lbiA9IGZ1bmt0aW9uZW5BdXNUYWJlbGxlTGVzZW4oKTsKICAg -ICAgICAgICAgICAgIGlmIChha3Rpb24gPT09ICdmdW5rLXVwJyAmJiBpZHggPiAwKSB7CiAgICAg -ICAgICAgICAgICAgICAgdmFyIHQgPSBaLmFkbWluLmZ1bmt0aW9uZW5baWR4LTFdOwogICAgICAg -ICAgICAgICAgICAgIFouYWRtaW4uZnVua3Rpb25lbltpZHgtMV0gPSBaLmFkbWluLmZ1bmt0aW9u -ZW5baWR4XTsKICAgICAgICAgICAgICAgICAgICBaLmFkbWluLmZ1bmt0aW9uZW5baWR4XSAgID0g -dDsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWt0aW9uID09PSAnZnVuay1kb3duJyAmJiBp -ZHggPCBaLmFkbWluLmZ1bmt0aW9uZW4ubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgICAgICAg -IHZhciB0MiA9IFouYWRtaW4uZnVua3Rpb25lbltpZHgrMV07CiAgICAgICAgICAgICAgICAgICAg -Wi5hZG1pbi5mdW5rdGlvbmVuW2lkeCsxXSA9IFouYWRtaW4uZnVua3Rpb25lbltpZHhdOwogICAg -ICAgICAgICAgICAgICAgIFouYWRtaW4uZnVua3Rpb25lbltpZHhdICAgPSB0MjsKICAgICAgICAg -ICAgICAgIH0gZWxzZSBpZiAoYWt0aW9uID09PSAnZnVuay1sb2VzY2hlbicpIHsKICAgICAgICAg -ICAgICAgICAgICBaLmFkbWluLmZ1bmt0aW9uZW4uc3BsaWNlKGlkeCwgMSk7CiAgICAgICAgICAg -ICAgICB9CiAgICAgICAgICAgICAgICBsaXN0ZW5GdW5rdGlvbmVuUmVuZGVybigpOwogICAgICAg -ICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIE1pa3JvdGVhbXMtRWRpdG9yIOKAlCBQaGFz -ZSAyICgyMDI2LTA1LTE5KS4gWi5hZG1pbi5taWtyb3RlYW1zIGFscwogICAgICAgIC8vIGdlcGZs -ZWd0ZSBMaXN0ZS4gUGVyc29uZW4gcHJvIFRlYW0gdmlhIE1vZGFsIChtaWtyb3RlYW1QZXJzb25l -bkRpYWxvZykuCiAgICAgICAgdmFyIGJ0bk10TmV1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo -J2J0bi1taWtyb3RlYW0tbmV1Jyk7CiAgICAgICAgaWYgKGJ0bk10TmV1KSBidG5NdE5ldS5hZGRF -dmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoIVouYWRt -aW4ubWlrcm90ZWFtcykgWi5hZG1pbi5taWtyb3RlYW1zID0gW107CiAgICAgICAgICAgIC8vIFN0 -cnVrdHVyaWVydGUgSUQtVm9yc2NobGFnOiB0XzxTdGFuZG9ydD5fPEdydXBwZT47IGJlaSBsZWVy -ZW4KICAgICAgICAgICAgLy8gU3RhbW0tRmVsZGVybiBibGVpYnQgZGVyIFVzZXIgc2VsYnN0IHp1 -c3RhZW5kaWcuCiAgICAgICAgICAgIFouYWRtaW4ubWlrcm90ZWFtcyA9IG1pa3JvdGVhbXNBdXNU -YWJlbGxlTGVzZW4oKTsKICAgICAgICAgICAgWi5hZG1pbi5taWtyb3RlYW1zLnB1c2goeyBpZDog -J3RfTkVVXycgKyBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KSwgbmFtZTogJycsIHN0YW5kb3J0OiAn -JywgZ3J1cHBlOiAnJywgcGVyc29uSWRzOiBbXSB9KTsKICAgICAgICAgICAgbWlrcm90ZWFtc1Jl -bmRlcm4oKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgYnRuTXRTcGVpY2hlcm4gPSBkb2N1bWVu -dC5nZXRFbGVtZW50QnlJZCgnYnRuLW1pa3JvdGVhbXMtc3BlaWNoZXJuJyk7CiAgICAgICAgaWYg -KGJ0bk10U3BlaWNoZXJuKSBidG5NdFNwZWljaGVybi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycs -IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgbGlzdGUgPSBtaWtyb3RlYW1zQXVzVGFiZWxs -ZUxlc2VuKCk7CiAgICAgICAgICAgIFouYWRtaW4ubWlrcm90ZWFtcyA9IGxpc3RlOwogICAgICAg -ICAgICBhcGlQdXQoJy9hcGkvYWRtaW4nLCBaLmFkbWluKS50aGVuKGZ1bmN0aW9uKCkgewogICAg -ICAgICAgICAgICAgbWlrcm90ZWFtc1JlbmRlcm4oKTsKICAgICAgICAgICAgICAgIHRvYXN0KGxp -c3RlLmxlbmd0aCArICcgTWlrcm90ZWFtcyBnZXNwZWljaGVydCcsICdlcmZvbGcnKTsKICAgICAg +ZXNzYWdlLCAnZmVobGVyJyk7IH0pOwogICAgICAgIH0pOwoKICAgICAgICAvLyBGZXJpZW4KICAg +ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWZlcmllbi1uZXUnKS5hZGRFdmVudExp +c3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBaLmFkbWluLmZlcmllbiA9 +IFouYWRtaW4uZmVyaWVuIHx8IFtdOwogICAgICAgICAgICBaLmFkbWluLmZlcmllbi5wdXNoKHsg +dm9uOiAnJywgYmlzOiAnJywgbmFtZTogJycgfSk7CiAgICAgICAgICAgIGZlcmllblRhYmVsbGVS +ZW5kZXJuKCk7CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zl +cmllbi10Ym9keScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAg +ICAgICAgICB2YXIgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtYWt0aW9uPSJmZXJpZW4t +bG9lc2NoZW4iXScpOwogICAgICAgICAgICBpZiAoYnRuKSB7IFouYWRtaW4uZmVyaWVuLnNwbGlj +ZShwYXJzZUludChidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpKSwgMSk7IGZlcmllblRhYmVs +bGVSZW5kZXJuKCk7IH0KICAgICAgICB9KTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ +ZCgnYnRuLWZlcmllbi1zcGVpY2hlcm4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0 +aW9uKCkgewogICAgICAgICAgICB2YXIgZGF0ZW4gPSBmZXJpZW5BdXNUYWJlbGxlTGVzZW4oKTsK +ICAgICAgICAgICAgYXBpUHV0KCcvYXBpL2FkbWluL2ZlcmllbicsIGRhdGVuKS50aGVuKGZ1bmN0 +aW9uKCkgewogICAgICAgICAgICAgICAgWi5hZG1pbi5mZXJpZW4gPSBkYXRlbjsKICAgICAgICAg +ICAgICAgIHRhZ0luZm9zQmVyZWNobmVuKCk7CiAgICAgICAgICAgICAgICBrb3BmUmVuZGVybigp +OyAgICAgICAgLy8gRmVyaWVuLU1hcmtpZXJ1bmcgaW4gZGVyIEhhdXB0cGxhbnVuZ3MtSGVhZGVy +LVplaWxlIGF1ZmZyaXNjaGVuCiAgICAgICAgICAgICAgICBkaXJ0eVNldHplbignZmVyaWVuJywg +ZmFsc2UpOwogICAgICAgICAgICAgICAgdGFiRHJhZnRMb2VzY2hlbignZmVyaWVuJyk7CiAgICAg +ICAgICAgICAgICB0b2FzdCgnRmVyaWVuIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycpOwogICAgICAg +ICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2Us +ICdmZWhsZXInKTsgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNvbmRlcnRlcm1pbmUg4oCU +IE5ldWFubGFnZSDDtmZmbmV0IE1vZGFsCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo +J2J0bi1zb25kZXJ0ZXJtaW4tbmV1JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlv +bigpIHsKICAgICAgICAgICAgc29uZGVyRWRpdE1vZGFsWmVpZ2VuKCcnKTsKICAgICAgICB9KTsK +ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc29uZGVydGVybWluZS10Ym9keScpLmFk +ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgYmVh +cmIgPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249InNvbmRlci1iZWFyYmVpdGVuIl0n +KTsKICAgICAgICAgICAgaWYgKGJlYXJiKSB7IHNvbmRlckVkaXRNb2RhbFplaWdlbihiZWFyYi5n +ZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKSk7IHJldHVybjsgfQogICAgICAgICAgICB2YXIgbG9lc2No +ID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtYWt0aW9uPSJzb25kZXItbG9lc2NoZW4iXScpOwog +ICAgICAgICAgICBpZiAobG9lc2NoKSB7CiAgICAgICAgICAgICAgICB2YXIgaWQgPSBsb2VzY2gu +Z2V0QXR0cmlidXRlKCdkYXRhLWlkJyk7CiAgICAgICAgICAgICAgICB2YXIgcyA9IHNvbmRlckJ5 +SWQoaWQpOwogICAgICAgICAgICAgICAgaWYgKCFzKSByZXR1cm47CiAgICAgICAgICAgICAgICB2 +YXIgc0xhYmVsID0gcy50aXRlbCB8fCBzb25kZXJUaXRlbEF1c1RleHQocy50ZXh0KSB8fCAnKG9o +bmUgVGl0ZWwpJzsKICAgICAgICAgICAgICAgIGJlc3RhZXRpZ2VuKCdIaW53ZWlzIOKAnicgKyBz +TGFiZWwgKyAnIiAoJyArIHNvbmRlckRhdHVtTGFiZWwocykgKyAnKSB3aXJrbGljaCBsw7ZzY2hl +bj8nLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdGUgPSAoWi5hZG1p +bi5zb25kZXJ0ZXJtaW5lIHx8IFtdKS5maWx0ZXIoZnVuY3Rpb24oeCkgeyByZXR1cm4geC5pZCAh +PT0gaWQ7IH0pOwogICAgICAgICAgICAgICAgICAgIGFwaVB1dCgnL2FwaS9hZG1pbi9zb25kZXJ0 +ZXJtaW5lJywgbGlzdGUpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAg +IFouYWRtaW4uc29uZGVydGVybWluZSA9IGxpc3RlOwogICAgICAgICAgICAgICAgICAgICAgICB0 +YWdJbmZvc0JlcmVjaG5lbigpOwogICAgICAgICAgICAgICAgICAgICAgICBrb3BmUmVuZGVybigp +OwogICAgICAgICAgICAgICAgICAgICAgICBzb25kZXJ0ZXJtaW5lUmVuZGVybigpOwogICAgICAg +ICAgICAgICAgICAgICAgICB0b2FzdCgnSGlud2VpcyBnZWzDtnNjaHQnLCAnZXJmb2xnJyk7CiAg +ICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkgeyB0b2FzdCgnRmVobGVyOiAn +ICsgZS5tZXNzYWdlLCAnZmVobGVyJyk7IH0pOwogICAgICAgICAgICAgICAgfSwgeyB0aXRlbDog +J0hpbndlaXMgbMO2c2NoZW4nLCBqYURhbmdlcjogdHJ1ZSB9KTsKICAgICAgICAgICAgfQogICAg +ICAgIH0pOwoKICAgICAgICAvLyBCYWNrdXBzCiAgICAgICAgdmFyIGJ0bkJrTmV1ID0gZG9jdW1l +bnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1iYWNrdXAtbmV1Jyk7CiAgICAgICAgaWYgKGJ0bkJrTmV1 +KSBidG5Ca05ldS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAg +ICAgICBhcGlQb3N0KCcvYXBpL3BsYW51bmcvYmFja3VwJywge30pLnRoZW4oZnVuY3Rpb24ocikg +ewogICAgICAgICAgICAgICAgdG9hc3QoJ0JhY2t1cCBlcnN0ZWxsdDogJyArIHIuZGF0ZWluYW1l +LCAnZXJmb2xnJyk7CiAgICAgICAgICAgICAgICBiYWNrdXBUYWJlbGxlTGFkZW4oKTsKICAgICAg ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkgeyB0b2FzdCgnRmVobGVyOiAnICsgZS5tZXNzYWdl -LCAnZmVobGVyJyk7IH0pOwogICAgICAgIH0pOwoKICAgICAgICAvLyBUYWJlbGxlbi1FdmVudC1E -ZWxlZ2F0aW9uOiBVcC9Eb3duL0xvZXNjaGVuL1BlcnNvbmVuLU1vZGFsCiAgICAgICAgdmFyIG10 -VGFiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkbWluLXRhYi1taWtyb3RlYW1zJyk7CiAg -ICAgICAgaWYgKG10VGFiKSBtdFRhYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9u -KGUpIHsKICAgICAgICAgICAgdmFyIGJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoJ2J1dHRvbltkYXRh -LWFrdGlvbl0nKTsKICAgICAgICAgICAgaWYgKCFidG4pIHJldHVybjsKICAgICAgICAgICAgdmFy -IGFrdGlvbiA9IGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtYWt0aW9uJyk7CiAgICAgICAgICAgIHZh -ciBpZHggICAgPSBwYXJzZUludChidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpLCAxMCk7CiAg -ICAgICAgICAgIGlmIChpc05hTihpZHgpKSByZXR1cm47CiAgICAgICAgICAgIGlmIChha3Rpb24g -PT09ICdtdC1wZXJzb25lbicpIHsKICAgICAgICAgICAgICAgIG1pa3JvdGVhbVBlcnNvbmVuRGlh -bG9nKGlkeCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAg -ICAgLy8gU3RydWt0dXJhZW5kZXJ1bmdlbiDigJQgdm9yaGVyIGRpZSBJbnB1dHMgZWluc2FtbWVs -bi4KICAgICAgICAgICAgWi5hZG1pbi5taWtyb3RlYW1zID0gbWlrcm90ZWFtc0F1c1RhYmVsbGVM -ZXNlbigpOwogICAgICAgICAgICB2YXIgbCA9IFouYWRtaW4ubWlrcm90ZWFtczsKICAgICAgICAg -ICAgaWYgKGFrdGlvbiA9PT0gJ210LXVwJyAmJiBpZHggPiAwKSB7CiAgICAgICAgICAgICAgICB2 -YXIgdCA9IGxbaWR4LTFdOyBsW2lkeC0xXSA9IGxbaWR4XTsgbFtpZHhdID0gdDsKICAgICAgICAg -ICAgfSBlbHNlIGlmIChha3Rpb24gPT09ICdtdC1kb3duJyAmJiBpZHggPCBsLmxlbmd0aCAtIDEp -IHsKICAgICAgICAgICAgICAgIHZhciB0MiA9IGxbaWR4KzFdOyBsW2lkeCsxXSA9IGxbaWR4XTsg -bFtpZHhdID0gdDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWt0aW9uID09PSAnbXQtbG9lc2No -ZW4nKSB7CiAgICAgICAgICAgICAgICBsLnNwbGljZShpZHgsIDEpOwogICAgICAgICAgICB9CiAg -ICAgICAgICAgIG1pa3JvdGVhbXNSZW5kZXJuKCk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEUt -TWFpbC1Wb3JsYWdlbiDigJQgS2FydGVuLUxheW91dCAoRmluZGluZyBDLjcgLyBTcGVjIEYuMSkK -ICAgICAgICAvLyBLbGljayBhdWYgZWluZSBLYXJ0ZSBvZWZmbmV0IGVtYWlsVm9ybGFnZUJlYXJi -ZWl0ZW5Nb2RhbCgpOyBTYXZlCiAgICAgICAgLy8gZXJmb2xndCBhdXMgZGVtIE1vZGFsIGhlcmF1 -cy4gRGVyIGZydWVoZXIgemVudHJhbGUgIlZvcmxhZ2VuCiAgICAgICAgLy8gc3BlaWNoZXJuIi1C -dXR0b24gaXN0IHdlZywgd2VpbCBTYXZlIGpldHp0IHBybyBWb3JsYWdlIHN0YXR0ZmluZGV0Lgog -ICAgICAgIHZhciBlbWFpbEthcnRlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbWFpbHZv -cmxhZ2VuLWluaGFsdCcpOwogICAgICAgIGlmIChlbWFpbEthcnRlbikgZW1haWxLYXJ0ZW4uYWRk -RXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIC8vIEhpZGUg -LyBTaG93IHRvZ2dsZTogVm9ybGFnZSBhdXMgZGVyIFByaW1hZXJhbnNpY2h0IGF1c2JsZW5kZW4K -ICAgICAgICAgICAgLy8gYnp3LiB3aWVkZXIgZWluYmxlbmRlbi4gUGVyc2lzdGllcnVuZyBhbHMK -ICAgICAgICAgICAgLy8gYWRtaW4uZW1haWxWb3JsYWdlbltrZXldLnZlcnN0ZWNrdCA9IGJvb2ws -IGdlc3BlaWNoZXJ0IHVlYmVyCiAgICAgICAgICAgIC8vIC9hcGkvYWRtaW4uIERpZSBIaWRlLUts -aWNrcyBicmF1Y2hlbiBzdG9wUHJvcGFnYXRpb24sIHNvbnN0CiAgICAgICAgICAgIC8vIHd1ZXJk -ZSBkZXIgS2FydGVuLUNsaWNrLUhhbmRsZXIgZGFydW50ZXIgZGFzIEJlYXJiZWl0ZW4tTW9kYWwK -ICAgICAgICAgICAgLy8gb2VmZm5lbi4KICAgICAgICAgICAgdmFyIGhpZGVCdG4gPSBlLnRhcmdl -dC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249ImV2LWhpZGUiXSwgW2RhdGEtYWt0aW9uPSJldi1zaG93 -Il0nKTsKICAgICAgICAgICAgaWYgKGhpZGVCdG4pIHsKICAgICAgICAgICAgICAgIGUuc3RvcFBy -b3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICB2YXIga2V5ID0gaGlkZUJ0bi5nZXRBdHRyaWJ1 -dGUoJ2RhdGEtdm9ybGFnZScpOwogICAgICAgICAgICAgICAgdmFyIHZlcnN0ZWNrdCA9IGhpZGVC -dG4uZ2V0QXR0cmlidXRlKCdkYXRhLWFrdGlvbicpID09PSAnZXYtaGlkZSc7CiAgICAgICAgICAg -ICAgICBpZiAoIVouYWRtaW4uZW1haWxWb3JsYWdlbikgWi5hZG1pbi5lbWFpbFZvcmxhZ2VuID0g -e307CiAgICAgICAgICAgICAgICBpZiAoIVouYWRtaW4uZW1haWxWb3JsYWdlbltrZXldKSBaLmFk -bWluLmVtYWlsVm9ybGFnZW5ba2V5XSA9IHt9OwogICAgICAgICAgICAgICAgWi5hZG1pbi5lbWFp -bFZvcmxhZ2VuW2tleV0udmVyc3RlY2t0ID0gdmVyc3RlY2t0OwogICAgICAgICAgICAgICAgYXBp -UHV0KCcvYXBpL2FkbWluJywgWi5hZG1pbikudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAg -ICAgICAgICBlbWFpbFZvcmxhZ2VuUmVuZGVybigpOwogICAgICAgICAgICAgICAgICAgIHRvYXN0 -KHZlcnN0ZWNrdCA/ICdWb3JsYWdlIGF1c2dlYmxlbmRldCcgOiAnVm9ybGFnZSBlaW5nZWJsZW5k -ZXQnLCAnZXJmb2xnJyk7CiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHsg -dG9hc3QoJ0ZlaGxlcjogJyArIGVyci5tZXNzYWdlLCAnZmVobGVyJyk7IH0pOwogICAgICAgICAg -ICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBrYXJ0ZSA9IGUudGFy -Z2V0LmNsb3Nlc3QoJy5lbWFpbHZvcmxhZ2Uta2FydGUnKTsKICAgICAgICAgICAgaWYgKGthcnRl -KSBlbWFpbFZvcmxhZ2VCZWFyYmVpdGVuTW9kYWwoa2FydGUuZ2V0QXR0cmlidXRlKCdkYXRhLXZv -cmxhZ2UnKSk7CiAgICAgICAgfSk7CiAgICAgICAgLy8gVGFzdGF0dXItQWt0aXZpZXJ1bmcgZGVy -IEthcnRlbiAocm9sZT1idXR0b24sIGtlaW4gbmF0aXZlcyA8YnV0dG9uPgogICAgICAgIC8vIG1l -aHIg4oCUIEVudGVyL1NwYWNlIG11ZXNzZW4gd2lyIHNlbGJzdCBiZWhhbmRlbG4pLgogICAgICAg -IGlmIChlbWFpbEthcnRlbikgZW1haWxLYXJ0ZW4uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bics -IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKGUua2V5ICE9PSAnRW50ZXInICYmIGUua2V5 -ICE9PSAnICcgJiYgZS5rZXkgIT09ICdTcGFjZWJhcicpIHJldHVybjsKICAgICAgICAgICAgdmFy -IGthcnRlID0gZS50YXJnZXQuY2xvc2VzdCgnLmVtYWlsdm9ybGFnZS1rYXJ0ZScpOwogICAgICAg -ICAgICBpZiAoIWthcnRlIHx8IGUudGFyZ2V0LmNsb3Nlc3QoJy5ldmstaGlkZS1idG4nKSkgcmV0 -dXJuOwogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGVtYWlsVm9y -bGFnZUJlYXJiZWl0ZW5Nb2RhbChrYXJ0ZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdm9ybGFnZScpKTsK -ICAgICAgICB9KTsKCiAgICAgICAgLy8gRWluc3RlbGx1bmdlbiDigJQgSmFociArIEluYWt0aXZp -dGFldCArIFBhcGllcmtvcmItQXVmYmV3YWhydW5nICsgRS1NYWlsLQogICAgICAgIC8vIERvbWFp -biAoSW5mb3RleHRlIHNpbmQgaW0gVGFiICJJbmZvcm1hdGlvbiAmIEhpbGZlIikuCiAgICAgICAg -Ly8gS29uZmlndXJhdGlvbjogZWluemVsbmUsIGF0b21hcmUgKyB2YWxpZGllcnRlIEZlbGRlci4g -RGVyIEVuZHBvaW50CiAgICAgICAgLy8gL2FwaS9hZG1pbi9laW5zdGVsbHVuZ2VuIGlzdCBQYXJ0 -aWFsLU1lcmdlLWbDpGhpZyAoa2VpbiBWb2xsLU92ZXJ3cml0ZSksCiAgICAgICAgLy8gZGFoZXIg -aXN0IGZlbGR3ZWlzZXMgQVVUTy1TUEVJQ0hFUk4gaGllciBzaWNoZXI6IGplZGUgw4RuZGVydW5n -IHdpcmQKICAgICAgICAvLyBuYWNoIGt1cnplciBUaXBwLVBhdXNlIGF1dG9tYXRpc2NoIHBlcnNp -c3RpZXJ0LiBEZXIg4oCeU3BlaWNoZXJuIi1CdXR0b24KICAgICAgICAvLyBibGVpYnQgYWxzIGV4 -cGxpeml0ZXIgRmFsbGJhY2sgZXJoYWx0ZW4uCiAgICAgICAgZnVuY3Rpb24gZWluc3RlbGx1bmdl -bkxlc2VuKCkgewogICAgICAgICAgICB2YXIgcGFwaWVya29yYkVsID0gZG9jdW1lbnQuZ2V0RWxl -bWVudEJ5SWQoJ2VpbnMtcGFwaWVya29yYi10YWdlJyk7CiAgICAgICAgICAgIHZhciBlbWFpbERv -bWFpbkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VpbnMtZW1haWwtZG9tYWluJyk7CiAg -ICAgICAgICAgIHZhciBhdmF0YXJHcm9lc3NlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn -ZWlucy1hdmF0YXItZ3JvZXNzZScpOwogICAgICAgICAgICAvLyBBdmF0YXItR3JvZXNzZSB6d2lz -Y2hlbiAxMDAgdW5kIDYwMCBjbGFtcGVuLCBkYW1pdCBiZWxpZWJpZyBncm9zc2UKICAgICAgICAg -ICAgLy8gQmlsZGVyIGRlbiBEYXRhRGlyIG5pY2h0IHVlYmVycmFzY2hlbmQgbWl0IE1CLUZpbGVz -IGZ1ZWxsZW4uCiAgICAgICAgICAgIHZhciBhdmF0YXJHciA9IGF2YXRhckdyb2Vzc2VFbCA/IHBh -cnNlSW50KGF2YXRhckdyb2Vzc2VFbC52YWx1ZSwgMTApIDogMjAwOwogICAgICAgICAgICBpZiAo -aXNOYU4oYXZhdGFyR3IpIHx8IGF2YXRhckdyIDwgMTAwKSBhdmF0YXJHciA9IDEwMDsKICAgICAg -ICAgICAgZWxzZSBpZiAoYXZhdGFyR3IgPiA2MDApIGF2YXRhckdyID0gNjAwOwogICAgICAgICAg -ICB2YXIgZWRpdG9yVHJpZ2dlckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VpbnMtZWRp -dG9yLXRyaWdnZXInKTsKICAgICAgICAgICAgdmFyIGVkaXRvclRyaWdnZXJXZXJ0ID0gZWRpdG9y -VHJpZ2dlckVsID8gZWRpdG9yVHJpZ2dlckVsLnZhbHVlIDogJ3JlY2h0cyc7CiAgICAgICAgICAg -IGlmIChbJ3JlY2h0cycsICdsaW5rcycsICdtaXR0ZScsICdkb3BwZWwnXS5pbmRleE9mKGVkaXRv -clRyaWdnZXJXZXJ0KSA8IDApIGVkaXRvclRyaWdnZXJXZXJ0ID0gJ3JlY2h0cyc7CiAgICAgICAg -ICAgIC8vIEhpbndlaXM6IGBqYWhyYCBpc3QgaGllciBCRVdVU1NUIG5pY2h0IGVudGhhbHRlbi4g -RGFzIFBsYW51bmdzamFocgogICAgICAgICAgICAvLyB3aXJkIGF1c3NjaGxpZXNzbGljaCB1ZWJl -ciBkZW4gZGVkaXppZXJ0ZW4g4oCeSmFociB3ZWNoc2VsbiItQnV0dG9uCiAgICAgICAgICAgIC8v -IGdlYWVuZGVydCAobWl0IEJlc3RhZXRpZ3VuZyArIFJlbG9hZCksIGRhbWl0IFN0YXR1cyB1bmQg -QW5zaWNodAogICAgICAgICAgICAvLyBuaWUgYXVzZWluYW5kZXJsYXVmZW4uIERhcyBlaW5zLWph -aHItRmVsZCBpc3QgbnVyIGRpZSBaaWVsYXVzd2FobC4KICAgICAgICAgICAgcmV0dXJuIHsKICAg -ICAgICAgICAgICAgIHBhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nOiBwYXBpZXJrb3JiRWwgPyAo -cGFyc2VJbnQocGFwaWVya29yYkVsLnZhbHVlLCAxMCkgfHwgMCkgOiAzMCwKICAgICAgICAgICAg -ICAgIGVtYWlsQXV0b0RvbWFpbjogZW1haWxEb21haW5FbCA/IGVtYWlsRG9tYWluRWwudmFsdWUg -OiAnQHBvbGl6ZWkubnJ3LmRlJywKICAgICAgICAgICAgICAgIGF2YXRhckdyb2Vzc2U6IGF2YXRh -ckdyLAogICAgICAgICAgICAgICAgZWRpdG9yVHJpZ2dlcjogZWRpdG9yVHJpZ2dlcldlcnQKICAg -ICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZWluc3RlbGx1bmdlblNwZWlj -aGVybihhdXRvKSB7CiAgICAgICAgICAgIHZhciBkYXRlbiA9IGVpbnN0ZWxsdW5nZW5MZXNlbigp -OwogICAgICAgICAgICByZXR1cm4gYXBpUHV0KCcvYXBpL2FkbWluL2VpbnN0ZWxsdW5nZW4nLCBk -YXRlbikudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oWi5h -ZG1pbiwgZGF0ZW4pOwogICAgICAgICAgICAgICAgZGlydHlTZXR6ZW4oJ2VpbnN0ZWxsdW5nZW4n -LCBmYWxzZSk7CiAgICAgICAgICAgICAgICB0b2FzdChhdXRvID8gJ0dlc3BlaWNoZXJ0JyA6ICdF -aW5zdGVsbHVuZ2VuIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycpOwogICAgICAgICAgICB9KS5jYXRj -aChmdW5jdGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsg -fSk7CiAgICAgICAgfQogICAgICAgIHZhciBidG5FaW5zU3BlaWNoZXJuID0gZG9jdW1lbnQuZ2V0 -RWxlbWVudEJ5SWQoJ2J0bi1laW5zdGVsbHVuZ2VuLXNwZWljaGVybicpOwogICAgICAgIGlmIChi -dG5FaW5zU3BlaWNoZXJuKSBidG5FaW5zU3BlaWNoZXJuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNr -JywgZnVuY3Rpb24oKSB7IGVpbnN0ZWxsdW5nZW5TcGVpY2hlcm4oZmFsc2UpOyB9KTsKICAgICAg -ICAvLyBBdXRvLVNhdmU6IMOEbmRlcnVuZyBhbiBlaW5lbSBLb25maWctRmVsZCDihpIgbmFjaCA3 -MDAgbXMgVGlwcC1QYXVzZQogICAgICAgIC8vIGF1dG9tYXRpc2NoIHNwZWljaGVybiAoZGVib3Vu -Y2VkLCBlaW4gVG9hc3QgcHJvIFJ1aGVwaGFzZSkuCiAgICAgICAgdmFyIF9laW5zQXV0b1RpbWVy -ID0gbnVsbDsKICAgICAgICBbJ2VpbnMtcGFwaWVya29yYi10YWdlJywgJ2VpbnMtZW1haWwtZG9t -YWluJywgJ2VpbnMtYXZhdGFyLWdyb2Vzc2UnLCAnZWlucy1lZGl0b3ItdHJpZ2dlciddLmZvckVh -Y2goZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVu -dEJ5SWQoaWQpOwogICAgICAgICAgICBpZiAoIWVsKSByZXR1cm47CiAgICAgICAgICAgIGVsLmFk -ZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYg -KF9laW5zQXV0b1RpbWVyKSBjbGVhclRpbWVvdXQoX2VpbnNBdXRvVGltZXIpOwogICAgICAgICAg -ICAgICAgX2VpbnNBdXRvVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBlaW5zdGVsbHVu -Z2VuU3BlaWNoZXJuKHRydWUpOyB9LCA3MDApOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsK -CiAgICAgICAgLy8gSW5mb3JtYXRpb24gJiBIaWxmZSDigJQgUmljaC1UZXh0LUVkaXRvcmVuICsg -U2NobGllw59pbmZvCiAgICAgICAgdmFyIGJ0bkloU3BlaWNoZXJuID0gZG9jdW1lbnQuZ2V0RWxl -bWVudEJ5SWQoJ2J0bi1pbmZvaGlsZmUtc3BlaWNoZXJuJyk7CiAgICAgICAgaWYgKGJ0bkloU3Bl -aWNoZXJuKSBidG5JaFNwZWljaGVybi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9u -KCkgewogICAgICAgICAgICB2YXIgZGF0ZW4gPSBpbmZvSGlsZmVBdXNGZWxkZXJuTGVzZW4oKTsK -ICAgICAgICAgICAgYXBpUHV0KCcvYXBpL2FkbWluL2VpbnN0ZWxsdW5nZW4nLCBkYXRlbikudGhl -bihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oWi5hZG1pbiwgZGF0 -ZW4pOwogICAgICAgICAgICAgICAgZGlydHlTZXR6ZW4oJ2luZm9oaWxmZScsIGZhbHNlKTsKICAg -ICAgICAgICAgICAgIHRvYXN0KCdJbmZvcm1hdGlvbiAmIEhpbGZlIGdlc3BlaWNoZXJ0JywgJ2Vy -Zm9sZycpOwogICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRvYXN0KCdGZWhsZXI6 -ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIFN1 -cHBvcnQtTWFpbC1Wb3JsYWdlIChudXIgUGhpbGlwcCBSb2VzZ2VuKS4gU2F2ZSAvIERlZmF1bHQg -LyBWb3JzY2hhdS4KICAgICAgICB2YXIgc21UZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRC -eUlkKCdzdXBwb3J0bWFpbC10ZXh0Jyk7CiAgICAgICAgdmFyIHNtRGlydHkgICAgPSBkb2N1bWVu -dC5nZXRFbGVtZW50QnlJZCgnc3VwcG9ydG1haWwtZGlydHktaGlud2VpcycpOwogICAgICAgIGlm -IChzbVRleHRhcmVhICYmIHNtRGlydHkpIHsKICAgICAgICAgICAgc21UZXh0YXJlYS5hZGRFdmVu -dExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCkgeyBzbURpcnR5LnN0eWxlLmRpc3BsYXkgPSAn -JzsgfSk7CiAgICAgICAgfQogICAgICAgIHZhciBidG5TbVNwZWljaGVybiA9IGRvY3VtZW50Lmdl -dEVsZW1lbnRCeUlkKCdidG4tc3VwcG9ydG1haWwtc3BlaWNoZXJuJyk7CiAgICAgICAgaWYgKGJ0 -blNtU3BlaWNoZXJuKSBidG5TbVNwZWljaGVybi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1 -bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn -c3VwcG9ydG1haWwtdGV4dCcpOwogICAgICAgICAgICBpZiAoIXRhKSByZXR1cm47CiAgICAgICAg -ICAgIHZhciBkYXRlbiA9IHsgc3VwcG9ydE1haWxUZXh0OiB0YS52YWx1ZSB9OwogICAgICAgICAg -ICBhcGlQdXQoJy9hcGkvYWRtaW4vZWluc3RlbGx1bmdlbicsIGRhdGVuKS50aGVuKGZ1bmN0aW9u -KCkgewogICAgICAgICAgICAgICAgWi5hZG1pbi5zdXBwb3J0TWFpbFRleHQgPSBkYXRlbi5zdXBw -b3J0TWFpbFRleHQ7CiAgICAgICAgICAgICAgICBpZiAoc21EaXJ0eSkgc21EaXJ0eS5zdHlsZS5k -aXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgICAgdG9hc3QoJ1N1cHBvcnQtTWFpbC1Wb3Js -YWdlIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycpOwogICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlv -bihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAg -ICAgfSk7CiAgICAgICAgdmFyIGJ0blNtRGVmYXVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk -KCdidG4tc3VwcG9ydG1haWwtZGVmYXVsdCcpOwogICAgICAgIGlmIChidG5TbURlZmF1bHQpIGJ0 -blNtRGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAg -ICAgICBiZXN0YWV0aWdlbignVm9ybGFnZSBrb21wbGV0dCBhdWYgZGVuIGVpbmdlYmF1dGVuIERl -ZmF1bHQgenVyw7xja3NldHplbj9cblxuRGVpbmUgYWt0dWVsbGVuIMOEbmRlcnVuZ2VuIGdlaGVu -IHZlcmxvcmVuLicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgYXBpUHV0KCcvYXBpL2Fk -bWluL2VpbnN0ZWxsdW5nZW4nLCB7IHN1cHBvcnRNYWlsVGV4dDogJycgfSkudGhlbihmdW5jdGlv -bigpIHsKICAgICAgICAgICAgICAgICAgICBaLmFkbWluLnN1cHBvcnRNYWlsVGV4dCA9ICcnOwog -ICAgICAgICAgICAgICAgICAgIHZhciB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdXBw -b3J0bWFpbC10ZXh0Jyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRhKSB0YS52YWx1ZSA9ICcn -OwogICAgICAgICAgICAgICAgICAgIGlmIChzbURpcnR5KSBzbURpcnR5LnN0eWxlLmRpc3BsYXkg -PSAnbm9uZSc7CiAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ0F1ZiBEZWZhdWx0IHp1csO8Y2tn -ZXNldHp0JywgJ2VyZm9sZycpOwogICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkg -eyB0b2FzdCgnRmVobGVyOiAnICsgZS5tZXNzYWdlLCAnZmVobGVyJyk7IH0pOwogICAgICAgICAg -ICB9LCB7IHRpdGVsOiAnRGVmYXVsdC1Wb3JsYWdlIHdpZWRlcmhlcnN0ZWxsZW4nLCBqYVRleHQ6 -ICdadXLDvGNrc2V0emVuJywgamFEYW5nZXI6IHRydWUgfSk7CiAgICAgICAgfSk7CiAgICAgICAg -dmFyIGJ0blNtVm9yc2NoYXUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXN1cHBvcnRt -YWlsLXZvcnNjaGF1Jyk7CiAgICAgICAgaWYgKGJ0blNtVm9yc2NoYXUpIGJ0blNtVm9yc2NoYXUu -YWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy8gQWt0 -dWVsbGUgRWluZ2FiZSB0ZW1wb3JhZXIgYWxzIFZvcmxhZ2UgYmVudXR6ZW4g4oCUIGF1Y2ggd2Vu -bgogICAgICAgICAgICAvLyBub2NoIG5pY2h0IGdlc3BlaWNoZXJ0OyBzcGFydCBkYXMgImVyc3Qg -c3BlaWNoZXJuLCBkYW5uCiAgICAgICAgICAgIC8vIHRlc3RlbiItSGluLXVuZC1IZXIuCiAgICAg -ICAgICAgIHZhciB0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdXBwb3J0bWFpbC10ZXh0 -Jyk7CiAgICAgICAgICAgIHZhciBhbHQgPSBaLmFkbWluLnN1cHBvcnRNYWlsVGV4dDsKICAgICAg -ICAgICAgaWYgKHRhICYmIHRhLnZhbHVlLnRyaW0oKSkgWi5hZG1pbi5zdXBwb3J0TWFpbFRleHQg -PSB0YS52YWx1ZTsKICAgICAgICAgICAgdmFyIG1haWx0byA9ICdtYWlsdG86cGhpbGlwcC5yb2Vz -Z2VuQHBvbGl6ZWkubnJ3LmRlJwogICAgICAgICAgICAgICAgKyAnP3N1YmplY3Q9JyArIGVuY29k -ZVVSSUNvbXBvbmVudCgnVkkzIERHTCBQbGFudW5nIC0gRG9ydG11bmQnKQogICAgICAgICAgICAg -ICAgKyAnJmJvZHk9JyArIGVuY29kZVVSSUNvbXBvbmVudChzdXBwb3J0TWFpbEJvZHlCYXVlbigp -KTsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBtYWlsdG87CiAgICAgICAgICAg -IC8vIFN0YXRlIHp1cnVlY2tyb2xsZW4sIGRhbWl0IFZvcnNjaGF1IG5pY2h0IHZlcnNlaGVudGxp -Y2ggcGVyc2lzdGllcnQKICAgICAgICAgICAgWi5hZG1pbi5zdXBwb3J0TWFpbFRleHQgPSBhbHQ7 -CiAgICAgICAgfSk7CgogICAgICAgIC8vIEphaHIgd2VjaHNlbG46IFBsYW51bmdzamFociBhdWYg -ZGFzIGltIEZlbGQgR0VXw4RITFRFIEphaHIgc2V0emVuIOKAlCB2b3IKICAgICAgICAvLyBPREVS -IHp1csO8Y2suIERhdGVuIG5ldSBsYWRlbiwgYWxsZSBWaWV3cyByZW5kZXJuLiBFaW50cmFlZ2Ug -YmxlaWJlbgogICAgICAgIC8vIHVudGVyIGlocmVuIGFic29sdXRlbiBEYXR1bXNzY2hsdWVzc2Vs -biBlcmhhbHRlbiAoa2VpbiBEYXRlbnZlcmx1c3QpOwogICAgICAgIC8vIGRlciBCdWZmZXItSmFu -dWFyIGRlcyBGb2xnZWphaHJlcyB3aXJkIGluIGRlciBuZXVlbiBBbnNpY2h0IHNpY2h0YmFyLgog -ICAgICAgIC8vIChGcnVlaGVyOiBoYXJ0ZXMgYWx0KzEg4oCUIGlnbm9yaWVydGUgZGllIEF1c3dh -aGwgdW5kIHNwcmFuZyB6LkIuIHZvbgogICAgICAgIC8vICAyMDI3IHRyb3R6IEVpbmdhYmUgMjAy -NiBhdWYgMjAyOC4gSmV0enQgemllbGdlbmF1LikKICAgICAgICB2YXIgYnRuSmFocmVzd2VjaHNl -bCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tamFocmVzd2VjaHNlbCcpOwogICAgICAg -IGlmIChidG5KYWhyZXN3ZWNoc2VsKSBidG5KYWhyZXN3ZWNoc2VsLmFkZEV2ZW50TGlzdGVuZXIo -J2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBhbHQgPSBaLmFkbWluLmphaHIg -fHwgbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpOwogICAgICAgICAgICB2YXIgZmVsZCA9IGRvY3Vt -ZW50LmdldEVsZW1lbnRCeUlkKCdlaW5zLWphaHInKTsKICAgICAgICAgICAgdmFyIG5ldSA9IHBh -cnNlSW50KGZlbGQgPyBmZWxkLnZhbHVlIDogJycsIDEwKTsKICAgICAgICAgICAgaWYgKCFuZXUg -fHwgbmV1IDwgMjAyMCB8fCBuZXUgPiAyMDk5KSB7CiAgICAgICAgICAgICAgICB0b2FzdCgnQml0 -dGUgZWluIGfDvGx0aWdlcyBKYWhyIHp3aXNjaGVuIDIwMjAgdW5kIDIwOTkgd8OkaGxlbicsICd3 -YXJudW5nJyk7CiAgICAgICAgICAgICAgICBpZiAoZmVsZCkgZmVsZC52YWx1ZSA9IGFsdDsKICAg -ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobmV1ID09 -PSBhbHQpIHsKICAgICAgICAgICAgICAgIHRvYXN0KCdEYXMgUGxhbnVuZ3NqYWhyIGlzdCBiZXJl -aXRzICcgKyBhbHQgKyAnLicsICdpbmZvJyk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg -ICAgICAgIH0KICAgICAgICAgICAgdmFyIHJpY2h0dW5nID0gbmV1ID4gYWx0ID8gJ3ZvcicgOiAn -enVyw7xjayc7CiAgICAgICAgICAgIGJlc3RhZXRpZ2VuKCdQbGFudW5nc2phaHIgdm9uICcgKyBh -bHQgKyAnIGF1ZiAnICsgbmV1ICsgJyB3ZWNoc2VsbiAoJyArIHJpY2h0dW5nICsgJyk/XG5cbicg -KwogICAgICAgICAgICAgICAgJ0RpZSBQbGFudW5nc2Fuc2ljaHQgemVpZ3QgZGFuYWNoIEphbnVh -ciAnICsgbmV1ICsgJyBiaXMgSmFudWFyICcgKyAobmV1ICsgMSkgKyAnLlxuJyArCiAgICAgICAg -ICAgICAgICAnS2VpbiBEYXRlbnZlcmx1c3Qg4oCUIGFsbGUgRWludHLDpGdlIGJsZWliZW4gdW50 -ZXIgaWhyZW0gRGF0dW0gZXJoYWx0ZW4uJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBh -cGlQdXQoJy9hcGkvYWRtaW4vZWluc3RlbGx1bmdlbicsIHsgamFocjogbmV1IH0pLnRoZW4oZnVu -Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ1BsYW51bmdzamFociAnICsgbmV1 -ICsgJyDigJQgU2VpdGUgd2lyZCBuZXUgZ2VsYWRlbicsICdlcmZvbGcnKTsKICAgICAgICAgICAg -ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7 -IH0sIDgwMCk7CiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7IHRvYXN0KCdG -ZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAgICAgICAgIH0sIHsgdGl0 -ZWw6ICdKYWhyIHdlY2hzZWxuJywgamFUZXh0OiAnV2VjaHNlbG4nIH0pOwogICAgICAgIH0pOwoK -ICAgICAgICAvLyBGZWllcnRhZ2UKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRu -LWZlaWVydGFnLW5ldScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAg -ICAgICAgICAgIFouYWRtaW4uZmVpZXJ0YWdlID0gWi5hZG1pbi5mZWllcnRhZ2UgfHwgW107CiAg -ICAgICAgICAgIC8vIEVyc3QgYWt0dWVsbCBzaWNodGJhcmUgRWluZ2FiZW4gaW5zIE1vZGVsbCB6 -dXJ1ZWNrc3BpZWxlbiwgZGFtaXQKICAgICAgICAgICAgLy8gdW5iZWthbm50ZSBFZGl0cyBiZWlt -IFJlLVJlbmRlciBuaWNodCB2ZXJsb3JlbiBnZWhlbi4KICAgICAgICAgICAgdmFyIGFrdHVlbGwg -PSBmZWllcnRhZ2VBdXNUYWJlbGxlTGVzZW4oKTsKICAgICAgICAgICAgaWYgKGFrdHVlbGwubGVu -Z3RoKSBaLmFkbWluLmZlaWVydGFnZSA9IGFrdHVlbGw7CiAgICAgICAgICAgIC8vIERlZmF1bHQt -S2F0ZWdvcmllIGF1cyBkZW0gYWt0dWVsbGVuIEZpbHRlciAoZmFsbHMgZWluZSBiZXN0aW1tdGUK -ICAgICAgICAgICAgLy8gS2F0ZWdvcmllIGdlZmlsdGVydCBpc3QpLCBzb25zdCBnZXNldHpsaWNo -LgogICAgICAgICAgICB2YXIga2F0RmlsdGVyID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdm -ZWllcnRhZ2UtZmlsdGVyLWthdGVnb3JpZScpIHx8IHt9KS52YWx1ZTsKICAgICAgICAgICAgdmFy -IGthdE5ldSA9IChrYXRGaWx0ZXIgJiYga2F0RmlsdGVyICE9PSAnYWxsZScpID8ga2F0RmlsdGVy -IDogJ2dlc2V0emxpY2gnOwogICAgICAgICAgICBaLmFkbWluLmZlaWVydGFnZS5wdXNoKHsKICAg -ICAgICAgICAgICAgIGRhdHVtOiAnJywKICAgICAgICAgICAgICAgIGJlemVpY2hudW5nOiAnJywK -ICAgICAgICAgICAgICAgIGthdGVnb3JpZToga2F0TmV1LAogICAgICAgICAgICAgICAgYWt0aXY6 -IHRydWUsCiAgICAgICAgICAgICAgICB3aWNodGlnOiBmYWxzZSwKICAgICAgICAgICAgICAgIGlj -b246ICcnLAogICAgICAgICAgICAgICAga3VyemJlc2NocmVpYnVuZzogJycsCiAgICAgICAgICAg -ICAgICBpbmZvVXJsOiAnJwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZmVpZXJ0YWdlVGFi -ZWxsZVJlbmRlcm4oKTsKICAgICAgICB9KTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ -ZCgnZmVpZXJ0YWdlLXRib2R5JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihl -KSB7CiAgICAgICAgICAgIC8vIEljb24tUGlja2VyIChhbmFsb2cgenUgU29uZGVydGVybWluZW4p -LiBTZXR6dCBkYXMgaGlkZGVuIGZpZWxkCiAgICAgICAgICAgIC8vICdpY29uJyB1bmQgYWt0dWFs -aXNpZXJ0IGRlbiBCdXR0b24tVGV4dC4gUmVzZXQgYXVmIEthdGVnb3JpZS1EZWZhdWx0CiAgICAg -ICAgICAgIC8vIGVyZm9sZ3QsIGluZGVtIGRlciBVc2VyIGltIFBpY2tlciBkYXMgUmVzZXQtU3lt -Ym9sIHdhZWhsdCDigJQgZGEKICAgICAgICAgICAgLy8gZW1vamlQaWNrZXJaZWlnZW4gZGFzIG5p -Y2h0IGRpcmVrdCBhbmJpZXRldCwga2FubiBkZXIgVXNlciBhdWNoCiAgICAgICAgICAgIC8vIGRh -cyBha3R1ZWxsZSBJY29uLUZlbGQgbWFudWVsbCBsZWVyZW4gdWViZXIgRGV2VG9vbHM7IGVpbmZh -Y2hzdGUKICAgICAgICAgICAgLy8gUHJheGlzLUxvZXN1bmc6IGVpbmZhY2ggZWluIGFuZGVyZXMg -SWNvbiB3YWVobGVuLgogICAgICAgICAgICB2YXIgaWNvbkJ0biA9IGUudGFyZ2V0LmNsb3Nlc3Qo -Jy5mZWllcnRhZy1pY29uLWJ0bicpOwogICAgICAgICAgICBpZiAoaWNvbkJ0bikgewogICAgICAg -ICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIGVtb2ppUGlja2Vy -WmVpZ2VuKGljb25CdG4sIGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWR4 -ID0gaWNvbkJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4Jyk7CiAgICAgICAgICAgICAgICAgICAg -dmFyIGhpZGRlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mZWllcnRhZy1pbnB1dFtkYXRh -LWZlbGQ9Imljb24iXVtkYXRhLWlkeD0iJyArIGlkeCArICciXScpOwogICAgICAgICAgICAgICAg -ICAgIGlmIChoaWRkZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuLnZhbHVlID0g -diB8fCAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuLmRpc3BhdGNoRXZlbnQobmV3 -IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpOwogICAgICAgICAgICAgICAgICAg -IH0KICAgICAgICAgICAgICAgICAgICBpY29uQnRuLnRleHRDb250ZW50ID0gdiB8fCAn4oCUJzsK -ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9 -CiAgICAgICAgICAgIHZhciBpbmZvQnRuID0gZS50YXJnZXQuY2xvc2VzdCgnLmZlaWVydGFnLWlu -Zm8tYnRuJyk7CiAgICAgICAgICAgIGlmIChpbmZvQnRuKSB7CiAgICAgICAgICAgICAgICBlLnN0 -b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgZmVpZXJ0YWdlSW5mb01vZGFsWmVpZ2Vu -KGluZm9CdG4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpKTsKICAgICAgICAgICAgICAgIHJldHVy -bjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgn -W2RhdGEtYWt0aW9uPSJmZWllcnRhZy1sb2VzY2hlbiJdJyk7CiAgICAgICAgICAgIGlmIChidG4p -IHsgWi5hZG1pbi5mZWllcnRhZ2Uuc3BsaWNlKHBhcnNlSW50KGJ0bi5nZXRBdHRyaWJ1dGUoJ2Rh -dGEtaWR4JykpLCAxKTsgZmVpZXJ0YWdlVGFiZWxsZVJlbmRlcm4oKTsgfQogICAgICAgIH0pOwog -ICAgICAgIC8vIEZpbHRlciAoS2F0ZWdvcmllIC8gSmFociAvIG51ciBha3RpdmUpCiAgICAgICAg -WydmZWllcnRhZ2UtZmlsdGVyLWthdGVnb3JpZScsICdmZWllcnRhZ2UtZmlsdGVyLWphaHInLCAn -ZmVpZXJ0YWdlLWZpbHRlci1udXItYWt0aXYnXS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7CiAgICAg -ICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgICAgICAg -aWYgKGVsKSBlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmZWllcnRhZ2VGaWx0ZXJBbndl -bmRlbik7CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1m -ZWllcnRhZ2Utc3BlaWNoZXJuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigp -IHsKICAgICAgICAgICAgdmFyIGRhdGVuID0gZmVpZXJ0YWdlQXVzVGFiZWxsZUxlc2VuKCk7CiAg -ICAgICAgICAgIGFwaVB1dCgnL2FwaS9hZG1pbi9mZWllcnRhZ2UnLCBkYXRlbikudGhlbihmdW5j -dGlvbigpIHsKICAgICAgICAgICAgICAgIFouYWRtaW4uZmVpZXJ0YWdlID0gZGF0ZW47CiAgICAg -ICAgICAgICAgICB0YWdJbmZvc0JlcmVjaG5lbigpOwogICAgICAgICAgICAgICAga29wZlJlbmRl -cm4oKTsgICAgICAgIC8vIEZlaWVydGFncy1IaWdobGlnaHQgaW4gZGVyIEhhdXB0cGxhbnVuZ3Mt -SGVhZGVyLVplaWxlIGF1ZmZyaXNjaGVuCiAgICAgICAgICAgICAgICBkaXJ0eVNldHplbignZmVp -ZXJ0YWdlJywgZmFsc2UpOwogICAgICAgICAgICAgICAgLy8gIk51ciBha3RpdmUgemVpZ2VuIi1G -aWx0ZXIgenVydWVja3NldHplbiDigJQgc29uc3Qgc2llaHQgZGVyIFVzZXIKICAgICAgICAgICAg -ICAgIC8vIGdlcmFkZSBoaW56dWdlZnVlZ3RlIChpbmFrdGl2ZSkgRmVpZXJ0YWdlIG5hY2ggZGVt -IFNhdmUgbmljaHQKICAgICAgICAgICAgICAgIC8vIHVuZCBnbGF1YnQsIGRpZSBMaXN0ZSBzZWkg -dmVyc2Nod3VuZGVuLgogICAgICAgICAgICAgICAgdmFyIG51ckFrdGl2ID0gZG9jdW1lbnQuZ2V0 -RWxlbWVudEJ5SWQoJ2ZlaWVydGFnZS1maWx0ZXItbnVyLWFrdGl2Jyk7CiAgICAgICAgICAgICAg -ICBpZiAobnVyQWt0aXYgJiYgbnVyQWt0aXYuY2hlY2tlZCkgewogICAgICAgICAgICAgICAgICAg -IG51ckFrdGl2LmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBmZWllcnRhZ2VG -aWx0ZXJBbndlbmRlbigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdG9hc3Qo -J0ZlaWVydGFnZSBnZXNwZWljaGVydCcsICdlcmZvbGcnKTsKICAgICAgICAgICAgfSkuY2F0Y2go -ZnVuY3Rpb24oZSkgeyB0b2FzdCgnRmVobGVyOiAnICsgZS5tZXNzYWdlLCAnZmVobGVyJyk7IH0p -OwogICAgICAgIH0pOwoKICAgICAgICAvLyBGZXJpZW4KICAgICAgICBkb2N1bWVudC5nZXRFbGVt -ZW50QnlJZCgnYnRuLWZlcmllbi1uZXUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0 -aW9uKCkgewogICAgICAgICAgICBaLmFkbWluLmZlcmllbiA9IFouYWRtaW4uZmVyaWVuIHx8IFtd -OwogICAgICAgICAgICBaLmFkbWluLmZlcmllbi5wdXNoKHsgdm9uOiAnJywgYmlzOiAnJywgbmFt -ZTogJycgfSk7CiAgICAgICAgICAgIGZlcmllblRhYmVsbGVSZW5kZXJuKCk7CiAgICAgICAgfSk7 -CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zlcmllbi10Ym9keScpLmFkZEV2ZW50 -TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgYnRuID0gZS50 -YXJnZXQuY2xvc2VzdCgnW2RhdGEtYWt0aW9uPSJmZXJpZW4tbG9lc2NoZW4iXScpOwogICAgICAg -ICAgICBpZiAoYnRuKSB7IFouYWRtaW4uZmVyaWVuLnNwbGljZShwYXJzZUludChidG4uZ2V0QXR0 -cmlidXRlKCdkYXRhLWlkeCcpKSwgMSk7IGZlcmllblRhYmVsbGVSZW5kZXJuKCk7IH0KICAgICAg -ICB9KTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWZlcmllbi1zcGVpY2hl -cm4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2 -YXIgZGF0ZW4gPSBmZXJpZW5BdXNUYWJlbGxlTGVzZW4oKTsKICAgICAgICAgICAgYXBpUHV0KCcv -YXBpL2FkbWluL2ZlcmllbicsIGRhdGVuKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg -ICAgWi5hZG1pbi5mZXJpZW4gPSBkYXRlbjsKICAgICAgICAgICAgICAgIHRhZ0luZm9zQmVyZWNo -bmVuKCk7CiAgICAgICAgICAgICAgICBrb3BmUmVuZGVybigpOyAgICAgICAgLy8gRmVyaWVuLU1h -cmtpZXJ1bmcgaW4gZGVyIEhhdXB0cGxhbnVuZ3MtSGVhZGVyLVplaWxlIGF1ZmZyaXNjaGVuCiAg -ICAgICAgICAgICAgICBkaXJ0eVNldHplbignZmVyaWVuJywgZmFsc2UpOwogICAgICAgICAgICAg -ICAgdGFiRHJhZnRMb2VzY2hlbignZmVyaWVuJyk7CiAgICAgICAgICAgICAgICB0b2FzdCgnRmVy -aWVuIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycpOwogICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlv -bihlKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAg -ICAgfSk7CgogICAgICAgIC8vIFNvbmRlcnRlcm1pbmUg4oCUIE5ldWFubGFnZSDDtmZmbmV0IE1v -ZGFsCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1zb25kZXJ0ZXJtaW4tbmV1 -JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc29u -ZGVyRWRpdE1vZGFsWmVpZ2VuKCcnKTsKICAgICAgICB9KTsKICAgICAgICBkb2N1bWVudC5nZXRF -bGVtZW50QnlJZCgnc29uZGVydGVybWluZS10Ym9keScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNr -JywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgYmVhcmIgPSBlLnRhcmdldC5jbG9zZXN0 -KCdbZGF0YS1ha3Rpb249InNvbmRlci1iZWFyYmVpdGVuIl0nKTsKICAgICAgICAgICAgaWYgKGJl -YXJiKSB7IHNvbmRlckVkaXRNb2RhbFplaWdlbihiZWFyYi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQn -KSk7IHJldHVybjsgfQogICAgICAgICAgICB2YXIgbG9lc2NoID0gZS50YXJnZXQuY2xvc2VzdCgn -W2RhdGEtYWt0aW9uPSJzb25kZXItbG9lc2NoZW4iXScpOwogICAgICAgICAgICBpZiAobG9lc2No -KSB7CiAgICAgICAgICAgICAgICB2YXIgaWQgPSBsb2VzY2guZ2V0QXR0cmlidXRlKCdkYXRhLWlk -Jyk7CiAgICAgICAgICAgICAgICB2YXIgcyA9IHNvbmRlckJ5SWQoaWQpOwogICAgICAgICAgICAg -ICAgaWYgKCFzKSByZXR1cm47CiAgICAgICAgICAgICAgICB2YXIgc0xhYmVsID0gcy50aXRlbCB8 -fCBzb25kZXJUaXRlbEF1c1RleHQocy50ZXh0KSB8fCAnKG9obmUgVGl0ZWwpJzsKICAgICAgICAg -ICAgICAgIGJlc3RhZXRpZ2VuKCdIaW53ZWlzIOKAnicgKyBzTGFiZWwgKyAnIiAoJyArIHNvbmRl -ckRhdHVtTGFiZWwocykgKyAnKSB3aXJrbGljaCBsw7ZzY2hlbj8nLCBmdW5jdGlvbigpIHsKICAg -ICAgICAgICAgICAgICAgICB2YXIgbGlzdGUgPSAoWi5hZG1pbi5zb25kZXJ0ZXJtaW5lIHx8IFtd -KS5maWx0ZXIoZnVuY3Rpb24oeCkgeyByZXR1cm4geC5pZCAhPT0gaWQ7IH0pOwogICAgICAgICAg -ICAgICAgICAgIGFwaVB1dCgnL2FwaS9hZG1pbi9zb25kZXJ0ZXJtaW5lJywgbGlzdGUpLnRoZW4o -ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFouYWRtaW4uc29uZGVydGVybWlu -ZSA9IGxpc3RlOwogICAgICAgICAgICAgICAgICAgICAgICB0YWdJbmZvc0JlcmVjaG5lbigpOwog -ICAgICAgICAgICAgICAgICAgICAgICBrb3BmUmVuZGVybigpOwogICAgICAgICAgICAgICAgICAg -ICAgICBzb25kZXJ0ZXJtaW5lUmVuZGVybigpOwogICAgICAgICAgICAgICAgICAgICAgICB0b2Fz -dCgnSGlud2VpcyBnZWzDtnNjaHQnLCAnZXJmb2xnJyk7CiAgICAgICAgICAgICAgICAgICAgfSku -Y2F0Y2goZnVuY3Rpb24oZSkgeyB0b2FzdCgnRmVobGVyOiAnICsgZS5tZXNzYWdlLCAnZmVobGVy -Jyk7IH0pOwogICAgICAgICAgICAgICAgfSwgeyB0aXRlbDogJ0hpbndlaXMgbMO2c2NoZW4nLCBq -YURhbmdlcjogdHJ1ZSB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBC -YWNrdXBzCiAgICAgICAgdmFyIGJ0bkJrTmV1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0 -bi1iYWNrdXAtbmV1Jyk7CiAgICAgICAgaWYgKGJ0bkJrTmV1KSBidG5Ca05ldS5hZGRFdmVudExp -c3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBhcGlQb3N0KCcvYXBpL3Bs -YW51bmcvYmFja3VwJywge30pLnRoZW4oZnVuY3Rpb24ocikgewogICAgICAgICAgICAgICAgdG9h -c3QoJ0JhY2t1cCBlcnN0ZWxsdDogJyArIHIuZGF0ZWluYW1lLCAnZXJmb2xnJyk7CiAgICAgICAg -ICAgICAgICBiYWNrdXBUYWJlbGxlTGFkZW4oKTsKICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rp -b24oZSkgeyB0b2FzdCgnRmVobGVyOiAnICsgZS5tZXNzYWdlLCAnZmVobGVyJyk7IH0pOwogICAg -ICAgIH0pOwogICAgICAgIHZhciBia1Rib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Jh -Y2t1cC10Ym9keScpOwogICAgICAgIGlmIChia1Rib2R5KSBia1Rib2R5LmFkZEV2ZW50TGlzdGVu -ZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgYnRuID0gZS50YXJnZXQu -Y2xvc2VzdCgnW2RhdGEtYWt0aW9uXScpOwogICAgICAgICAgICBpZiAoIWJ0bikgcmV0dXJuOwog -ICAgICAgICAgICB2YXIgZGF0ZWkgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWRhdGVpJyk7CiAg -ICAgICAgICAgIHZhciBha3Rpb24gPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWFrdGlvbicpOwog -ICAgICAgICAgICBpZiAoYWt0aW9uID09PSAnYmFja3VwLWRvd25sb2FkJykgewogICAgICAgICAg -ICAgICAgd2luZG93Lm9wZW4oJy9hcGkvcGxhbnVuZy9iYWNrdXAvZG93bmxvYWQvJyArIGVuY29k -ZVVSSUNvbXBvbmVudChkYXRlaSksICdfYmxhbmsnKTsKICAgICAgICAgICAgICAgIHJldHVybjsK -ICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYWt0aW9uID09PSAnYmFja3VwLWxvZXNjaGVu -JykgewogICAgICAgICAgICAgICAgYmVzdGFldGlnZW4oJ0JhY2t1cCDigJ4nICsgZGF0ZWkgKyAn -IiBlbmRnw7xsdGlnIGzDtnNjaGVuP1xuXG5EaWVzZSBBa3Rpb24ga2FubiBuaWNodCByw7xja2fD -pG5naWcgZ2VtYWNodCB3ZXJkZW4uJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg -YXBpUG9zdCgnL2FwaS9wbGFudW5nL2JhY2t1cC9sb2VzY2hlbicsIHsgZGF0ZWluYW1lOiBkYXRl -aSB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnQmFj -a3VwIGdlbMO2c2NodCcsICdlcmZvbGcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgYmFja3Vw -VGFiZWxsZUxhZGVuKCk7CiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJy -KSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlcnIubWVzc2FnZSwgJ2ZlaGxlcicpOyB9KTsKICAgICAg -ICAgICAgICAgIH0sIHsgdGl0ZWw6ICdCYWNrdXAgbMO2c2NoZW4nLCBqYURhbmdlcjogdHJ1ZSB9 -KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo -YWt0aW9uID09PSAnYmFja3VwLXdpZWRlcmhlcnN0ZWxsZW4nKSB7CiAgICAgICAgICAgICAgICBi -ZXN0YWV0aWdlbignQWt0dWVsbGUgUGxhbnVuZyBkdXJjaCBCYWNrdXAg4oCeJyArIGRhdGVpICsg -JyIgZXJzZXR6ZW4/XG5cbkVzIHdpcmQgdm9yaGVyIGF1dG9tYXRpc2NoIGVpbiBTaWNoZXJoZWl0 -cy1CYWNrdXAgZGVyIGFrdHVlbGxlbiBQbGFudW5nIGVyc3RlbGx0LlxuXG5OYWNoIGRlbSBXaWVk -ZXJoZXJzdGVsbGVuIHdpcmQgZGllIFNlaXRlIG5ldSBnZWxhZGVuLicsIGZ1bmN0aW9uKCkgewog -ICAgICAgICAgICAgICAgICAgIGFwaVBvc3QoJy9hcGkvcGxhbnVuZy9iYWNrdXAvd2llZGVyaGVy -c3RlbGxlbicsIHsgZGF0ZWluYW1lOiBkYXRlaSB9KS50aGVuKGZ1bmN0aW9uKHIpIHsKICAgICAg -ICAgICAgICAgICAgICAgICAgdG9hc3QoJ1dpZWRlcmhlcmdlc3RlbGx0LiBTaWNoZXJ1bmc6ICcg -KyByLnNpY2hlcnVuZywgJ2VyZm9sZycpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBCYWNr -dXAtUmVzdG9yZSBlcnpldWd0IHNlaXQgUGhhc2UgNCAoMjAyNi0wNS0yMCkgZWluZW4KICAgICAg -ICAgICAgICAgICAgICAgICAgLy8gU2VydmVyLXNlaXRpZ2VuIEluLUFwcC1IaW53ZWlzIHN0YXR0 -IG1haWx0by4KICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsg -d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOyB9LCAxMjAwKTsKICAgICAgICAgICAgICAgICAgICB9 -KS5jYXRjaChmdW5jdGlvbihlcnIpIHsgdG9hc3QoJ0ZlaGxlcjogJyArIGVyci5tZXNzYWdlLCAn -ZmVobGVyJyk7IH0pOwogICAgICAgICAgICAgICAgfSwgeyB0aXRlbDogJ0JhY2t1cCB3aWVkZXJo -ZXJzdGVsbGVuJywgamFUZXh0OiAnV2llZGVyaGVyc3RlbGxlbicsIGphRGFuZ2VyOiB0cnVlIH0p -OwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNjaGljaHRjb2RlcwogICAg -ICAgIHZhciBidG5TY05ldSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tc2NoaWNodGNv -ZGUtbmV1Jyk7CiAgICAgICAgaWYgKGJ0blNjTmV1KSBidG5TY05ldS5hZGRFdmVudExpc3RlbmVy -KCdjbGljaycsIGZ1bmN0aW9uKCkgeyBzY2hpY2h0Y29kZUVkaXRNb2RhbFplaWdlbihudWxsKTsg -fSk7CiAgICAgICAgdmFyIHNjVm9yc2NoYXUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2No -aWNodGNvZGUtdm9yc2NoYXUnKTsKICAgICAgICBpZiAoc2NWb3JzY2hhdSkgc2NWb3JzY2hhdS5h -ZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIGVk -aXQgPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249InNjaGljaHRjb2RlLWJlYXJiZWl0 -ZW4iXScpOwogICAgICAgICAgICBpZiAoZWRpdCkgeyBzY2hpY2h0Y29kZUVkaXRNb2RhbFplaWdl -bihlZGl0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb2RlJykpOyByZXR1cm47IH0KICAgICAgICAgICAg -dmFyIHRvZyA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFrdGlvbj0ic2NoaWNodGNvZGUtdG9n -Z2xlIl0nKTsKICAgICAgICAgICAgaWYgKHRvZykgc2NoaWNodGNvZGVUb2dnbGVBa3Rpdih0b2cu -Z2V0QXR0cmlidXRlKCdkYXRhLWNvZGUnKSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNvbmRl -cnRlcm1pbi1LbGlja3MgbGF1ZmVuIHNlaXQgTWFpIDIwMjYgdWViZXIgZGVuIEFubGFzcy1aZWls -ZW4tCiAgICAgICAgLy8gSGFuZGxlciAoc2llaGUgb2JlbiksIHdlaWwgZGllIGVoZW1hbHMgc2Vw -YXJhdGUgRXZlbnRzLVplaWxlIGluCiAgICAgICAgLy8gZGllIEFubGFzcy1aZWlsZSB6dXNhbW1l -bmdlZnVlaHJ0IHd1cmRlLgoKICAgICAgICAvLyBFcnNjaGVpbnVuZ3NiaWxkLUVkaXRvcjogYmVp -IGplZGVtIElucHV0IGxpdmUgYW53ZW5kZW4gKG51ciBaLmFkbWluLm1hcmtpZXJ1bmdlbgogICAg -ICAgIC8vIGluLW1lbW9yeSwgcGVyc2lzdGllcnQgd2lyZCBlcnN0IGJlaW0gU3BlaWNoZXJuLUts -aWNrKS4KICAgICAgICAvLyBSYW5nZSArIE51bWJlci1JbnB1dCBmdWVyIGRhc3NlbGJlIEZlbGQg -d2VyZGVuIGhpZXIgc3luY2hyb25pc2llcnQuCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0 -ZW5lcignaW5wdXQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmICghZS50YXJnZXQuY2xh -c3NMaXN0IHx8ICFlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Vyc2NoZWludW5nLWlucHV0 -JykpIHJldHVybjsKICAgICAgICAgICAgLy8gUmFuZ2UgPC0+IE51bWJlcjogUGFydG5lci1JbnB1 -dCBtaXQgZ2xlaWNoZW0gZGF0YS1rZXkvZGF0YS1mZWxkCiAgICAgICAgICAgIC8vIGF1ZiBkZW4g -Z2xlaWNoZW4gV2VydCBzZXR6ZW4gKGdsZWljaGVyIENvbnRhaW5lcikuCiAgICAgICAgICAgIGlm -IChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Vyc2NoZWludW5nLWlucHV0LXJhbmdlJykg -fHwKICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZXJzY2hlaW51 -bmctaW5wdXQtbnVtJykpIHsKICAgICAgICAgICAgICAgIHZhciBrID0gZS50YXJnZXQuZ2V0QXR0 -cmlidXRlKCdkYXRhLWtleScpOwogICAgICAgICAgICAgICAgdmFyIGYgPSBlLnRhcmdldC5nZXRB -dHRyaWJ1dGUoJ2RhdGEtZmVsZCcpOwogICAgICAgICAgICAgICAgdmFyIHdyYXAgPSBlLnRhcmdl -dC5jbG9zZXN0KCcuZXJzY2hlaW51bmctc2xpZGVyLXdyYXAnKTsKICAgICAgICAgICAgICAgIGlm -ICh3cmFwKSB7CiAgICAgICAgICAgICAgICAgICAgd3JhcC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0 -YS1rZXk9IicgKyBrICsgJyJdW2RhdGEtZmVsZD0iJyArIGYgKyAnIl0nKS5mb3JFYWNoKGZ1bmN0 -aW9uKGlucCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wICE9PSBlLnRhcmdldCAm -JiBpbnAudmFsdWUgIT09IGUudGFyZ2V0LnZhbHVlKSBpbnAudmFsdWUgPSBlLnRhcmdldC52YWx1 -ZTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg -fQogICAgICAgICAgICB2b3JzY2hhdUFrdHVhbGlzaWVyZW4oKTsKICAgICAgICB9KTsKICAgICAg -ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKSB7CiAgICAg -ICAgICAgIGlmICghZS50YXJnZXQuY2xhc3NMaXN0KSByZXR1cm47CiAgICAgICAgICAgIGlmIChl -LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Vyc2NoZWludW5nLWlucHV0JykpIHsKICAgICAg -ICAgICAgICAgIHZvcnNjaGF1QWt0dWFsaXNpZXJlbigpOwogICAgICAgICAgICB9CiAgICAgICAg -fSk7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihl -KSB7CiAgICAgICAgICAgIGlmICghZS50YXJnZXQpIHJldHVybjsKICAgICAgICAgICAgdmFyIGVs -ID0gZS50YXJnZXQ7CiAgICAgICAgICAgIGlmIChlbC5pZCA9PT0gJ2Vyc2NoZWludW5nLXNwZWlj -aGVybicpIHsgZXJzY2hlaW51bmdzYmlsZFNwZWljaGVybigpOyByZXR1cm47IH0KICAgICAgICAg -ICAgaWYgKGVsLmlkID09PSAnZXJzY2hlaW51bmctenVydWVja3NldHplbicpIHsgZXJzY2hlaW51 -bmdzYmlsZFp1cnVlY2tzZXR6ZW4oKTsgcmV0dXJuOyB9CiAgICAgICAgICAgIGlmIChlbC5jbGFz -c0xpc3QgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdlcnNjaGVpbnVuZy1mbGFzaC10ZXN0Jykp -IHsgc3luY0ZsYXNoVm9yc2NoYXUoKTsgcmV0dXJuOyB9CiAgICAgICAgICAgIC8vIFRhYi1XZWNo -c2VsIGltIG5ldWVuIExheW91dCAoS2xpY2sgYXVmIFRhYi1CdXR0b24gb2RlciBzZWluZW4gSW5o -YWx0KQogICAgICAgICAgICB2YXIgdGFiQnRuID0gZWwuY2xvc2VzdCAmJiBlbC5jbG9zZXN0KCdb -ZGF0YS1lcnNjaGVpbnVuZy10YWJdJyk7CiAgICAgICAgICAgIGlmICh0YWJCdG4pIHsgZXJzY2hl -aW51bmdzVGFiV2VjaHNlbG4odGFiQnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1lcnNjaGVpbnVuZy10 -YWInKSk7IHJldHVybjsgfQogICAgICAgICAgICAvLyBLbGljayBhdWYgZWluZSBWb3JzY2hhdS1a -ZWlsZSB3ZWNoc2VsdCBlYmVuZmFsbHMgZGVuIEVkaXRvci1UYWIKICAgICAgICAgICAgdmFyIHZv -cnNjaGF1WmVpbGUgPSBlbC5jbG9zZXN0ICYmIGVsLmNsb3Nlc3QoJy5lcnNjaGVpbnVuZy12b3Jz -Y2hhdS16ZWlsZScpOwogICAgICAgICAgICBpZiAodm9yc2NoYXVaZWlsZSAmJiB2b3JzY2hhdVpl -aWxlLmdldEF0dHJpYnV0ZSgnZGF0YS10eXAnKSkgewogICAgICAgICAgICAgICAgZXJzY2hlaW51 -bmdzVGFiV2VjaHNlbG4odm9yc2NoYXVaZWlsZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwJykpOwog -ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEZhcmIt -WCAoVG9nZ2xlIGxlZXIvU3RhbmRhcmQpCiAgICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QgJiYg -ZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdlcnNjaGVpbnVuZy1mYXJiLXgnKSkgewogICAgICAgICAg -ICAgICAgZXJzY2hlaW51bmdGYXJiZVRvZ2dsZShlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEta2V5Jyks -IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1mZWxkJykpOwogICAgICAgICAgICAgICAgcmV0dXJuOwog -ICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFR5cC1SZXNldCAocHJvIGFrdGl2ZW0gQmxvY2sp -CiAgICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdl -cnNjaGVpbnVuZy10eXAtcmVzZXQnKSkgewogICAgICAgICAgICAgICAgZXJzY2hlaW51bmdzVHlw -WnVydWVja3NldHplbihlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwJykpOwogICAgICAgICAgICAg -ICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIEZlYXR1cmUt -VG9nZ2xlcwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0 -aW9uKGUpIHsKICAgICAgICAgICAgaWYgKCFlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Zl -YXR1cmUtY2hlY2tib3gnKSkgcmV0dXJuOwogICAgICAgICAgICB2YXIga2V5ID0gZS50YXJnZXQu -Z2V0QXR0cmlidXRlKCdkYXRhLWZlYXR1cmUnKTsKICAgICAgICAgICAgaWYgKCFaLmFkbWluLmZl -YXR1cmVzKSBaLmFkbWluLmZlYXR1cmVzID0ge307CiAgICAgICAgICAgIFouYWRtaW4uZmVhdHVy -ZXNba2V5XSA9IGUudGFyZ2V0LmNoZWNrZWQ7CiAgICAgICAgICAgIGFwaVB1dCgnL2FwaS9hZG1p -bicsIFouYWRtaW4pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0b2FzdChmZWF0 -dXJlTGFiZWxzW2tleV0ubGFiZWwgKyAoZS50YXJnZXQuY2hlY2tlZCA/ICcgYWt0aXZpZXJ0JyA6 -ICcgZGVha3RpdmllcnQnKSwgJ2VyZm9sZycpOwogICAgICAgICAgICAgICAgZmVhdHVyZXNSZW5k -ZXJuKCk7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGtvcGZSZW5kZXJuID09PSAnZnVuY3Rp -b24nKSBrb3BmUmVuZGVybigpOwogICAgICAgICAgICAgICAgaWYgKFouc3RhdGlzdGlrKSBzdGF0 -aXN0aWtSZW5kZXJuKCk7CiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikgeyB0b2Fz -dCgnRmVobGVyOiAnICsgZXJyLm1lc3NhZ2UsICdmZWhsZXInKTsgfSk7CiAgICAgICAgfSk7Cgog -ICAgICAgIC8vIEdsb2JhbGUgIlNpY2h0YmFya2VpdCBmdWVyIHJlZ3VsYWVyZSBBZG1pbnMiLVRv -Z2dsZXMgd3VyZGVuCiAgICAgICAgLy8gMjAyNi0wNS0yMyBlbnRmZXJudCDigJQgc2llaGUgYWRt -aW4uanMgU3R1Yi1Lb21tZW50YXIuCgogICAgICAgIC8vIFRlc3RkYXRlbiDigJQgYW5pbWllcnRl -IEZvcnRzY2hyaXR0cy1Cb3ggKFNwaW5uZXIgKyB1bmJlc3RpbW10ZXIgQmFsa2VuKQogICAgICAg -IC8vIHN0YXR0IHN0YXRpc2NoZW0gVGV4dCwgZGEgUmVzZXQvRHVtbXlkYXRlbiBqZSBuYWNoIFBD -IDEtMiBzIGRhdWVybi4KICAgICAgICBmdW5jdGlvbiB0ZXN0ZGF0ZW5Gb3J0c2Nocml0dFplaWdl -bihlcmcsIHRleHQpIHsKICAgICAgICAgICAgZXJnLmNsYXNzTmFtZSA9ICdnZW4tcHJvZ3Jlc3Mt -d3JhcCc7CiAgICAgICAgICAgIGVyZy5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iZ2VuLXByb2dy -ZXNzLWxhYmVsIj4nICsgZXNjYXBlSFRNTCh0ZXh0KSArICc8L2Rpdj4nICsKICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJnZW4tcHJvZ3Jlc3MtYmFyIj48c3Bhbj48L3Nw -YW4+PC9kaXY+JzsKICAgICAgICAgICAgZXJnLmNsYXNzTGlzdC5yZW1vdmUoJ3ZlcnN0ZWNrdCcp -OwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWR1bW15ZGF0 -ZW4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBi -ZXN0YWV0aWdlbigKICAgICAgICAgICAgICAgICdEdW1teWRhdGVuIGVpbnNwaWVsZW4/XG5cbkRp -ZXMgw7xiZXJzY2hyZWlidCBhbGxlIGJlc3RlaGVuZGVuIEVpbnRyw6RnZSAoSmFu4oCTQXByIDIw -MjYpLlxuRWluIEJhY2t1cCB3aXJkIGF1dG9tYXRpc2NoIGVyc3RlbGx0LicsCiAgICAgICAgICAg +LCAnZmVobGVyJyk7IH0pOwogICAgICAgIH0pOwogICAgICAgIHZhciBia1Rib2R5ID0gZG9jdW1l +bnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2t1cC10Ym9keScpOwogICAgICAgIGlmIChia1Rib2R5KSBi +a1Rib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAg +ICB2YXIgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtYWt0aW9uXScpOwogICAgICAgICAg +ICBpZiAoIWJ0bikgcmV0dXJuOwogICAgICAgICAgICB2YXIgZGF0ZWkgPSBidG4uZ2V0QXR0cmli +dXRlKCdkYXRhLWRhdGVpJyk7CiAgICAgICAgICAgIHZhciBha3Rpb24gPSBidG4uZ2V0QXR0cmli +dXRlKCdkYXRhLWFrdGlvbicpOwogICAgICAgICAgICBpZiAoYWt0aW9uID09PSAnYmFja3VwLWRv +d25sb2FkJykgewogICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oJy9hcGkvcGxhbnVuZy9iYWNr +dXAvZG93bmxvYWQvJyArIGVuY29kZVVSSUNvbXBvbmVudChkYXRlaSksICdfYmxhbmsnKTsKICAg +ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYWt0aW9u +ID09PSAnYmFja3VwLWxvZXNjaGVuJykgewogICAgICAgICAgICAgICAgYmVzdGFldGlnZW4oJ0Jh +Y2t1cCDigJ4nICsgZGF0ZWkgKyAnIiBlbmRnw7xsdGlnIGzDtnNjaGVuP1xuXG5EaWVzZSBBa3Rp +b24ga2FubiBuaWNodCByw7xja2fDpG5naWcgZ2VtYWNodCB3ZXJkZW4uJywgZnVuY3Rpb24oKSB7 +CiAgICAgICAgICAgICAgICAgICAgYXBpUG9zdCgnL2FwaS9wbGFudW5nL2JhY2t1cC9sb2VzY2hl +bicsIHsgZGF0ZWluYW1lOiBkYXRlaSB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg +ICAgICAgICAgICB0b2FzdCgnQmFja3VwIGdlbMO2c2NodCcsICdlcmZvbGcnKTsKICAgICAgICAg +ICAgICAgICAgICAgICAgYmFja3VwVGFiZWxsZUxhZGVuKCk7CiAgICAgICAgICAgICAgICAgICAg +fSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7IHRvYXN0KCdGZWhsZXI6ICcgKyBlcnIubWVzc2FnZSwg +J2ZlaGxlcicpOyB9KTsKICAgICAgICAgICAgICAgIH0sIHsgdGl0ZWw6ICdCYWNrdXAgbMO2c2No +ZW4nLCBqYURhbmdlcjogdHJ1ZSB9KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg +ICAgfQogICAgICAgICAgICBpZiAoYWt0aW9uID09PSAnYmFja3VwLXdpZWRlcmhlcnN0ZWxsZW4n +KSB7CiAgICAgICAgICAgICAgICBiZXN0YWV0aWdlbignQWt0dWVsbGUgUGxhbnVuZyBkdXJjaCBC +YWNrdXAg4oCeJyArIGRhdGVpICsgJyIgZXJzZXR6ZW4/XG5cbkVzIHdpcmQgdm9yaGVyIGF1dG9t +YXRpc2NoIGVpbiBTaWNoZXJoZWl0cy1CYWNrdXAgZGVyIGFrdHVlbGxlbiBQbGFudW5nIGVyc3Rl +bGx0LlxuXG5OYWNoIGRlbSBXaWVkZXJoZXJzdGVsbGVuIHdpcmQgZGllIFNlaXRlIG5ldSBnZWxh +ZGVuLicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGFwaVBvc3QoJy9hcGkvcGxh +bnVuZy9iYWNrdXAvd2llZGVyaGVyc3RlbGxlbicsIHsgZGF0ZWluYW1lOiBkYXRlaSB9KS50aGVu +KGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ1dpZWRlcmhlcmdl +c3RlbGx0LiBTaWNoZXJ1bmc6ICcgKyByLnNpY2hlcnVuZywgJ2VyZm9sZycpOwogICAgICAgICAg +ICAgICAgICAgICAgICAvLyBCYWNrdXAtUmVzdG9yZSBlcnpldWd0IHNlaXQgUGhhc2UgNCAoMjAy +Ni0wNS0yMCkgZWluZW4KICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VydmVyLXNlaXRpZ2Vu +IEluLUFwcC1IaW53ZWlzIHN0YXR0IG1haWx0by4KICAgICAgICAgICAgICAgICAgICAgICAgc2V0 +VGltZW91dChmdW5jdGlvbigpIHsgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOyB9LCAxMjAwKTsK +ICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHsgdG9hc3QoJ0ZlaGxl +cjogJyArIGVyci5tZXNzYWdlLCAnZmVobGVyJyk7IH0pOwogICAgICAgICAgICAgICAgfSwgeyB0 +aXRlbDogJ0JhY2t1cCB3aWVkZXJoZXJzdGVsbGVuJywgamFUZXh0OiAnV2llZGVyaGVyc3RlbGxl +bicsIGphRGFuZ2VyOiB0cnVlIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAg +IC8vIFNjaGljaHRjb2RlcwogICAgICAgIHZhciBidG5TY05ldSA9IGRvY3VtZW50LmdldEVsZW1l +bnRCeUlkKCdidG4tc2NoaWNodGNvZGUtbmV1Jyk7CiAgICAgICAgaWYgKGJ0blNjTmV1KSBidG5T +Y05ldS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgeyBzY2hpY2h0Y29kZUVk +aXRNb2RhbFplaWdlbihudWxsKTsgfSk7CiAgICAgICAgdmFyIHNjVm9yc2NoYXUgPSBkb2N1bWVu +dC5nZXRFbGVtZW50QnlJZCgnc2NoaWNodGNvZGUtdm9yc2NoYXUnKTsKICAgICAgICBpZiAoc2NW +b3JzY2hhdSkgc2NWb3JzY2hhdS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUp +IHsKICAgICAgICAgICAgdmFyIGVkaXQgPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249 +InNjaGljaHRjb2RlLWJlYXJiZWl0ZW4iXScpOwogICAgICAgICAgICBpZiAoZWRpdCkgeyBzY2hp +Y2h0Y29kZUVkaXRNb2RhbFplaWdlbihlZGl0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb2RlJykpOyBy +ZXR1cm47IH0KICAgICAgICAgICAgdmFyIHRvZyA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFr +dGlvbj0ic2NoaWNodGNvZGUtdG9nZ2xlIl0nKTsKICAgICAgICAgICAgaWYgKHRvZykgc2NoaWNo +dGNvZGVUb2dnbGVBa3Rpdih0b2cuZ2V0QXR0cmlidXRlKCdkYXRhLWNvZGUnKSk7CiAgICAgICAg +fSk7CgogICAgICAgIC8vIFNvbmRlcnRlcm1pbi1LbGlja3MgbGF1ZmVuIHNlaXQgTWFpIDIwMjYg +dWViZXIgZGVuIEFubGFzcy1aZWlsZW4tCiAgICAgICAgLy8gSGFuZGxlciAoc2llaGUgb2Jlbiks +IHdlaWwgZGllIGVoZW1hbHMgc2VwYXJhdGUgRXZlbnRzLVplaWxlIGluCiAgICAgICAgLy8gZGll +IEFubGFzcy1aZWlsZSB6dXNhbW1lbmdlZnVlaHJ0IHd1cmRlLgoKICAgICAgICAvLyBFcnNjaGVp +bnVuZ3NiaWxkLUVkaXRvcjogYmVpIGplZGVtIElucHV0IGxpdmUgYW53ZW5kZW4gKG51ciBaLmFk +bWluLm1hcmtpZXJ1bmdlbgogICAgICAgIC8vIGluLW1lbW9yeSwgcGVyc2lzdGllcnQgd2lyZCBl +cnN0IGJlaW0gU3BlaWNoZXJuLUtsaWNrKS4KICAgICAgICAvLyBSYW5nZSArIE51bWJlci1JbnB1 +dCBmdWVyIGRhc3NlbGJlIEZlbGQgd2VyZGVuIGhpZXIgc3luY2hyb25pc2llcnQuCiAgICAgICAg +ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAg +ICAgIGlmICghZS50YXJnZXQuY2xhc3NMaXN0IHx8ICFlLnRhcmdldC5jbGFzc0xpc3QuY29udGFp +bnMoJ2Vyc2NoZWludW5nLWlucHV0JykpIHJldHVybjsKICAgICAgICAgICAgLy8gUmFuZ2UgPC0+ +IE51bWJlcjogUGFydG5lci1JbnB1dCBtaXQgZ2xlaWNoZW0gZGF0YS1rZXkvZGF0YS1mZWxkCiAg +ICAgICAgICAgIC8vIGF1ZiBkZW4gZ2xlaWNoZW4gV2VydCBzZXR6ZW4gKGdsZWljaGVyIENvbnRh +aW5lcikuCiAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Vyc2No +ZWludW5nLWlucHV0LXJhbmdlJykgfHwKICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNsYXNzTGlz +dC5jb250YWlucygnZXJzY2hlaW51bmctaW5wdXQtbnVtJykpIHsKICAgICAgICAgICAgICAgIHZh +ciBrID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWtleScpOwogICAgICAgICAgICAgICAg +dmFyIGYgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmVsZCcpOwogICAgICAgICAgICAg +ICAgdmFyIHdyYXAgPSBlLnRhcmdldC5jbG9zZXN0KCcuZXJzY2hlaW51bmctc2xpZGVyLXdyYXAn +KTsKICAgICAgICAgICAgICAgIGlmICh3cmFwKSB7CiAgICAgICAgICAgICAgICAgICAgd3JhcC5x +dWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1rZXk9IicgKyBrICsgJyJdW2RhdGEtZmVsZD0iJyArIGYg +KyAnIl0nKS5mb3JFYWNoKGZ1bmN0aW9uKGlucCkgewogICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoaW5wICE9PSBlLnRhcmdldCAmJiBpbnAudmFsdWUgIT09IGUudGFyZ2V0LnZhbHVlKSBpbnAu +dmFsdWUgPSBlLnRhcmdldC52YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg +ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB2b3JzY2hhdUFrdHVhbGlzaWVyZW4o +KTsKICAgICAgICB9KTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2Un +LCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmICghZS50YXJnZXQuY2xhc3NMaXN0KSByZXR1 +cm47CiAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Vyc2NoZWlu +dW5nLWlucHV0JykpIHsKICAgICAgICAgICAgICAgIHZvcnNjaGF1QWt0dWFsaXNpZXJlbigpOwog +ICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5l +cignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmICghZS50YXJnZXQpIHJldHVy +bjsKICAgICAgICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgICAgICAgIGlmIChlbC5pZCA9 +PT0gJ2Vyc2NoZWludW5nLXNwZWljaGVybicpIHsgZXJzY2hlaW51bmdzYmlsZFNwZWljaGVybigp +OyByZXR1cm47IH0KICAgICAgICAgICAgaWYgKGVsLmlkID09PSAnZXJzY2hlaW51bmctenVydWVj +a3NldHplbicpIHsgZXJzY2hlaW51bmdzYmlsZFp1cnVlY2tzZXR6ZW4oKTsgcmV0dXJuOyB9CiAg +ICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdlcnNj +aGVpbnVuZy1mbGFzaC10ZXN0JykpIHsgc3luY0ZsYXNoVm9yc2NoYXUoKTsgcmV0dXJuOyB9CiAg +ICAgICAgICAgIC8vIFRhYi1XZWNoc2VsIGltIG5ldWVuIExheW91dCAoS2xpY2sgYXVmIFRhYi1C +dXR0b24gb2RlciBzZWluZW4gSW5oYWx0KQogICAgICAgICAgICB2YXIgdGFiQnRuID0gZWwuY2xv +c2VzdCAmJiBlbC5jbG9zZXN0KCdbZGF0YS1lcnNjaGVpbnVuZy10YWJdJyk7CiAgICAgICAgICAg +IGlmICh0YWJCdG4pIHsgZXJzY2hlaW51bmdzVGFiV2VjaHNlbG4odGFiQnRuLmdldEF0dHJpYnV0 +ZSgnZGF0YS1lcnNjaGVpbnVuZy10YWInKSk7IHJldHVybjsgfQogICAgICAgICAgICAvLyBLbGlj +ayBhdWYgZWluZSBWb3JzY2hhdS1aZWlsZSB3ZWNoc2VsdCBlYmVuZmFsbHMgZGVuIEVkaXRvci1U +YWIKICAgICAgICAgICAgdmFyIHZvcnNjaGF1WmVpbGUgPSBlbC5jbG9zZXN0ICYmIGVsLmNsb3Nl +c3QoJy5lcnNjaGVpbnVuZy12b3JzY2hhdS16ZWlsZScpOwogICAgICAgICAgICBpZiAodm9yc2No +YXVaZWlsZSAmJiB2b3JzY2hhdVplaWxlLmdldEF0dHJpYnV0ZSgnZGF0YS10eXAnKSkgewogICAg +ICAgICAgICAgICAgZXJzY2hlaW51bmdzVGFiV2VjaHNlbG4odm9yc2NoYXVaZWlsZS5nZXRBdHRy +aWJ1dGUoJ2RhdGEtdHlwJykpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9 +CiAgICAgICAgICAgIC8vIEZhcmItWCAoVG9nZ2xlIGxlZXIvU3RhbmRhcmQpCiAgICAgICAgICAg +IGlmIChlbC5jbGFzc0xpc3QgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdlcnNjaGVpbnVuZy1m +YXJiLXgnKSkgewogICAgICAgICAgICAgICAgZXJzY2hlaW51bmdGYXJiZVRvZ2dsZShlbC5nZXRB +dHRyaWJ1dGUoJ2RhdGEta2V5JyksIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1mZWxkJykpOwogICAg +ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFR5cC1SZXNl +dCAocHJvIGFrdGl2ZW0gQmxvY2spCiAgICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QgJiYgZWwu +Y2xhc3NMaXN0LmNvbnRhaW5zKCdlcnNjaGVpbnVuZy10eXAtcmVzZXQnKSkgewogICAgICAgICAg +ICAgICAgZXJzY2hlaW51bmdzVHlwWnVydWVja3NldHplbihlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEt +dHlwJykpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfSk7 +CgogICAgICAgIC8vIEZlYXR1cmUtVG9nZ2xlcwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlz +dGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKCFlLnRhcmdldC5j +bGFzc0xpc3QuY29udGFpbnMoJ2ZlYXR1cmUtY2hlY2tib3gnKSkgcmV0dXJuOwogICAgICAgICAg +ICB2YXIga2V5ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWZlYXR1cmUnKTsKICAgICAg +ICAgICAgaWYgKCFaLmFkbWluLmZlYXR1cmVzKSBaLmFkbWluLmZlYXR1cmVzID0ge307CiAgICAg +ICAgICAgIFouYWRtaW4uZmVhdHVyZXNba2V5XSA9IGUudGFyZ2V0LmNoZWNrZWQ7CiAgICAgICAg +ICAgIGFwaVB1dCgnL2FwaS9hZG1pbicsIFouYWRtaW4pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAg +ICAgICAgICAgICB0b2FzdChmZWF0dXJlTGFiZWxzW2tleV0ubGFiZWwgKyAoZS50YXJnZXQuY2hl +Y2tlZCA/ICcgYWt0aXZpZXJ0JyA6ICcgZGVha3RpdmllcnQnKSwgJ2VyZm9sZycpOwogICAgICAg +ICAgICAgICAgZmVhdHVyZXNSZW5kZXJuKCk7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGtv +cGZSZW5kZXJuID09PSAnZnVuY3Rpb24nKSBrb3BmUmVuZGVybigpOwogICAgICAgICAgICAgICAg +aWYgKFouc3RhdGlzdGlrKSBzdGF0aXN0aWtSZW5kZXJuKCk7CiAgICAgICAgICAgIH0pLmNhdGNo +KGZ1bmN0aW9uKGVycikgeyB0b2FzdCgnRmVobGVyOiAnICsgZXJyLm1lc3NhZ2UsICdmZWhsZXIn +KTsgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEdsb2JhbGUgIlNpY2h0YmFya2VpdCBmdWVy +IHJlZ3VsYWVyZSBBZG1pbnMiLVRvZ2dsZXMgd3VyZGVuCiAgICAgICAgLy8gMjAyNi0wNS0yMyBl +bnRmZXJudCDigJQgc2llaGUgYWRtaW4uanMgU3R1Yi1Lb21tZW50YXIuCgogICAgICAgIC8vIFRl +c3RkYXRlbiDigJQgYW5pbWllcnRlIEZvcnRzY2hyaXR0cy1Cb3ggKFNwaW5uZXIgKyB1bmJlc3Rp +bW10ZXIgQmFsa2VuKQogICAgICAgIC8vIHN0YXR0IHN0YXRpc2NoZW0gVGV4dCwgZGEgUmVzZXQv +RHVtbXlkYXRlbiBqZSBuYWNoIFBDIDEtMiBzIGRhdWVybi4KICAgICAgICBmdW5jdGlvbiB0ZXN0 +ZGF0ZW5Gb3J0c2Nocml0dFplaWdlbihlcmcsIHRleHQpIHsKICAgICAgICAgICAgZXJnLmNsYXNz +TmFtZSA9ICdnZW4tcHJvZ3Jlc3Mtd3JhcCc7CiAgICAgICAgICAgIGVyZy5pbm5lckhUTUwgPSAn +PGRpdiBjbGFzcz0iZ2VuLXByb2dyZXNzLWxhYmVsIj4nICsgZXNjYXBlSFRNTCh0ZXh0KSArICc8 +L2Rpdj4nICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJnZW4tcHJv +Z3Jlc3MtYmFyIj48c3Bhbj48L3NwYW4+PC9kaXY+JzsKICAgICAgICAgICAgZXJnLmNsYXNzTGlz +dC5yZW1vdmUoJ3ZlcnN0ZWNrdCcpOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5nZXRFbGVt +ZW50QnlJZCgnYnRuLWR1bW15ZGF0ZW4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0 +aW9uKCkgewogICAgICAgICAgICBiZXN0YWV0aWdlbigKICAgICAgICAgICAgICAgICdEdW1teWRh +dGVuIGVpbnNwaWVsZW4/XG5cbkRpZXMgw7xiZXJzY2hyZWlidCBhbGxlIGJlc3RlaGVuZGVuIEVp +bnRyw6RnZSAoSmFu4oCTQXByIDIwMjYpLlxuRWluIEJhY2t1cCB3aXJkIGF1dG9tYXRpc2NoIGVy +c3RlbGx0LicsCiAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAg +ICB2YXIgZXJnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3RkYXRlbi1lcmdlYm5pcycp +OwogICAgICAgICAgICAgICAgICAgIHRlc3RkYXRlbkZvcnRzY2hyaXR0WmVpZ2VuKGVyZywgJ0R1 +bW15ZGF0ZW4gd2VyZGVuIGdlbmVyaWVydCDigKYnKTsKICAgICAgICAgICAgICAgICAgICBhcGlQ +b3N0KCcvYXBpL3BsYW51bmcvZHVtbXlkYXRlbicsIHt9KS50aGVuKGZ1bmN0aW9uKHIpIHsKICAg +ICAgICAgICAgICAgICAgICAgICAgdmFyIGxibCA9IGVyZy5xdWVyeVNlbGVjdG9yKCcuZ2VuLXBy +b2dyZXNzLWxhYmVsJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYmwpIGxibC50ZXh0 +Q29udGVudCA9ICdEYXRlbiBlcnpldWd0IOKAlCBBbnNpY2h0IHdpcmQgYWt0dWFsaXNpZXJ0IOKA +pic7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpcmVrdCBuZXUgcmVuZGVybiBzdGF0dCBz +ZXRUaW1lb3V0K0Y1OiBkYXRlbkxhZGVuIGhvbHQgZGllCiAgICAgICAgICAgICAgICAgICAgICAg +IC8vIGZyaXNjaGVuIERhdGVuLCBncmlkUmVuZGVybiBiYXV0IGRpZSBUYWZlbCBrb21wbGV0dCBu +ZXUgYXVmLgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZW5MYWRlbigpLnRoZW4o +ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkUmVuZGVybigpOwog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJnLmNsYXNzTmFtZSA9ICdnZW4tZXJmb2xnJzsK +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyZy50ZXh0Q29udGVudCA9IChyICYmIHIuZWlu +dHJhZWdlICE9IG51bGwgPyByLmVpbnRyYWVnZSArICcgRWludHLDpGdlIGdlbmVyaWVydC4gJyA6 +ICdEdW1teWRhdGVuIGdlbmVyaWVydC4gJykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIChyICYmIHIuYmFja3VwID8gJ0JhY2t1cCBnZXNpY2hlcnQ6ICcgKyByLmJhY2t1cCArICcu +JyA6ICdFaW4gQmFja3VwIHd1cmRlIGdlc2ljaGVydC4nKTsKICAgICAgICAgICAgICAgICAgICAg +ICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkgewogICAgICAg +ICAgICAgICAgICAgICAgICBlcmcuY2xhc3NOYW1lID0gJ2dlbi1mZWhsZXInOwogICAgICAgICAg +ICAgICAgICAgICAgICBlcmcudGV4dENvbnRlbnQgPSAnRmVobGVyOiAnICsgKGUgJiYgZS5tZXNz +YWdlID8gZS5tZXNzYWdlIDogZSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg +ICAgICB9LAogICAgICAgICAgICAgICAgeyB0aXRlbDogJ0R1bW15ZGF0ZW4gZWluc3BpZWxlbics +IGphVGV4dDogJ0VpbnNwaWVsZW4nLCBqYURhbmdlcjogdHJ1ZSB9CiAgICAgICAgICAgICk7CiAg +ICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1yZXNldCcpLmFk +ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGJlc3RhZXRp +Z2VuKAogICAgICAgICAgICAgICAgJ1BsYW51bmcgd2lya2xpY2ggenVyw7xja3NldHplbj9cblxu +QUxMRSBFaW50csOkZ2UgdW5kIEtvbW1lbnRhcmUgd2VyZGVuIGdlbMO2c2NodCFcblBlcnNvbmVu +IHVuZCBFaW5zdGVsbHVuZ2VuIGJsZWliZW4gZXJoYWx0ZW4uXG5FaW4gQmFja3VwIHdpcmQgYXV0 +b21hdGlzY2ggZXJzdGVsbHQuJywKICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewogICAgICAg +ICAgICAgICAgICAgIHZhciBlcmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdGRhdGVu +LWVyZ2VibmlzJyk7CiAgICAgICAgICAgICAgICAgICAgdGVzdGRhdGVuRm9ydHNjaHJpdHRaZWln +ZW4oZXJnLCAnUGxhbnVuZyB3aXJkIHp1csO8Y2tnZXNldHp0IOKApicpOwogICAgICAgICAgICAg +ICAgICAgIGFwaVBvc3QoJy9hcGkvcGxhbnVuZy9yZXNldCcsIHt9KS50aGVuKGZ1bmN0aW9uKHIp +IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxibCA9IGVyZy5xdWVyeVNlbGVjdG9yKCcu +Z2VuLXByb2dyZXNzLWxhYmVsJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYmwpIGxi +bC50ZXh0Q29udGVudCA9ICdHZWxlZXJ0IOKAlCBBbnNpY2h0IHdpcmQgYWt0dWFsaXNpZXJ0IOKA +pic7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBsYW51bmctUmVzZXQgZXJ6ZXVndCBzZWl0 +IFBoYXNlIDQgKDIwMjYtMDUtMjApIGVpbmVuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNl +cnZlci1zZWl0aWdlbiBJbi1BcHAtSGlud2VpcyBzdGF0dCBtYWlsdG8uCiAgICAgICAgICAgICAg +ICAgICAgICAgIC8vIERpcmVrdCBuZXUgcmVuZGVybiBzdGF0dCBzZXRUaW1lb3V0K0Y1OiBzb25z +dCBibGllYmVuIGRpZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHRlbiBaZWxsZW4gc2lj +aHRiYXIgYmlzIHp1bSBtYW51ZWxsZW4gUmVsb2FkLgogICAgICAgICAgICAgICAgICAgICAgICBy +ZXR1cm4gZGF0ZW5MYWRlbigpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBncmlkUmVuZGVybigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJnLmNs +YXNzTmFtZSA9ICdnZW4tZXJmb2xnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyZy50 +ZXh0Q29udGVudCA9ICdQbGFudW5nIHp1csO8Y2tnZXNldHp0IOKAlCBhbGxlIEVpbnRyw6RnZSB1 +bmQgS29tbWVudGFyZSBnZWzDtnNjaHQuJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgKHIgJiYgci5iYWNrdXAgPyAnIEJhY2t1cCBnZXNpY2hlcnQ6ICcgKyByLmJhY2t1cCArICcu +JyA6ICcgRWluIEJhY2t1cCB3dXJkZSBhdXRvbWF0aXNjaCBnZXNpY2hlcnQuJyk7CiAgICAgICAg +ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9u +KGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXJnLmNsYXNzTmFtZSA9ICdnZW4tZmVobGVy +JzsKICAgICAgICAgICAgICAgICAgICAgICAgZXJnLnRleHRDb250ZW50ID0gJ0ZlaGxlcjogJyAr +IChlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IGUpOwogICAgICAgICAgICAgICAgICAgIH0p +OwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsgdGl0ZWw6ICdQbGFudW5nIHp1 +csO8Y2tzZXR6ZW4nLCBqYVRleHQ6ICdadXLDvGNrc2V0emVuJywgamFEYW5nZXI6IHRydWUgfQog +ICAgICAgICAgICApOwogICAgICAgIH0pOwoKICAgICAgICAvLyBQcm90b2tvbGwgbG9lc2NoZW4g +KExvZ2J1Y2ggKyBBUEktTG9nKS4gRGVzdHJ1a3Rpdi4KICAgICAgICBkb2N1bWVudC5nZXRFbGVt +ZW50QnlJZCgnYnRuLXByb3Rva29sbC1sb2VzY2hlbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNr +JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGJlc3RhZXRpZ2VuKAogICAgICAgICAgICAgICAg +J1Byb3Rva29sbCB3aXJrbGljaCBsw7ZzY2hlbj9cblxuTG9nYnVjaCB3aXJkIGF1ZiAwIEVpbnRy +w6RnZSB6dXLDvGNrZ2VzZXR6dCwgZGllIEFQSS1Mb2ctRGF0ZWkgd2lyZCBnZWzDtnNjaHQuXG5E +aWVzZSBBa3Rpb24gaXN0IG5pY2h0IHLDvGNrZ8OkbmdpZyBtYWNoYmFyLicsCiAgICAgICAgICAg ICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZXJnID0gZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoJ3Rlc3RkYXRlbi1lcmdlYm5pcycpOwogICAgICAgICAgICAgICAgICAg -IHRlc3RkYXRlbkZvcnRzY2hyaXR0WmVpZ2VuKGVyZywgJ0R1bW15ZGF0ZW4gd2VyZGVuIGdlbmVy -aWVydCDigKYnKTsKICAgICAgICAgICAgICAgICAgICBhcGlQb3N0KCcvYXBpL3BsYW51bmcvZHVt -bXlkYXRlbicsIHt9KS50aGVuKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAg -dmFyIGxibCA9IGVyZy5xdWVyeVNlbGVjdG9yKCcuZ2VuLXByb2dyZXNzLWxhYmVsJyk7CiAgICAg -ICAgICAgICAgICAgICAgICAgIGlmIChsYmwpIGxibC50ZXh0Q29udGVudCA9ICdEYXRlbiBlcnpl -dWd0IOKAlCBBbnNpY2h0IHdpcmQgYWt0dWFsaXNpZXJ0IOKApic7CiAgICAgICAgICAgICAgICAg -ICAgICAgIC8vIERpcmVrdCBuZXUgcmVuZGVybiBzdGF0dCBzZXRUaW1lb3V0K0Y1OiBkYXRlbkxh -ZGVuIGhvbHQgZGllCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyaXNjaGVuIERhdGVuLCBn -cmlkUmVuZGVybiBiYXV0IGRpZSBUYWZlbCBrb21wbGV0dCBuZXUgYXVmLgogICAgICAgICAgICAg -ICAgICAgICAgICByZXR1cm4gZGF0ZW5MYWRlbigpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBncmlkUmVuZGVybigpOwogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgZXJnLmNsYXNzTmFtZSA9ICdnZW4tZXJmb2xnJzsKICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGVyZy50ZXh0Q29udGVudCA9IChyICYmIHIuZWludHJhZWdlICE9IG51bGwgPyByLmVp -bnRyYWVnZSArICcgRWludHLDpGdlIGdlbmVyaWVydC4gJyA6ICdEdW1teWRhdGVuIGdlbmVyaWVy -dC4gJykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyICYmIHIuYmFja3VwID8g -J0JhY2t1cCBnZXNpY2hlcnQ6ICcgKyByLmJhY2t1cCArICcuJyA6ICdFaW4gQmFja3VwIHd1cmRl -IGdlc2ljaGVydC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg -ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgICAgICBlcmcu -Y2xhc3NOYW1lID0gJ2dlbi1mZWhsZXInOwogICAgICAgICAgICAgICAgICAgICAgICBlcmcudGV4 -dENvbnRlbnQgPSAnRmVobGVyOiAnICsgKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogZSk7 -CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAg -ICAgeyB0aXRlbDogJ0R1bW15ZGF0ZW4gZWluc3BpZWxlbicsIGphVGV4dDogJ0VpbnNwaWVsZW4n -LCBqYURhbmdlcjogdHJ1ZSB9CiAgICAgICAgICAgICk7CiAgICAgICAgfSk7CiAgICAgICAgZG9j -dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1yZXNldCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNr -JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGJlc3RhZXRpZ2VuKAogICAgICAgICAgICAgICAg -J1BsYW51bmcgd2lya2xpY2ggenVyw7xja3NldHplbj9cblxuQUxMRSBFaW50csOkZ2UgdW5kIEtv -bW1lbnRhcmUgd2VyZGVuIGdlbMO2c2NodCFcblBlcnNvbmVuIHVuZCBFaW5zdGVsbHVuZ2VuIGJs -ZWliZW4gZXJoYWx0ZW4uXG5FaW4gQmFja3VwIHdpcmQgYXV0b21hdGlzY2ggZXJzdGVsbHQuJywK -ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBlcmcg -PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdGRhdGVuLWVyZ2VibmlzJyk7CiAgICAgICAg -ICAgICAgICAgICAgdGVzdGRhdGVuRm9ydHNjaHJpdHRaZWlnZW4oZXJnLCAnUGxhbnVuZyB3aXJk -IHp1csO8Y2tnZXNldHp0IOKApicpOwogICAgICAgICAgICAgICAgICAgIGFwaVBvc3QoJy9hcGkv -cGxhbnVuZy9yZXNldCcsIHt9KS50aGVuKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgICAgICAg -ICAgICAgdmFyIGxibCA9IGVyZy5xdWVyeVNlbGVjdG9yKCcuZ2VuLXByb2dyZXNzLWxhYmVsJyk7 -CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYmwpIGxibC50ZXh0Q29udGVudCA9ICdHZWxl -ZXJ0IOKAlCBBbnNpY2h0IHdpcmQgYWt0dWFsaXNpZXJ0IOKApic7CiAgICAgICAgICAgICAgICAg -ICAgICAgIC8vIFBsYW51bmctUmVzZXQgZXJ6ZXVndCBzZWl0IFBoYXNlIDQgKDIwMjYtMDUtMjAp -IGVpbmVuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcnZlci1zZWl0aWdlbiBJbi1BcHAt -SGlud2VpcyBzdGF0dCBtYWlsdG8uCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpcmVrdCBu -ZXUgcmVuZGVybiBzdGF0dCBzZXRUaW1lb3V0K0Y1OiBzb25zdCBibGllYmVuIGRpZQogICAgICAg -ICAgICAgICAgICAgICAgICAvLyBhbHRlbiBaZWxsZW4gc2ljaHRiYXIgYmlzIHp1bSBtYW51ZWxs -ZW4gUmVsb2FkLgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZW5MYWRlbigpLnRo -ZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkUmVuZGVybigp -OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJnLmNsYXNzTmFtZSA9ICdnZW4tZXJmb2xn -JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyZy50ZXh0Q29udGVudCA9ICdQbGFudW5n -IHp1csO8Y2tnZXNldHp0IOKAlCBhbGxlIEVpbnRyw6RnZSB1bmQgS29tbWVudGFyZSBnZWzDtnNj -aHQuJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHIgJiYgci5iYWNrdXAgPyAn -IEJhY2t1cCBnZXNpY2hlcnQ6ICcgKyByLmJhY2t1cCArICcuJyA6ICcgRWluIEJhY2t1cCB3dXJk -ZSBhdXRvbWF0aXNjaCBnZXNpY2hlcnQuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwog -ICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAg -ICAgICAgICAgZXJnLmNsYXNzTmFtZSA9ICdnZW4tZmVobGVyJzsKICAgICAgICAgICAgICAgICAg -ICAgICAgZXJnLnRleHRDb250ZW50ID0gJ0ZlaGxlcjogJyArIChlICYmIGUubWVzc2FnZSA/IGUu -bWVzc2FnZSA6IGUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSwK -ICAgICAgICAgICAgICAgIHsgdGl0ZWw6ICdQbGFudW5nIHp1csO8Y2tzZXR6ZW4nLCBqYVRleHQ6 -ICdadXLDvGNrc2V0emVuJywgamFEYW5nZXI6IHRydWUgfQogICAgICAgICAgICApOwogICAgICAg -IH0pOwoKICAgICAgICAvLyBQcm90b2tvbGwgbG9lc2NoZW4gKExvZ2J1Y2ggKyBBUEktTG9nKS4g -RGVzdHJ1a3Rpdi4KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXByb3Rva29s -bC1sb2VzY2hlbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAg -ICAgICAgIGJlc3RhZXRpZ2VuKAogICAgICAgICAgICAgICAgJ1Byb3Rva29sbCB3aXJrbGljaCBs -w7ZzY2hlbj9cblxuTG9nYnVjaCB3aXJkIGF1ZiAwIEVpbnRyw6RnZSB6dXLDvGNrZ2VzZXR6dCwg -ZGllIEFQSS1Mb2ctRGF0ZWkgd2lyZCBnZWzDtnNjaHQuXG5EaWVzZSBBa3Rpb24gaXN0IG5pY2h0 -IHLDvGNrZ8OkbmdpZyBtYWNoYmFyLicsCiAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKICAg -ICAgICAgICAgICAgICAgICB2YXIgZXJnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3Rk -YXRlbi1lcmdlYm5pcycpOwogICAgICAgICAgICAgICAgICAgIGVyZy5jbGFzc05hbWUgPSAnZ2Vu -LWluZm8nOwogICAgICAgICAgICAgICAgICAgIGVyZy50ZXh0Q29udGVudCA9ICdQcm90b2tvbGwg -d2lyZCBnZWzDtnNjaHQuLi4nOwogICAgICAgICAgICAgICAgICAgIGVyZy5jbGFzc0xpc3QucmVt -b3ZlKCd2ZXJzdGVja3QnKTsKICAgICAgICAgICAgICAgICAgICBhcGlQb3N0KCcvYXBpL2FkbWlu -L3Byb3Rva29sbC1sb2VzY2hlbicsIHt9KS50aGVuKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAg -ICAgICAgICAgICAgZXJnLmNsYXNzTmFtZSA9ICdnZW4tZXJmb2xnJzsKICAgICAgICAgICAgICAg -ICAgICAgICAgdmFyIGJ5dGVzID0gKHIuYXBpTG9nQnl0ZXMgPj0gMCkgPyAoci5hcGlMb2dCeXRl -cyArICcgQnl0ZXMnKSA6ICdEYXRlaSB3YXIgZ2VzcGVycnQnOwogICAgICAgICAgICAgICAgICAg -ICAgICBlcmcudGV4dENvbnRlbnQgPSAnUHJvdG9rb2xsIGdlbMO2c2NodC4gTG9nYnVjaC1FaW50 -csOkZ2Ugdm9yaGVyOiAnICsgci5sb2didWNoRWludHJhZWdlVm9yaGVyICsgJy4gQVBJLUxvZzog -JyArIGJ5dGVzICsgJy4nOwogICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUp -IHsKICAgICAgICAgICAgICAgICAgICAgICAgZXJnLmNsYXNzTmFtZSA9ICdnZW4tZmVobGVyJzsK -ICAgICAgICAgICAgICAgICAgICAgICAgZXJnLnRleHRDb250ZW50ID0gJ0ZlaGxlcjogJyArIGUu -bWVzc2FnZTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0sCiAgICAg -ICAgICAgICAgICB7IHRpdGVsOiAnUHJvdG9rb2xsIGzDtnNjaGVuJywgamFUZXh0OiAnTMO2c2No -ZW4nLCBqYURhbmdlcjogdHJ1ZSB9CiAgICAgICAgICAgICk7CiAgICAgICAgfSk7CgogICAgICAg -IC8vIE1pdHRlaWx1bmdlbiAoU3ByaW50IEQtM2MsIDIwMjYtMDUtMjkpOiAiKyBOZXVlIE1pdHRl -aWx1bmciLUJ1dHRvbgogICAgICAgIHZhciBidG5NaXROZXUgPSBkb2N1bWVudC5nZXRFbGVtZW50 -QnlJZCgnYnRuLW1pdHRlaWx1bmctbmV1Jyk7CiAgICAgICAgaWYgKGJ0bk1pdE5ldSkgYnRuTWl0 -TmV1LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbWl0dGVpbHVuZ05ldU9lZmZuZW4pOwoKICAg -ICAgICAvLyBTdXBlclVzZXIKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXN1 -cGVydXNlci1uZXUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAg -ICAgICAgICBaLmFkbWluLnN1cGVyVXNlciA9IFouYWRtaW4uc3VwZXJVc2VyIHx8IFtdOwogICAg -ICAgICAgICBaLmFkbWluLnN1cGVyVXNlci5wdXNoKHsgbmFtZTogJycsIG53S2VubnVuZzogJycg -fSk7CiAgICAgICAgICAgIHN1cGVyVXNlclJlbmRlcm4oKTsKICAgICAgICB9KTsKICAgICAgICBk -b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VwZXJ1c2VyLXRib2R5JykuYWRkRXZlbnRMaXN0ZW5l -cignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBidG4gPSBlLnRhcmdldC5j -bG9zZXN0KCdbZGF0YS1ha3Rpb249InN1cGVydXNlci1sb2VzY2hlbiJdJyk7CiAgICAgICAgICAg -IGlmIChidG4pIHsKICAgICAgICAgICAgICAgIHZhciBpZHggPSBwYXJzZUludChidG4uZ2V0QXR0 -cmlidXRlKCdkYXRhLWlkeCcpKTsKICAgICAgICAgICAgICAgIFouYWRtaW4uc3VwZXJVc2VyLnNw -bGljZShpZHgsIDEpOwogICAgICAgICAgICAgICAgc3VwZXJVc2VyUmVuZGVybigpOwogICAgICAg -ICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1z -dXBlcnVzZXItc3BlaWNoZXJuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigp -IHsKICAgICAgICAgICAgdmFyIGRhdGVuID0gc3VwZXJVc2VyQXVzVGFiZWxsZUxlc2VuKCk7CiAg -ICAgICAgICAgIGlmIChkYXRlbi5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgIHRvYXN0 -KCdNaW5kZXN0ZW5zIGVpbiBTdXBlclVzZXIgbXVzcyBleGlzdGllcmVuJywgJ3dhcm51bmcnKTsK -ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBhcGlQdXQo -Jy9hcGkvYWRtaW4vc3VwZXJ1c2VyJywgZGF0ZW4pLnRoZW4oZnVuY3Rpb24ocikgewogICAgICAg -ICAgICAgICAgWi5hZG1pbi5zdXBlclVzZXIgPSBkYXRlbjsKICAgICAgICAgICAgICAgIGRpcnR5 -U2V0emVuKCdzdXBlcnVzZXInLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB0b2FzdCgnU3VwZXJV -c2VyIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycpOwogICAgICAgICAgICAgICAgLy8gU2VydmVyIGxp -ZWZlcnQgYmVpIFNVLVJlaW4vUmF1cyBfYnJhdWNodF9tYWlsdG8gaW0gUmVzcG9uc2UuCiAgICAg -ICAgICAgICAgICAvLyBWZXJhbnR3b3J0dW5ncy1VZWJlcmdhbmdzLU1haWx0byB3aXJkIGhpZXIg -Z2VvZWZmbmV0IChQaGFzZSA1KS4KICAgICAgICAgICAgICAgIGlmIChyICYmIHIuX2JyYXVjaHRf -bWFpbHRvKSB2ZXJhbnR3b3J0dW5nc01haWx0b0ZldWVybihyLl9icmF1Y2h0X21haWx0byk7CiAg -ICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsgdG9hc3QoJ0ZlaGxlcjogJyArIGUubWVz -c2FnZSwgJ2ZlaGxlcicpOyB9KTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gRmFjaGF1ZnNpY2h0 -IOKAlCAiTmV1Ii1CdXR0b24gb2VmZm5ldCBNb2RhbCBtaXQgRHJvcGRvd24tQXVzd2FobAogICAg -ICAgIC8vIChXYWNobGVpdHVuZ2VuKSBvZGVyIG1hbnVlbGxlciBBbmxhZ2UgKFBlcnNvbiBlcnNj -aGVpbnQgTklDSFQgaW4KICAgICAgICAvLyBkZXIgUGxhbnVuZykuIFZvcmhlcjogbGVlcmUgUmVp -aGVuIHd1cmRlbiBkaXJla3QgaW4gZGllIFRhYmVsbGUKICAgICAgICAvLyBnZXB1c2h0IOKAlCB3 -YXMgenUgRG9wcGVsLVJlaWhlbiBiZWkgdmVyc2VoZW50bGljaGVtIERvcHBlbC1LbGljawogICAg -ICAgIC8vIHVuZCB6dXIgTG9lc2NoLUFwb2thbHlwc2UgZnVlaHJ0ZSAoc2llaGUgZmFjaGF1ZnNp -Y2h0QXVzVGFiZWxsZUxlc2VuKS4KICAgICAgICB2YXIgYnRuRkFOZXUgPSBkb2N1bWVudC5nZXRF -bGVtZW50QnlJZCgnYnRuLWZhY2hhdWZzaWNodC1uZXUnKTsKICAgICAgICBpZiAoYnRuRkFOZXUp -IGJ0bkZBTmV1LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZmFjaGF1ZnNpY2h0TmV1TW9kYWwp -OwogICAgICAgIHZhciBmYVRib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhY2hhdWZz -aWNodC10Ym9keScpOwogICAgICAgIC8vIExpdmUtVXBkYXRlIGRlciBTdWItU2ljaHQtQnV0dG9u -LUxhYmVscyArIGRpc2FibGVkLVN0YXRlLCB3ZW5uIGRlcgogICAgICAgIC8vIFVzZXIgZGllIEFk -bWluLSBiencuIFN0YXRpc3Rpay1DaGVja2JveCBpbiBkZXIgWmVpbGUgdW1zY2hhbHRldC4KICAg -ICAgICAvLyBTb25zdCB6ZWlndCBkZXIgU3ViLVNpY2h0LUJ1dHRvbiB3ZWl0ZXIgIkFsbGUgQWRt -aW4tVGFicyIgb2J3b2hsCiAgICAgICAgLy8gZGVyIFRhYiBnZXJhZGUgZWJlbiBnZXNwZXJydCB3 -dXJkZSAodW5kIHVtZ2VrZWhydCkuCiAgICAgICAgaWYgKGZhVGJvZHkpIGZhVGJvZHkuYWRkRXZl -bnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoIWUudGFy -Z2V0LmNsYXNzTGlzdCB8fCAhZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdmYWNoYXVmc2lj -aHQtY2hrJykpIHJldHVybjsKICAgICAgICAgICAgdmFyIGZlbGQgPSBlLnRhcmdldC5nZXRBdHRy -aWJ1dGUoJ2RhdGEtZmVsZCcpOwogICAgICAgICAgICBpZiAoZmVsZCAhPT0gJ2FkbWluaXN0cmF0 -aW9uJyAmJiBmZWxkICE9PSAnc3RhdGlzdGlrJykgcmV0dXJuOwogICAgICAgICAgICB2YXIgaWR4 -ID0gcGFyc2VJbnQoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpKTsKICAgICAgICAg -ICAgdmFyIGZyZWlnZWdlYmVuID0gZS50YXJnZXQuY2hlY2tlZDsKICAgICAgICAgICAgdmFyIGFr -dGlvbiA9IGZlbGQgPT09ICdhZG1pbmlzdHJhdGlvbicgPyAnZmFjaGF1ZnNpY2h0LXN1YnNpY2h0 -JyA6ICdmYWNoYXVmc2ljaHQtc3RhdHNpY2h0JzsKICAgICAgICAgICAgdmFyIGJ0biA9IGZhVGJv -ZHkucXVlcnlTZWxlY3RvcignW2RhdGEtYWt0aW9uPSInICsgYWt0aW9uICsgJyJdW2RhdGEtaWR4 -PSInICsgaWR4ICsgJyJdJyk7CiAgICAgICAgICAgIGlmICghYnRuKSByZXR1cm47CiAgICAgICAg -ICAgIHZhciB0eXAgPSBmZWxkID09PSAnYWRtaW5pc3RyYXRpb24nID8gJ2FkbWluJyA6ICdzdGF0 -JzsKICAgICAgICAgICAgdmFyIGZhID0gKFouYWRtaW4uZmFjaGF1ZnNpY2h0IHx8IFtdKVtpZHhd -IHx8IHt9OwogICAgICAgICAgICB2YXIgbWFwID0gdHlwID09PSAnYWRtaW4nID8gZmEuYWRtaW5T -aWNodGJhcmtlaXQgOiBmYS5zdGF0aXN0aWtTaWNodGJhcmtlaXQ7CiAgICAgICAgICAgIGJ0bi50 -ZXh0Q29udGVudCA9IGZhY2hhdWZzaWNodFN1YlNpY2h0TGFiZWwodHlwLCBtYXAsIGZyZWlnZWdl -YmVuKTsKICAgICAgICAgICAgYnRuLmRpc2FibGVkID0gIWZyZWlnZWdlYmVuOwogICAgICAgICAg -ICBidG4udGl0bGUgPSBmcmVpZ2VnZWJlbgogICAgICAgICAgICAgICAgPyAodHlwID09PSAnYWRt -aW4nID8gJ1dlbGNoZSBBZG1pbi1TdWItVGFicyBkYXJmIGRpZXNlIEZhY2hhdWZzaWNodCBzZWhl -bj8nIDogJ1dlbGNoZSBTdGF0aXN0aWstQmVyZWljaGUgZGFyZiBkaWVzZSBGYWNoYXVmc2ljaHQg -c2VoZW4/JykKICAgICAgICAgICAgICAgIDogKCdFcnN0ICInICsgKHR5cCA9PT0gJ2FkbWluJyA/ -ICdBZG1pbicgOiAnU3RhdGlzdGlrJykgKyAnIi1Iw6RrY2hlbiBvYmVuIHNldHplbicpOwogICAg -ICAgIH0pOwogICAgICAgIGlmIChmYVRib2R5KSBmYVRib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2Ns -aWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgZGVsQnRuID0gZS50YXJnZXQuY2xv -c2VzdCgnW2RhdGEtYWt0aW9uPSJmYWNoYXVmc2ljaHQtbG9lc2NoZW4iXScpOwogICAgICAgICAg -ICBpZiAoZGVsQnRuKSB7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoZGVsQnRu -LmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSk7CiAgICAgICAgICAgICAgICAvLyBUZXh0ZmVsZC1a -d2lzY2hlbnN0YW5kIHVlYmVybmVobWVuLCBkYW5uIEVpbnRyYWcgZW50ZmVybmVuCiAgICAgICAg -ICAgICAgICB2YXIgencgPSBmYWNoYXVmc2ljaHRBdXNUYWJlbGxlTGVzZW4oKTsKICAgICAgICAg -ICAgICAgIFouYWRtaW4uZmFjaGF1ZnNpY2h0ID0genc7CiAgICAgICAgICAgICAgICBaLmFkbWlu -LmZhY2hhdWZzaWNodC5zcGxpY2UoaWR4LCAxKTsKICAgICAgICAgICAgICAgIGZhY2hhdWZzaWNo -dFJlbmRlcm4oKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAg -ICAgICB2YXIgZGV0QnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtYWt0aW9uPSJmYWNoYXVm -c2ljaHQtZGV0YWlscyJdJyk7CiAgICAgICAgICAgIGlmIChkZXRCdG4pIHsKICAgICAgICAgICAg -ICAgIGZhY2hhdWZzaWNodERldGFpbE1vZGFsKHBhcnNlSW50KGRldEJ0bi5nZXRBdHRyaWJ1dGUo -J2RhdGEtaWR4JykpKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAg -ICAgICAgICAvLyBHcmFudWxhcmUgU3ViLVNpY2h0LUJ1dHRvbnMgKFNwZWMgRi4yKQogICAgICAg -ICAgICB2YXIgc3ViQWRtaW4gPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249ImZhY2hh -dWZzaWNodC1zdWJzaWNodCJdJyk7CiAgICAgICAgICAgIGlmIChzdWJBZG1pbikgewogICAgICAg -ICAgICAgICAgZmFjaGF1ZnNpY2h0U3ViU2ljaHRNb2RhbChwYXJzZUludChzdWJBZG1pbi5nZXRB -dHRyaWJ1dGUoJ2RhdGEtaWR4JykpLCAnYWRtaW4nKTsKICAgICAgICAgICAgICAgIHJldHVybjsK -ICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc3ViU3RhdCA9IGUudGFyZ2V0LmNsb3Nlc3Qo -J1tkYXRhLWFrdGlvbj0iZmFjaGF1ZnNpY2h0LXN0YXRzaWNodCJdJyk7CiAgICAgICAgICAgIGlm -IChzdWJTdGF0KSB7CiAgICAgICAgICAgICAgICBmYWNoYXVmc2ljaHRTdWJTaWNodE1vZGFsKHBh -cnNlSW50KHN1YlN0YXQuZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpKSwgJ3N0YXQnKTsKICAgICAg -ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBJbXBlcnNvbmF0 -aW9uOiBUZXN0YW5zaWNodCBhbHMgZGllc2UgRmFjaGF1ZnNpY2h0CiAgICAgICAgICAgIHZhciB0 -ZXN0QnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtYWt0aW9uPSJmYWNoYXVmc2ljaHQtdGVz -dGVuIl0nKTsKICAgICAgICAgICAgaWYgKHRlc3RCdG4pIHsKICAgICAgICAgICAgICAgIGltcGVy -c29uYXRlU3RhcnQocGFyc2VJbnQodGVzdEJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4JykpKTsK -ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAg -ICAvLyAtLS0tLSBEaXJla3Rpb25zbGVpdHVuZyArIEZ1ZWhydW5nc3N0ZWxsZSAtLS0tLQogICAg -ICAgIC8vIElkZW50aXNjaGUgSGFuZGxlci1TdHJ1a3R1ciB3aWUgRmFjaGF1ZnNpY2h0LCBkdXJj -aCBFdmVudC1EZWxlLQogICAgICAgIC8vIGdhdGlvbiBtaXQgZGF0YS10eXAtQXR0cmlidXQgendp -c2NoZW4gZGVuIGJlaWRlbiBuZXVlbiBMaXN0ZW4KICAgICAgICAvLyB1bnRlcnNjaGVpZGJhci4K -ICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsK -ICAgICAgICAgICAgdmFyIGVsOwogICAgICAgICAgICBlbCA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tk -YXRhLWFrdGlvbj0icm9sbGUtbG9lc2NoZW4iXScpOwogICAgICAgICAgICBpZiAoZWwpIHsgcm9s -bGVuRWludHJhZ0xvZXNjaGVuKGVsLmdldEF0dHJpYnV0ZSgnZGF0YS10eXAnKSwgcGFyc2VJbnQo -ZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpLCAxMCkpOyByZXR1cm47IH0KICAgICAgICAgICAg -ZWwgPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249InJvbGxlLWRldGFpbHMiXScpOwog -ICAgICAgICAgICBpZiAoZWwpIHsgcm9sbGVuUGxhblJlY2h0ZU1vZGFsKGVsLmdldEF0dHJpYnV0 -ZSgnZGF0YS10eXAnKSwgcGFyc2VJbnQoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpLCAxMCkp -OyByZXR1cm47IH0KICAgICAgICAgICAgZWwgPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rp -b249InJvbGxlLXN1YnNpY2h0Il0nKTsKICAgICAgICAgICAgaWYgKGVsKSB7IHJvbGxlblN1YlNp -Y2h0TW9kYWwoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cCcpLCBwYXJzZUludChlbC5nZXRBdHRy -aWJ1dGUoJ2RhdGEtaWR4JyksIDEwKSwgJ2FkbWluJyk7IHJldHVybjsgfQogICAgICAgICAgICBl -bCA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFrdGlvbj0icm9sbGUtc3RhdHNpY2h0Il0nKTsK -ICAgICAgICAgICAgaWYgKGVsKSB7IHJvbGxlblN1YlNpY2h0TW9kYWwoZWwuZ2V0QXR0cmlidXRl -KCdkYXRhLXR5cCcpLCBwYXJzZUludChlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4JyksIDEwKSwg -J3N0YXQnKTsgcmV0dXJuOyB9CiAgICAgICAgfSk7CiAgICAgICAgLy8gIk5ldWVyIEVpbnRyYWci -LUJ1dHRvbnMKICAgICAgICBbJ2RpcmVrdGlvbnNsZWl0dW5nJywgJ2Z1ZWhydW5nc3N0ZWxsZSdd -LmZvckVhY2goZnVuY3Rpb24odHlwKSB7CiAgICAgICAgICAgIHZhciBidG5OZXUgPSBkb2N1bWVu -dC5nZXRFbGVtZW50QnlJZCgnYnRuLScgKyB0eXAgKyAnLW5ldScpOwogICAgICAgICAgICBpZiAo -YnRuTmV1KSBidG5OZXUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsgcm9s -bGVuTmV1RWludHJhZyh0eXApOyB9KTsKICAgICAgICAgICAgdmFyIGJ0blNhdmUgPSBkb2N1bWVu -dC5nZXRFbGVtZW50QnlJZCgnYnRuLScgKyB0eXAgKyAnLXNwZWljaGVybicpOwogICAgICAgICAg -ICBpZiAoYnRuU2F2ZSkgYnRuU2F2ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9u -KCkgeyByb2xsZW5TcGVpY2hlcm4odHlwKTsgfSk7CiAgICAgICAgICAgIC8vIERpcnR5LU1hcmtp -ZXJ1bmcgYmVpIGplZGVyIEVpbmdhYmUgaW4gZGVyIGpld2VpbGlnZW4gVGFiZWxsZS4KICAgICAg -ICAgICAgdmFyIHRib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodHlwICsgJy10Ym9keScp -OwogICAgICAgICAgICBpZiAodGJvZHkpIHsKICAgICAgICAgICAgICAgIHRib2R5LmFkZEV2ZW50 -TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgeyByb2xsZW5EaXJ0eVNldHplbih0eXAsIHRy -dWUpOyB9KTsKICAgICAgICAgICAgICAgIHRib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0Jywg -ZnVuY3Rpb24oKSB7IHJvbGxlbkRpcnR5U2V0emVuKHR5cCwgdHJ1ZSk7IH0pOwogICAgICAgICAg -ICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIEdsb2JhbGVyIFRlc3Rlbi1CdXR0b246IGFscyBy -ZWd1bGFlcmVyIEVuZGFud2VuZGVyIGFuc2VoZW4KICAgICAgICB2YXIgYnRuVGVzdFJlZ3VsYWVy -ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi10ZXN0LXJlZ3VsYWVyJyk7CiAgICAgICAg -aWYgKGJ0blRlc3RSZWd1bGFlcikgYnRuVGVzdFJlZ3VsYWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns -aWNrJywgaW1wZXJzb25hdGVSZWd1bGFlcik7CiAgICAgICAgdmFyIGJ0bkZBU2F2ZSA9IGRvY3Vt -ZW50LmdldEVsZW1lbnRCeUlkKCdidG4tZmFjaGF1ZnNpY2h0LXNwZWljaGVybicpOwogICAgICAg -IGlmIChidG5GQVNhdmUpIGJ0bkZBU2F2ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0 -aW9uKCkgewogICAgICAgICAgICAvLyBCZWltIFNhdmU6IGxlZXJlIFJlaWhlbiAoa29tcGxldHQg -b2huZSBOYW1lIFVORCBvaG5lIE5XLUtlbm51bmcpCiAgICAgICAgICAgIC8vIHdlcmRlbiBnZWZp -bHRlcnQuIEFuZGVyZSBBdWZydWZlIChMb2VzY2hlbiwgTW9kYWwtU3BydW5nKSBsYXNzZW4KICAg -ICAgICAgICAgLy8gZGllIExpc3RlIHVudmVyYWVuZGVydCAoc2llaGUgZmFjaGF1ZnNpY2h0QXVz -VGFiZWxsZUxlc2VuKS4KICAgICAgICAgICAgdmFyIGRhdGVuID0gZmFjaGF1ZnNpY2h0QXVzVGFi -ZWxsZUxlc2VuKHRydWUpOwogICAgICAgICAgICBhcGlQdXQoJy9hcGkvYWRtaW4vZmFjaGF1ZnNp -Y2h0JywgZGF0ZW4pLnRoZW4oZnVuY3Rpb24ocikgewogICAgICAgICAgICAgICAgWi5hZG1pbi5m -YWNoYXVmc2ljaHQgPSBkYXRlbjsKICAgICAgICAgICAgICAgIGZhY2hhdWZzaWNodFJlbmRlcm4o -KTsKICAgICAgICAgICAgICAgIGZhY2hhdWZzaWNodERpcnR5U2V0emVuKGZhbHNlKTsKICAgICAg -ICAgICAgICAgIHRvYXN0KCdGYWNoYXVmc2ljaHQgZ2VzcGVpY2hlcnQgKCcgKyBkYXRlbi5sZW5n -dGggKyAnIEVpbnRyw6RnZSknLCAnZXJmb2xnJyk7CiAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIt -UmVzcG9uc2U6IF9icmF1Y2h0X21haWx0byBudXIgYmVpIEdlc2FtdHZlcmFudHdvcnRsaWNoLQog -ICAgICAgICAgICAgICAgLy8gV2VjaHNlbDsgRkEtU2VoZW4tRmxhZy1EaWZmcyBzaW5kIEluLUFw -cC1IaW53ZWlzZS4KICAgICAgICAgICAgICAgIGlmIChyICYmIHIuX2JyYXVjaHRfbWFpbHRvKSB2 -ZXJhbnR3b3J0dW5nc01haWx0b0ZldWVybihyLl9icmF1Y2h0X21haWx0byk7CiAgICAgICAgICAg -IH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsgdG9hc3QoJ0ZlaGxlcjogJyArIGUubWVzc2FnZSwgJ2Zl -aGxlcicpOyB9KTsKICAgICAgICB9KTsKICAgICAgICAvLyBEaXJ0eS1NYXJrZXI6IGplZGUgVGFi -ZWxsZW4tRWluZ2FiZSBzZXR6dCBkYXMgRmxhZy4gRGVsZWdhdGlvbiBhbQogICAgICAgIC8vIHRi -b2R5IHJlaWNodCDigJQgZ2lsdCBhdWNoIGZ1ZXIgc3BhZXRlciBkeW5hbWlzY2ggZ2VyZW5kZXJ0 -ZSBSb3dzLgogICAgICAgIHZhciBmYVRib2R5RGlydHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ -ZCgnZmFjaGF1ZnNpY2h0LXRib2R5Jyk7CiAgICAgICAgaWYgKGZhVGJvZHlEaXJ0eSkgewogICAg -ICAgICAgICBmYVRib2R5RGlydHkuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbihl -KSB7CiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0ICYmIChlLnRhcmdldC5j -bGFzc0xpc3QuY29udGFpbnMoJ2ZhY2hhdWZzaWNodC1pbnB1dCcpIHx8IGUudGFyZ2V0LmNsYXNz -TGlzdC5jb250YWlucygnZmFjaGF1ZnNpY2h0LWNoaycpIHx8IGUudGFyZ2V0LmNsYXNzTGlzdC5j -b250YWlucygnZmFjaGF1ZnNpY2h0LWdlc2FtdC1jaGsnKSkpIHsKICAgICAgICAgICAgICAgICAg -ICBmYWNoYXVmc2ljaHREaXJ0eVNldHplbih0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAg -ICAgICAgfSk7CiAgICAgICAgICAgIGZhVGJvZHlEaXJ0eS5hZGRFdmVudExpc3RlbmVyKCdjaGFu -Z2UnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0 -ICYmIChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZhY2hhdWZzaWNodC1jaGsnKSB8fCBl -LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZhY2hhdWZzaWNodC1nZXNhbXQtY2hrJykpKSB7 -CiAgICAgICAgICAgICAgICAgICAgZmFjaGF1ZnNpY2h0RGlydHlTZXR6ZW4odHJ1ZSk7CiAgICAg -ICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlv -biByZXN0TGlzdGVuZXJFaW5yaWNodGVuKCkgewogICAgICAgIC8vIFdvY2hlbnBsYW4KICAgICAg -ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3Atdm9yd29jaGUnKS5hZGRFdmVudExpc3RlbmVy -KCdjbGljaycsIHdwVm9yd29jaGUpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3 -cC1uYWVjaHN0ZS13b2NoZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgd3BOYWVjaHN0ZVdv -Y2hlKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3AtYWt0dWVsbGUtd29jaGUn -KS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHdwQWt0dWVsbGVXb2NoZSk7CiAgICAgICAgdmFy -IGJ0bldwRHJ1Y2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3AtZHJ1Y2tlbicpOwogICAg -ICAgIGlmIChidG5XcERydWNrKSBidG5XcERydWNrLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywg -ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZHJ1 -Y2tlbi13b2NoZW5wbGFuJyk7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAg -ICAgICAgICAgICAgICB3aW5kb3cucHJpbnQoKTsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQo -ZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnZHJ1Y2tlbi13b2No -ZW5wbGFuJyk7IH0sIDUwMCk7CiAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICB9KTsKCiAgICAg -ICAgLy8gU3RhdGlzdGlrICsgTG9nYnVjaDogTGlzdGVuZXIgdmlhIEV2ZW50LURlbGVnYXRpb24s -IHdlaWwgZGllCiAgICAgICAgLy8gTWFya3VwLUJsb2Vja2UgZnVlciBVbmJlcmVjaHRpZ3RlIHp3 -YXIgaW0gRE9NIHN0ZWhlbiwgZGllCiAgICAgICAgLy8gS2xpY2stWmllbGUgYWJlciBudXIgZnVl -ciBCZXJlY2h0aWd0ZSBzaWNodGJhciB3ZXJkZW4uCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRM -aXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmIChlLnRhcmdldCAm -JiBlLnRhcmdldC5pZCA9PT0gJ2J0bi1zdGF0cy1sYWRlbicpIHsKICAgICAgICAgICAgICAgIHN0 -YXRpc3Rpa0xhZGVuKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAg -ICAgICAgICAgdmFyIGluZm8gPSBlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3Qo -Jy5zdGF0cy1pbmZvLWJ0bicpOwogICAgICAgICAgICBpZiAoaW5mbykgc3RhdEluZm9aZWlnZW4o -aW5mby5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdHMtaW5mbycpKTsKICAgICAgICB9KTsKICAgICAg -ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKSB7CiAgICAg -ICAgICAgIGlmIChlLnRhcmdldCAmJiBlLnRhcmdldC5pZCA9PT0gJ3N0YXRzLWdydXBwZW4tZmls -dGVyJykgewogICAgICAgICAgICAgICAgc3RhdEZpbHRlclNldHplbihlLnRhcmdldC52YWx1ZSk7 -CiAgICAgICAgICAgICAgICBpZiAoWi5zdGF0aXN0aWspIHN0YXRpc3Rpa1JlbmRlcm4oKTsKICAg -ICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo -J2lucHV0JywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoZS50YXJnZXQgJiYgZS50YXJn -ZXQuaWQgPT09ICdsb2ctc3VjaGUnKSBsb2didWNoRmlsdGVybigpOwogICAgICAgIH0pOwogICAg -fQoKICAgIC8vID09PT09IEluaXQgPT09PT0KCiAgICBmdW5jdGlvbiBpbml0KCkgewogICAgICAg -IHRoZW1lV2llZGVyaGVyc3RlbGxlbigpOwogICAgICAgIGhlYXJ0YmVhdFN0YXJ0ZW4oKTsKICAg -ICAgICBlbnR3dXJmQXV0b0NsZWFudXAoKTsgICAgLy8gU3BlYyBGLjQ6IGFsdGUgTW9kYWwtRW50 -d3VlcmZlICg+MTQgVGFnZSkgbG9lc2NoZW4KCiAgICAgICAgZGF0ZW5MYWRlbigpLnRoZW4oZnVu -Y3Rpb24oKSB7CiAgICAgICAgICAgIGdyaWRSZW5kZXJuKCk7CiAgICAgICAgICAgIHNjcm9sbFN5 -bmMoKTsKICAgICAgICAgICAgZXZlbnRMaXN0ZW5lckVpbnJpY2h0ZW4oKTsKICAgICAgICAgICAg -enVtSGV1dGlnZW5EYXR1bSgpOwogICAgICAgICAgICAvLyBadWxldHp0IGFrdGl2ZSBBbnNpY2h0 -IHdpZWRlcmhlcnN0ZWxsZW4sIGRhbWl0IGVpbiBCcm93c2VyLVJlZnJlc2gKICAgICAgICAgICAg -Ly8gKEY1KSBkZW4gVXNlciBuaWNodCBhdXMgU3RhdGlzdGlrL0xvZ2J1Y2gvQWRtaW4gaW4gZGll -IFBsYW51bmdzLQogICAgICAgICAgICAvLyBhbnNpY2h0IHp1cnVlY2t3aXJmdC4gTGllZ3QgaW0g -c2Vzc2lvblN0b3JhZ2Ug4oCUIGJlaW0gU3RhcnQgdWViZXIKICAgICAgICAgICAgLy8gZGdsLmJh -dCAoPSBuZXVlciBUYWIsIGxlZXJlcyBzZXNzaW9uU3RvcmFnZSkgYmxlaWJ0IGVzIGJlaQogICAg -ICAgICAgICAvLyAncGxhbnVuZyc7IG51ciBJbi1UYWItUmVmcmVzaCBoYWVsdCBkaWUgbGV0enRl -IEFuc2ljaHQuCiAgICAgICAgICAgIC8vIGFuc2ljaHRXZWNoc2VsbigpIHBydWVmdCBkaWUgUmVj -aHRlIHNlbGJzdCB1bmQgZmFlbGx0IG5vdGZhbGxzCiAgICAgICAgICAgIC8vIGF1ZiAncGxhbnVu -ZycgenVydWVjay4KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHZhciBsZXR6dGVB -bnNpY2h0ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndmkzLmFrdGl2ZUFuc2ljaHQnKTsKICAg -ICAgICAgICAgICAgIGlmIChsZXR6dGVBbnNpY2h0ICYmIGxldHp0ZUFuc2ljaHQgIT09ICdwbGFu -dW5nJykgewogICAgICAgICAgICAgICAgICAgIGFuc2ljaHRXZWNoc2VsbihsZXR6dGVBbnNpY2h0 -KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUg -Ki8gfQogICAgICAgICAgICAvLyBGYWxscyBub2NoIGFsdGUgbG9jYWxTdG9yYWdlLUVpbnRyYWVn -ZSBydW1saWVnZW4gKE1pZ3JhdGlvbik6CiAgICAgICAgICAgIC8vIGVpbm1hbGlnIGF1ZnJhZXVt -ZW4sIGRhbWl0IG5pY2h0IHZlcnNlaGVudGxpY2ggZGVyIFdlcnQKICAgICAgICAgICAgLy8gd2ll -ZGVyIHJlaW5rb21tdCwgZmFsbHMgaWNoIGF1cyBWZXJzZWhlbiBkYXJhdWYgZ3JlaWZlLgogICAg -ICAgICAgICB0cnkgeyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndmkzLmFrdGl2ZUFuc2ljaHQn -KTsgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfQogICAgICAgICAgICAvLyBUb3BiYXItQXZh -dGFyIGZ1ZXIgZGllIGVpZ2VuZSBQZXJzb24gc2V0emVuIChzaWNodGJhciBudXIsCiAgICAgICAg -ICAgIC8vIHdlbm4gZWluZSBQZXJzb25JZCB6dWdlb3JkbmV0IGlzdCDigJQgc29uc3QgYmxlaWJ0 -IGRlciBTbG90IGxlZXIpLgogICAgICAgICAgICBtZWluQXZhdGFyVG9wYmFyQWt0dWFsaXNpZXJl -bigpOwogICAgICAgICAgICAvLyBMaXZlLVN5bmMgc3RhcnRlbjogcG9sbHQgL2FwaS9wbGFudW5n -L2NoYW5nZXMgKyAvYXBpL2xvY2svemVsbGVuCiAgICAgICAgICAgIC8vIGFsbGUgM3MsIGJsZW5k -ZXQgZnJlbWRlIExvY2stSW5kaWthdG9yZW4gZWluIHVuZCBsYWVzc3QgcmVtb3RlCiAgICAgICAg -ICAgIC8vIGdlYWVuZGVydGUgWmVsbGVuIGt1cnogYXVmbGV1Y2h0ZW4uCiAgICAgICAgICAgIHN5 -bmNXb3JrZXJTdGFydGVuKCk7CiAgICAgICAgICAgIGZ1ZWxsSW5pdCgpOyAgIC8vIEV4Y2VsLWFl -aG5saWNoZXIgRnVlbGwtR3JpZmY6IGdsb2JhbGUgTGlzdGVuZXIKICAgICAgICAgICAgLy8gSGlu -d2Vpcy1TeXN0ZW06IGVpbm1hbCBpbml0aWFsIGxhZGVuLCBkYW5uIHBvbGxlZCBkZXIgU3luYy1X -b3JrZXIuCiAgICAgICAgICAgIC8vIFNpY2h0YmFyIG51ciBmdWVyIFNVICsgR2VzYW10dmVyYW50 -d29ydGxpY2hlIChoaW53ZWlzZS5qcyBwcnVlZnQgc2VsYnN0KS4KICAgICAgICAgICAgaGlud2Vp -c2VMYWRlbigpLnRoZW4oaGlud2Vpc2VBbnplaWdlQWt0dWFsaXNpZXJlbik7CiAgICAgICAgICAg -IHRvYXN0KCdWSTMgREdMLVBsYW51bmcgZ2VsYWRlbiDigJQgJyArIFoucGVyc29uZW4ubGVuZ3Ro -ICsgJyBQZXJzb25lbicsICdpbmZvJyk7CiAgICAgICAgICAgIC8vIFVudGVyYmVzZXR6dW5ncy1X -YXJudW5nIGZ1ZXIgV2FjaGxlaXR1bmcvU1UgKGxlaWNodCB2ZXJ6b2VnZXJ0LAogICAgICAgICAg -ICAvLyBkYW1pdCBkZXIgQmVncnVlc3N1bmdzLVRvYXN0IHZvcmhlciBzaWNodGJhciBpc3QpCiAg -ICAgICAgICAgIHNldFRpbWVvdXQodW50ZXJiZXNldHp1bmdXYXJudW5nWmVpZ2VuLCAxNTAwKTsK -ICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgdG9hc3QoJ0ZlaGxl -ciBiZWltIExhZGVuOiAnICsgZXJyLm1lc3NhZ2UsICdmZWhsZXInKTsKICAgICAgICAgICAgY29u -c29sZS5lcnJvcignTGFkZWZlaGxlcjonLCBlcnIpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBC -ZWltIFNjaGxpZXNzZW46IGVpZ2VuZXMgRWRpdC1Mb2NrIG5vY2ggZnJlaWdlYmVuLCBkYW1pdCBr -ZWluCiAgICAgICAgLy8gdmVyd2Fpc3RlciBMb2NrIGltIEZpbGVzeXN0ZW0genVydWVja2JsZWli -dC4KICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgYWxsZUVp -Z2VuZW5Mb2Nrc0ZyZWlnZWJlbkJlYWNvbik7CiAgICB9CgogICAgaWYgKGRvY3VtZW50LnJlYWR5 -U3RhdGUgPT09ICdsb2FkaW5nJykgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVu -dExvYWRlZCcsIGluaXQpOwogICAgZWxzZSBpbml0KCk7Cgp9KSgpOwo= +IGVyZy5jbGFzc05hbWUgPSAnZ2VuLWluZm8nOwogICAgICAgICAgICAgICAgICAgIGVyZy50ZXh0 +Q29udGVudCA9ICdQcm90b2tvbGwgd2lyZCBnZWzDtnNjaHQuLi4nOwogICAgICAgICAgICAgICAg +ICAgIGVyZy5jbGFzc0xpc3QucmVtb3ZlKCd2ZXJzdGVja3QnKTsKICAgICAgICAgICAgICAgICAg +ICBhcGlQb3N0KCcvYXBpL2FkbWluL3Byb3Rva29sbC1sb2VzY2hlbicsIHt9KS50aGVuKGZ1bmN0 +aW9uKHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXJnLmNsYXNzTmFtZSA9ICdnZW4tZXJm +b2xnJzsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gKHIuYXBpTG9nQnl0ZXMg +Pj0gMCkgPyAoci5hcGlMb2dCeXRlcyArICcgQnl0ZXMnKSA6ICdEYXRlaSB3YXIgZ2VzcGVycnQn +OwogICAgICAgICAgICAgICAgICAgICAgICBlcmcudGV4dENvbnRlbnQgPSAnUHJvdG9rb2xsIGdl +bMO2c2NodC4gTG9nYnVjaC1FaW50csOkZ2Ugdm9yaGVyOiAnICsgci5sb2didWNoRWludHJhZWdl +Vm9yaGVyICsgJy4gQVBJLUxvZzogJyArIGJ5dGVzICsgJy4nOwogICAgICAgICAgICAgICAgICAg +IH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXJnLmNsYXNz +TmFtZSA9ICdnZW4tZmVobGVyJzsKICAgICAgICAgICAgICAgICAgICAgICAgZXJnLnRleHRDb250 +ZW50ID0gJ0ZlaGxlcjogJyArIGUubWVzc2FnZTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAg +ICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7IHRpdGVsOiAnUHJvdG9rb2xsIGzDtnNj +aGVuJywgamFUZXh0OiAnTMO2c2NoZW4nLCBqYURhbmdlcjogdHJ1ZSB9CiAgICAgICAgICAgICk7 +CiAgICAgICAgfSk7CgogICAgICAgIC8vIE1pdHRlaWx1bmdlbiAoU3ByaW50IEQtM2MsIDIwMjYt +MDUtMjkpOiAiKyBOZXVlIE1pdHRlaWx1bmciLUJ1dHRvbgogICAgICAgIHZhciBidG5NaXROZXUg +PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLW1pdHRlaWx1bmctbmV1Jyk7CiAgICAgICAg +aWYgKGJ0bk1pdE5ldSkgYnRuTWl0TmV1LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbWl0dGVp +bHVuZ05ldU9lZmZuZW4pOwoKICAgICAgICAvLyBTdXBlclVzZXIKICAgICAgICBkb2N1bWVudC5n +ZXRFbGVtZW50QnlJZCgnYnRuLXN1cGVydXNlci1uZXUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGlj +aycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBaLmFkbWluLnN1cGVyVXNlciA9IFouYWRtaW4u +c3VwZXJVc2VyIHx8IFtdOwogICAgICAgICAgICBaLmFkbWluLnN1cGVyVXNlci5wdXNoKHsgbmFt +ZTogJycsIG53S2VubnVuZzogJycgfSk7CiAgICAgICAgICAgIHN1cGVyVXNlclJlbmRlcm4oKTsK +ICAgICAgICB9KTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VwZXJ1c2VyLXRi +b2R5JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAg +IHZhciBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249InN1cGVydXNlci1sb2Vz +Y2hlbiJdJyk7CiAgICAgICAgICAgIGlmIChidG4pIHsKICAgICAgICAgICAgICAgIHZhciBpZHgg +PSBwYXJzZUludChidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpKTsKICAgICAgICAgICAgICAg +IFouYWRtaW4uc3VwZXJVc2VyLnNwbGljZShpZHgsIDEpOwogICAgICAgICAgICAgICAgc3VwZXJV +c2VyUmVuZGVybigpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQu +Z2V0RWxlbWVudEJ5SWQoJ2J0bi1zdXBlcnVzZXItc3BlaWNoZXJuJykuYWRkRXZlbnRMaXN0ZW5l +cignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGRhdGVuID0gc3VwZXJVc2Vy +QXVzVGFiZWxsZUxlc2VuKCk7CiAgICAgICAgICAgIGlmIChkYXRlbi5sZW5ndGggPT09IDApIHsK +ICAgICAgICAgICAgICAgIHRvYXN0KCdNaW5kZXN0ZW5zIGVpbiBTdXBlclVzZXIgbXVzcyBleGlz +dGllcmVuJywgJ3dhcm51bmcnKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg +fQogICAgICAgICAgICBhcGlQdXQoJy9hcGkvYWRtaW4vc3VwZXJ1c2VyJywgZGF0ZW4pLnRoZW4o +ZnVuY3Rpb24ocikgewogICAgICAgICAgICAgICAgWi5hZG1pbi5zdXBlclVzZXIgPSBkYXRlbjsK +ICAgICAgICAgICAgICAgIGRpcnR5U2V0emVuKCdzdXBlcnVzZXInLCBmYWxzZSk7CiAgICAgICAg +ICAgICAgICB0b2FzdCgnU3VwZXJVc2VyIGdlc3BlaWNoZXJ0JywgJ2VyZm9sZycpOwogICAgICAg +ICAgICAgICAgLy8gU2VydmVyIGxpZWZlcnQgYmVpIFNVLVJlaW4vUmF1cyBfYnJhdWNodF9tYWls +dG8gaW0gUmVzcG9uc2UuCiAgICAgICAgICAgICAgICAvLyBWZXJhbnR3b3J0dW5ncy1VZWJlcmdh +bmdzLU1haWx0byB3aXJkIGhpZXIgZ2VvZWZmbmV0IChQaGFzZSA1KS4KICAgICAgICAgICAgICAg +IGlmIChyICYmIHIuX2JyYXVjaHRfbWFpbHRvKSB2ZXJhbnR3b3J0dW5nc01haWx0b0ZldWVybihy +Ll9icmF1Y2h0X21haWx0byk7CiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsgdG9h +c3QoJ0ZlaGxlcjogJyArIGUubWVzc2FnZSwgJ2ZlaGxlcicpOyB9KTsKICAgICAgICB9KTsKCiAg +ICAgICAgLy8gRmFjaGF1ZnNpY2h0IOKAlCAiTmV1Ii1CdXR0b24gb2VmZm5ldCBNb2RhbCBtaXQg +RHJvcGRvd24tQXVzd2FobAogICAgICAgIC8vIChXYWNobGVpdHVuZ2VuKSBvZGVyIG1hbnVlbGxl +ciBBbmxhZ2UgKFBlcnNvbiBlcnNjaGVpbnQgTklDSFQgaW4KICAgICAgICAvLyBkZXIgUGxhbnVu +ZykuIFZvcmhlcjogbGVlcmUgUmVpaGVuIHd1cmRlbiBkaXJla3QgaW4gZGllIFRhYmVsbGUKICAg +ICAgICAvLyBnZXB1c2h0IOKAlCB3YXMgenUgRG9wcGVsLVJlaWhlbiBiZWkgdmVyc2VoZW50bGlj +aGVtIERvcHBlbC1LbGljawogICAgICAgIC8vIHVuZCB6dXIgTG9lc2NoLUFwb2thbHlwc2UgZnVl +aHJ0ZSAoc2llaGUgZmFjaGF1ZnNpY2h0QXVzVGFiZWxsZUxlc2VuKS4KICAgICAgICB2YXIgYnRu +RkFOZXUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWZhY2hhdWZzaWNodC1uZXUnKTsK +ICAgICAgICBpZiAoYnRuRkFOZXUpIGJ0bkZBTmV1LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywg +ZmFjaGF1ZnNpY2h0TmV1TW9kYWwpOwogICAgICAgIHZhciBmYVRib2R5ID0gZG9jdW1lbnQuZ2V0 +RWxlbWVudEJ5SWQoJ2ZhY2hhdWZzaWNodC10Ym9keScpOwogICAgICAgIC8vIExpdmUtVXBkYXRl +IGRlciBTdWItU2ljaHQtQnV0dG9uLUxhYmVscyArIGRpc2FibGVkLVN0YXRlLCB3ZW5uIGRlcgog +ICAgICAgIC8vIFVzZXIgZGllIEFkbWluLSBiencuIFN0YXRpc3Rpay1DaGVja2JveCBpbiBkZXIg +WmVpbGUgdW1zY2hhbHRldC4KICAgICAgICAvLyBTb25zdCB6ZWlndCBkZXIgU3ViLVNpY2h0LUJ1 +dHRvbiB3ZWl0ZXIgIkFsbGUgQWRtaW4tVGFicyIgb2J3b2hsCiAgICAgICAgLy8gZGVyIFRhYiBn +ZXJhZGUgZWJlbiBnZXNwZXJydCB3dXJkZSAodW5kIHVtZ2VrZWhydCkuCiAgICAgICAgaWYgKGZh +VGJvZHkpIGZhVGJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSkgewog +ICAgICAgICAgICBpZiAoIWUudGFyZ2V0LmNsYXNzTGlzdCB8fCAhZS50YXJnZXQuY2xhc3NMaXN0 +LmNvbnRhaW5zKCdmYWNoYXVmc2ljaHQtY2hrJykpIHJldHVybjsKICAgICAgICAgICAgdmFyIGZl +bGQgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmVsZCcpOwogICAgICAgICAgICBpZiAo +ZmVsZCAhPT0gJ2FkbWluaXN0cmF0aW9uJyAmJiBmZWxkICE9PSAnc3RhdGlzdGlrJykgcmV0dXJu +OwogICAgICAgICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdk +YXRhLWlkeCcpKTsKICAgICAgICAgICAgdmFyIGZyZWlnZWdlYmVuID0gZS50YXJnZXQuY2hlY2tl +ZDsKICAgICAgICAgICAgdmFyIGFrdGlvbiA9IGZlbGQgPT09ICdhZG1pbmlzdHJhdGlvbicgPyAn +ZmFjaGF1ZnNpY2h0LXN1YnNpY2h0JyA6ICdmYWNoYXVmc2ljaHQtc3RhdHNpY2h0JzsKICAgICAg +ICAgICAgdmFyIGJ0biA9IGZhVGJvZHkucXVlcnlTZWxlY3RvcignW2RhdGEtYWt0aW9uPSInICsg +YWt0aW9uICsgJyJdW2RhdGEtaWR4PSInICsgaWR4ICsgJyJdJyk7CiAgICAgICAgICAgIGlmICgh +YnRuKSByZXR1cm47CiAgICAgICAgICAgIHZhciB0eXAgPSBmZWxkID09PSAnYWRtaW5pc3RyYXRp +b24nID8gJ2FkbWluJyA6ICdzdGF0JzsKICAgICAgICAgICAgdmFyIGZhID0gKFouYWRtaW4uZmFj +aGF1ZnNpY2h0IHx8IFtdKVtpZHhdIHx8IHt9OwogICAgICAgICAgICB2YXIgbWFwID0gdHlwID09 +PSAnYWRtaW4nID8gZmEuYWRtaW5TaWNodGJhcmtlaXQgOiBmYS5zdGF0aXN0aWtTaWNodGJhcmtl +aXQ7CiAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9IGZhY2hhdWZzaWNodFN1YlNpY2h0TGFi +ZWwodHlwLCBtYXAsIGZyZWlnZWdlYmVuKTsKICAgICAgICAgICAgYnRuLmRpc2FibGVkID0gIWZy +ZWlnZWdlYmVuOwogICAgICAgICAgICBidG4udGl0bGUgPSBmcmVpZ2VnZWJlbgogICAgICAgICAg +ICAgICAgPyAodHlwID09PSAnYWRtaW4nID8gJ1dlbGNoZSBBZG1pbi1TdWItVGFicyBkYXJmIGRp +ZXNlIEZhY2hhdWZzaWNodCBzZWhlbj8nIDogJ1dlbGNoZSBTdGF0aXN0aWstQmVyZWljaGUgZGFy +ZiBkaWVzZSBGYWNoYXVmc2ljaHQgc2VoZW4/JykKICAgICAgICAgICAgICAgIDogKCdFcnN0ICIn +ICsgKHR5cCA9PT0gJ2FkbWluJyA/ICdBZG1pbicgOiAnU3RhdGlzdGlrJykgKyAnIi1Iw6RrY2hl +biBvYmVuIHNldHplbicpOwogICAgICAgIH0pOwogICAgICAgIGlmIChmYVRib2R5KSBmYVRib2R5 +LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIg +ZGVsQnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtYWt0aW9uPSJmYWNoYXVmc2ljaHQtbG9l +c2NoZW4iXScpOwogICAgICAgICAgICBpZiAoZGVsQnRuKSB7CiAgICAgICAgICAgICAgICB2YXIg +aWR4ID0gcGFyc2VJbnQoZGVsQnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1pZHgnKSk7CiAgICAgICAg +ICAgICAgICAvLyBUZXh0ZmVsZC1ad2lzY2hlbnN0YW5kIHVlYmVybmVobWVuLCBkYW5uIEVpbnRy +YWcgZW50ZmVybmVuCiAgICAgICAgICAgICAgICB2YXIgencgPSBmYWNoYXVmc2ljaHRBdXNUYWJl +bGxlTGVzZW4oKTsKICAgICAgICAgICAgICAgIFouYWRtaW4uZmFjaGF1ZnNpY2h0ID0genc7CiAg +ICAgICAgICAgICAgICBaLmFkbWluLmZhY2hhdWZzaWNodC5zcGxpY2UoaWR4LCAxKTsKICAgICAg +ICAgICAgICAgIGZhY2hhdWZzaWNodFJlbmRlcm4oKTsKICAgICAgICAgICAgICAgIHJldHVybjsK +ICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZGV0QnRuID0gZS50YXJnZXQuY2xvc2VzdCgn +W2RhdGEtYWt0aW9uPSJmYWNoYXVmc2ljaHQtZGV0YWlscyJdJyk7CiAgICAgICAgICAgIGlmIChk +ZXRCdG4pIHsKICAgICAgICAgICAgICAgIGZhY2hhdWZzaWNodERldGFpbE1vZGFsKHBhcnNlSW50 +KGRldEJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4JykpKTsKICAgICAgICAgICAgICAgIHJldHVy +bjsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBHcmFudWxhcmUgU3ViLVNpY2h0LUJ1dHRv +bnMgKFNwZWMgRi4yKQogICAgICAgICAgICB2YXIgc3ViQWRtaW4gPSBlLnRhcmdldC5jbG9zZXN0 +KCdbZGF0YS1ha3Rpb249ImZhY2hhdWZzaWNodC1zdWJzaWNodCJdJyk7CiAgICAgICAgICAgIGlm +IChzdWJBZG1pbikgewogICAgICAgICAgICAgICAgZmFjaGF1ZnNpY2h0U3ViU2ljaHRNb2RhbChw +YXJzZUludChzdWJBZG1pbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4JykpLCAnYWRtaW4nKTsKICAg +ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc3ViU3Rh +dCA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFrdGlvbj0iZmFjaGF1ZnNpY2h0LXN0YXRzaWNo +dCJdJyk7CiAgICAgICAgICAgIGlmIChzdWJTdGF0KSB7CiAgICAgICAgICAgICAgICBmYWNoYXVm +c2ljaHRTdWJTaWNodE1vZGFsKHBhcnNlSW50KHN1YlN0YXQuZ2V0QXR0cmlidXRlKCdkYXRhLWlk +eCcpKSwgJ3N0YXQnKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAg +ICAgICAgICAvLyBJbXBlcnNvbmF0aW9uOiBUZXN0YW5zaWNodCBhbHMgZGllc2UgRmFjaGF1ZnNp +Y2h0CiAgICAgICAgICAgIHZhciB0ZXN0QnRuID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtYWt0 +aW9uPSJmYWNoYXVmc2ljaHQtdGVzdGVuIl0nKTsKICAgICAgICAgICAgaWYgKHRlc3RCdG4pIHsK +ICAgICAgICAgICAgICAgIGltcGVyc29uYXRlU3RhcnQocGFyc2VJbnQodGVzdEJ0bi5nZXRBdHRy +aWJ1dGUoJ2RhdGEtaWR4JykpKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg +fQogICAgICAgIH0pOwoKICAgICAgICAvLyAtLS0tLSBEaXJla3Rpb25zbGVpdHVuZyArIEZ1ZWhy +dW5nc3N0ZWxsZSAtLS0tLQogICAgICAgIC8vIElkZW50aXNjaGUgSGFuZGxlci1TdHJ1a3R1ciB3 +aWUgRmFjaGF1ZnNpY2h0LCBkdXJjaCBFdmVudC1EZWxlLQogICAgICAgIC8vIGdhdGlvbiBtaXQg +ZGF0YS10eXAtQXR0cmlidXQgendpc2NoZW4gZGVuIGJlaWRlbiBuZXVlbiBMaXN0ZW4KICAgICAg +ICAvLyB1bnRlcnNjaGVpZGJhci4KICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdj +bGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIGVsOwogICAgICAgICAgICBlbCA9 +IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFrdGlvbj0icm9sbGUtbG9lc2NoZW4iXScpOwogICAg +ICAgICAgICBpZiAoZWwpIHsgcm9sbGVuRWludHJhZ0xvZXNjaGVuKGVsLmdldEF0dHJpYnV0ZSgn +ZGF0YS10eXAnKSwgcGFyc2VJbnQoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWlkeCcpLCAxMCkpOyBy +ZXR1cm47IH0KICAgICAgICAgICAgZWwgPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249 +InJvbGxlLWRldGFpbHMiXScpOwogICAgICAgICAgICBpZiAoZWwpIHsgcm9sbGVuUGxhblJlY2h0 +ZU1vZGFsKGVsLmdldEF0dHJpYnV0ZSgnZGF0YS10eXAnKSwgcGFyc2VJbnQoZWwuZ2V0QXR0cmli +dXRlKCdkYXRhLWlkeCcpLCAxMCkpOyByZXR1cm47IH0KICAgICAgICAgICAgZWwgPSBlLnRhcmdl +dC5jbG9zZXN0KCdbZGF0YS1ha3Rpb249InJvbGxlLXN1YnNpY2h0Il0nKTsKICAgICAgICAgICAg +aWYgKGVsKSB7IHJvbGxlblN1YlNpY2h0TW9kYWwoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cCcp +LCBwYXJzZUludChlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWR4JyksIDEwKSwgJ2FkbWluJyk7IHJl +dHVybjsgfQogICAgICAgICAgICBlbCA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFrdGlvbj0i +cm9sbGUtc3RhdHNpY2h0Il0nKTsKICAgICAgICAgICAgaWYgKGVsKSB7IHJvbGxlblN1YlNpY2h0 +TW9kYWwoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cCcpLCBwYXJzZUludChlbC5nZXRBdHRyaWJ1 +dGUoJ2RhdGEtaWR4JyksIDEwKSwgJ3N0YXQnKTsgcmV0dXJuOyB9CiAgICAgICAgfSk7CiAgICAg +ICAgLy8gIk5ldWVyIEVpbnRyYWciLUJ1dHRvbnMKICAgICAgICBbJ2RpcmVrdGlvbnNsZWl0dW5n +JywgJ2Z1ZWhydW5nc3N0ZWxsZSddLmZvckVhY2goZnVuY3Rpb24odHlwKSB7CiAgICAgICAgICAg +IHZhciBidG5OZXUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLScgKyB0eXAgKyAnLW5l +dScpOwogICAgICAgICAgICBpZiAoYnRuTmV1KSBidG5OZXUuYWRkRXZlbnRMaXN0ZW5lcignY2xp +Y2snLCBmdW5jdGlvbigpIHsgcm9sbGVuTmV1RWludHJhZyh0eXApOyB9KTsKICAgICAgICAgICAg +dmFyIGJ0blNhdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLScgKyB0eXAgKyAnLXNw +ZWljaGVybicpOwogICAgICAgICAgICBpZiAoYnRuU2F2ZSkgYnRuU2F2ZS5hZGRFdmVudExpc3Rl +bmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgeyByb2xsZW5TcGVpY2hlcm4odHlwKTsgfSk7CiAgICAg +ICAgICAgIC8vIERpcnR5LU1hcmtpZXJ1bmcgYmVpIGplZGVyIEVpbmdhYmUgaW4gZGVyIGpld2Vp +bGlnZW4gVGFiZWxsZS4KICAgICAgICAgICAgdmFyIHRib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVu +dEJ5SWQodHlwICsgJy10Ym9keScpOwogICAgICAgICAgICBpZiAodGJvZHkpIHsKICAgICAgICAg +ICAgICAgIHRib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgeyByb2xs +ZW5EaXJ0eVNldHplbih0eXAsIHRydWUpOyB9KTsKICAgICAgICAgICAgICAgIHRib2R5LmFkZEV2 +ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKSB7IHJvbGxlbkRpcnR5U2V0emVuKHR5cCwg +dHJ1ZSk7IH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIEdsb2JhbGVy +IFRlc3Rlbi1CdXR0b246IGFscyByZWd1bGFlcmVyIEVuZGFud2VuZGVyIGFuc2VoZW4KICAgICAg +ICB2YXIgYnRuVGVzdFJlZ3VsYWVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi10ZXN0 +LXJlZ3VsYWVyJyk7CiAgICAgICAgaWYgKGJ0blRlc3RSZWd1bGFlcikgYnRuVGVzdFJlZ3VsYWVy +LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaW1wZXJzb25hdGVSZWd1bGFlcik7CiAgICAgICAg +dmFyIGJ0bkZBU2F2ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tZmFjaGF1ZnNpY2h0 +LXNwZWljaGVybicpOwogICAgICAgIGlmIChidG5GQVNhdmUpIGJ0bkZBU2F2ZS5hZGRFdmVudExp +c3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAvLyBCZWltIFNhdmU6IGxl +ZXJlIFJlaWhlbiAoa29tcGxldHQgb2huZSBOYW1lIFVORCBvaG5lIE5XLUtlbm51bmcpCiAgICAg +ICAgICAgIC8vIHdlcmRlbiBnZWZpbHRlcnQuIEFuZGVyZSBBdWZydWZlIChMb2VzY2hlbiwgTW9k +YWwtU3BydW5nKSBsYXNzZW4KICAgICAgICAgICAgLy8gZGllIExpc3RlIHVudmVyYWVuZGVydCAo +c2llaGUgZmFjaGF1ZnNpY2h0QXVzVGFiZWxsZUxlc2VuKS4KICAgICAgICAgICAgdmFyIGRhdGVu +ID0gZmFjaGF1ZnNpY2h0QXVzVGFiZWxsZUxlc2VuKHRydWUpOwogICAgICAgICAgICBhcGlQdXQo +Jy9hcGkvYWRtaW4vZmFjaGF1ZnNpY2h0JywgZGF0ZW4pLnRoZW4oZnVuY3Rpb24ocikgewogICAg +ICAgICAgICAgICAgWi5hZG1pbi5mYWNoYXVmc2ljaHQgPSBkYXRlbjsKICAgICAgICAgICAgICAg +IGZhY2hhdWZzaWNodFJlbmRlcm4oKTsKICAgICAgICAgICAgICAgIGZhY2hhdWZzaWNodERpcnR5 +U2V0emVuKGZhbHNlKTsKICAgICAgICAgICAgICAgIHRvYXN0KCdGYWNoYXVmc2ljaHQgZ2VzcGVp +Y2hlcnQgKCcgKyBkYXRlbi5sZW5ndGggKyAnIEVpbnRyw6RnZSknLCAnZXJmb2xnJyk7CiAgICAg +ICAgICAgICAgICAvLyBTZXJ2ZXItUmVzcG9uc2U6IF9icmF1Y2h0X21haWx0byBudXIgYmVpIEdl +c2FtdHZlcmFudHdvcnRsaWNoLQogICAgICAgICAgICAgICAgLy8gV2VjaHNlbDsgRkEtU2VoZW4t +RmxhZy1EaWZmcyBzaW5kIEluLUFwcC1IaW53ZWlzZS4KICAgICAgICAgICAgICAgIGlmIChyICYm +IHIuX2JyYXVjaHRfbWFpbHRvKSB2ZXJhbnR3b3J0dW5nc01haWx0b0ZldWVybihyLl9icmF1Y2h0 +X21haWx0byk7CiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsgdG9hc3QoJ0ZlaGxl +cjogJyArIGUubWVzc2FnZSwgJ2ZlaGxlcicpOyB9KTsKICAgICAgICB9KTsKICAgICAgICAvLyBE +aXJ0eS1NYXJrZXI6IGplZGUgVGFiZWxsZW4tRWluZ2FiZSBzZXR6dCBkYXMgRmxhZy4gRGVsZWdh +dGlvbiBhbQogICAgICAgIC8vIHRib2R5IHJlaWNodCDigJQgZ2lsdCBhdWNoIGZ1ZXIgc3BhZXRl +ciBkeW5hbWlzY2ggZ2VyZW5kZXJ0ZSBSb3dzLgogICAgICAgIHZhciBmYVRib2R5RGlydHkgPSBk +b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFjaGF1ZnNpY2h0LXRib2R5Jyk7CiAgICAgICAgaWYg +KGZhVGJvZHlEaXJ0eSkgewogICAgICAgICAgICBmYVRib2R5RGlydHkuYWRkRXZlbnRMaXN0ZW5l +cignaW5wdXQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuY2xh +c3NMaXN0ICYmIChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZhY2hhdWZzaWNodC1pbnB1 +dCcpIHx8IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZmFjaGF1ZnNpY2h0LWNoaycpIHx8 +IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZmFjaGF1ZnNpY2h0LWdlc2FtdC1jaGsnKSkp +IHsKICAgICAgICAgICAgICAgICAgICBmYWNoYXVmc2ljaHREaXJ0eVNldHplbih0cnVlKTsKICAg +ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGZhVGJvZHlEaXJ0eS5h +ZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBp +ZiAoZS50YXJnZXQuY2xhc3NMaXN0ICYmIChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Zh +Y2hhdWZzaWNodC1jaGsnKSB8fCBlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZhY2hhdWZz +aWNodC1nZXNhbXQtY2hrJykpKSB7CiAgICAgICAgICAgICAgICAgICAgZmFjaGF1ZnNpY2h0RGly +dHlTZXR6ZW4odHJ1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAg +IH0KICAgIH0KCiAgICBmdW5jdGlvbiByZXN0TGlzdGVuZXJFaW5yaWNodGVuKCkgewogICAgICAg +IC8vIFdvY2hlbnBsYW4KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3Atdm9yd29j +aGUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHdwVm9yd29jaGUpOwogICAgICAgIGRvY3Vt +ZW50LmdldEVsZW1lbnRCeUlkKCd3cC1uYWVjaHN0ZS13b2NoZScpLmFkZEV2ZW50TGlzdGVuZXIo +J2NsaWNrJywgd3BOYWVjaHN0ZVdvY2hlKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ +ZCgnd3AtYWt0dWVsbGUtd29jaGUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHdwQWt0dWVs +bGVXb2NoZSk7CiAgICAgICAgdmFyIGJ0bldwRHJ1Y2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ +ZCgnd3AtZHJ1Y2tlbicpOwogICAgICAgIGlmIChidG5XcERydWNrKSBidG5XcERydWNrLmFkZEV2 +ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmJv +ZHkuY2xhc3NMaXN0LmFkZCgnZHJ1Y2tlbi13b2NoZW5wbGFuJyk7CiAgICAgICAgICAgIHNldFRp +bWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cucHJpbnQoKTsKICAgICAg +ICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0 +LnJlbW92ZSgnZHJ1Y2tlbi13b2NoZW5wbGFuJyk7IH0sIDUwMCk7CiAgICAgICAgICAgIH0sIDUw +KTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gU3RhdGlzdGlrICsgTG9nYnVjaDogTGlzdGVuZXIg +dmlhIEV2ZW50LURlbGVnYXRpb24sIHdlaWwgZGllCiAgICAgICAgLy8gTWFya3VwLUJsb2Vja2Ug +ZnVlciBVbmJlcmVjaHRpZ3RlIHp3YXIgaW0gRE9NIHN0ZWhlbiwgZGllCiAgICAgICAgLy8gS2xp +Y2stWmllbGUgYWJlciBudXIgZnVlciBCZXJlY2h0aWd0ZSBzaWNodGJhciB3ZXJkZW4uCiAgICAg +ICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAg +ICAgICAgIGlmIChlLnRhcmdldCAmJiBlLnRhcmdldC5pZCA9PT0gJ2J0bi1zdGF0cy1sYWRlbicp +IHsKICAgICAgICAgICAgICAgIHN0YXRpc3Rpa0xhZGVuKCk7CiAgICAgICAgICAgICAgICByZXR1 +cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGluZm8gPSBlLnRhcmdldC5jbG9zZXN0 +ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJy5zdGF0cy1pbmZvLWJ0bicpOwogICAgICAgICAgICBpZiAo +aW5mbykgc3RhdEluZm9aZWlnZW4oaW5mby5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdHMtaW5mbycp +KTsKICAgICAgICB9KTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2Un +LCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmIChlLnRhcmdldCAmJiBlLnRhcmdldC5pZCA9 +PT0gJ3N0YXRzLWdydXBwZW4tZmlsdGVyJykgewogICAgICAgICAgICAgICAgc3RhdEZpbHRlclNl +dHplbihlLnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICBpZiAoWi5zdGF0aXN0aWspIHN0 +YXRpc3Rpa1JlbmRlcm4oKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGRvY3Vt +ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBp +ZiAoZS50YXJnZXQgJiYgZS50YXJnZXQuaWQgPT09ICdsb2ctc3VjaGUnKSBsb2didWNoRmlsdGVy +bigpOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vID09PT09IEluaXQgPT09PT0KCiAgICBmdW5j +dGlvbiBpbml0KCkgewogICAgICAgIHRoZW1lV2llZGVyaGVyc3RlbGxlbigpOwogICAgICAgIGhl +YXJ0YmVhdFN0YXJ0ZW4oKTsKICAgICAgICBlbnR3dXJmQXV0b0NsZWFudXAoKTsgICAgLy8gU3Bl +YyBGLjQ6IGFsdGUgTW9kYWwtRW50d3VlcmZlICg+MTQgVGFnZSkgbG9lc2NoZW4KCiAgICAgICAg +ZGF0ZW5MYWRlbigpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGdyaWRSZW5kZXJuKCk7 +CiAgICAgICAgICAgIHNjcm9sbFN5bmMoKTsKICAgICAgICAgICAgZXZlbnRMaXN0ZW5lckVpbnJp +Y2h0ZW4oKTsKICAgICAgICAgICAgenVtSGV1dGlnZW5EYXR1bSgpOwogICAgICAgICAgICAvLyBa +dWxldHp0IGFrdGl2ZSBBbnNpY2h0IHdpZWRlcmhlcnN0ZWxsZW4sIGRhbWl0IGVpbiBCcm93c2Vy +LVJlZnJlc2gKICAgICAgICAgICAgLy8gKEY1KSBkZW4gVXNlciBuaWNodCBhdXMgU3RhdGlzdGlr +L0xvZ2J1Y2gvQWRtaW4gaW4gZGllIFBsYW51bmdzLQogICAgICAgICAgICAvLyBhbnNpY2h0IHp1 +cnVlY2t3aXJmdC4gTGllZ3QgaW0gc2Vzc2lvblN0b3JhZ2Ug4oCUIGJlaW0gU3RhcnQgdWViZXIK +ICAgICAgICAgICAgLy8gZGdsLmJhdCAoPSBuZXVlciBUYWIsIGxlZXJlcyBzZXNzaW9uU3RvcmFn +ZSkgYmxlaWJ0IGVzIGJlaQogICAgICAgICAgICAvLyAncGxhbnVuZyc7IG51ciBJbi1UYWItUmVm +cmVzaCBoYWVsdCBkaWUgbGV0enRlIEFuc2ljaHQuCiAgICAgICAgICAgIC8vIGFuc2ljaHRXZWNo +c2VsbigpIHBydWVmdCBkaWUgUmVjaHRlIHNlbGJzdCB1bmQgZmFlbGx0IG5vdGZhbGxzCiAgICAg +ICAgICAgIC8vIGF1ZiAncGxhbnVuZycgenVydWVjay4KICAgICAgICAgICAgdHJ5IHsKICAgICAg +ICAgICAgICAgIHZhciBsZXR6dGVBbnNpY2h0ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndmkz +LmFrdGl2ZUFuc2ljaHQnKTsKICAgICAgICAgICAgICAgIGlmIChsZXR6dGVBbnNpY2h0ICYmIGxl +dHp0ZUFuc2ljaHQgIT09ICdwbGFudW5nJykgewogICAgICAgICAgICAgICAgICAgIGFuc2ljaHRX +ZWNoc2VsbihsZXR6dGVBbnNpY2h0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBj +YXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfQogICAgICAgICAgICAvLyBGYWxscyBub2NoIGFsdGUg +bG9jYWxTdG9yYWdlLUVpbnRyYWVnZSBydW1saWVnZW4gKE1pZ3JhdGlvbik6CiAgICAgICAgICAg +IC8vIGVpbm1hbGlnIGF1ZnJhZXVtZW4sIGRhbWl0IG5pY2h0IHZlcnNlaGVudGxpY2ggZGVyIFdl +cnQKICAgICAgICAgICAgLy8gd2llZGVyIHJlaW5rb21tdCwgZmFsbHMgaWNoIGF1cyBWZXJzZWhl +biBkYXJhdWYgZ3JlaWZlLgogICAgICAgICAgICB0cnkgeyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRl +bSgndmkzLmFrdGl2ZUFuc2ljaHQnKTsgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfQogICAg +ICAgICAgICAvLyBUb3BiYXItQXZhdGFyIGZ1ZXIgZGllIGVpZ2VuZSBQZXJzb24gc2V0emVuIChz +aWNodGJhciBudXIsCiAgICAgICAgICAgIC8vIHdlbm4gZWluZSBQZXJzb25JZCB6dWdlb3JkbmV0 +IGlzdCDigJQgc29uc3QgYmxlaWJ0IGRlciBTbG90IGxlZXIpLgogICAgICAgICAgICBtZWluQXZh +dGFyVG9wYmFyQWt0dWFsaXNpZXJlbigpOwogICAgICAgICAgICAvLyBMaXZlLVN5bmMgc3RhcnRl +bjogcG9sbHQgL2FwaS9wbGFudW5nL2NoYW5nZXMgKyAvYXBpL2xvY2svemVsbGVuCiAgICAgICAg +ICAgIC8vIGFsbGUgM3MsIGJsZW5kZXQgZnJlbWRlIExvY2stSW5kaWthdG9yZW4gZWluIHVuZCBs +YWVzc3QgcmVtb3RlCiAgICAgICAgICAgIC8vIGdlYWVuZGVydGUgWmVsbGVuIGt1cnogYXVmbGV1 +Y2h0ZW4uCiAgICAgICAgICAgIHN5bmNXb3JrZXJTdGFydGVuKCk7CiAgICAgICAgICAgIGZ1ZWxs +SW5pdCgpOyAgIC8vIEV4Y2VsLWFlaG5saWNoZXIgRnVlbGwtR3JpZmY6IGdsb2JhbGUgTGlzdGVu +ZXIKICAgICAgICAgICAgLy8gSGlud2Vpcy1TeXN0ZW06IGVpbm1hbCBpbml0aWFsIGxhZGVuLCBk +YW5uIHBvbGxlZCBkZXIgU3luYy1Xb3JrZXIuCiAgICAgICAgICAgIC8vIFNpY2h0YmFyIG51ciBm +dWVyIFNVICsgR2VzYW10dmVyYW50d29ydGxpY2hlIChoaW53ZWlzZS5qcyBwcnVlZnQgc2VsYnN0 +KS4KICAgICAgICAgICAgLy8gQmFkZ2Ugc2V0emVuICsgYmVpbSBMb2dpbiBkYXMgSGlud2Vpcy1N +b2RhbCBhdXRvbWF0aXNjaCBvZWZmbmVuCiAgICAgICAgICAgIC8vIChzdGF0dCBkZXMgZnJ1ZWhl +cmVuIHJvdGVuIEJhbm5lcnMsIGRhcyBkZW4gR3JpZC1TY3JvbGwgYnJhY2gpLgogICAgICAgICAg +ICBoaW53ZWlzZUxhZGVuKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGhpbndl +aXNlQW56ZWlnZUFrdHVhbGlzaWVyZW4oKTsKICAgICAgICAgICAgICAgIGhpbndlaXNlQXV0b09l +ZmZuZW4oKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRvYXN0KCdWSTMgREdMLVBsYW51 +bmcgZ2VsYWRlbiDigJQgJyArIFoucGVyc29uZW4ubGVuZ3RoICsgJyBQZXJzb25lbicsICdpbmZv +Jyk7CiAgICAgICAgICAgIC8vIFVudGVyYmVzZXR6dW5ncy1XYXJudW5nIGZ1ZXIgV2FjaGxlaXR1 +bmcvU1UgKGxlaWNodCB2ZXJ6b2VnZXJ0LAogICAgICAgICAgICAvLyBkYW1pdCBkZXIgQmVncnVl +c3N1bmdzLVRvYXN0IHZvcmhlciBzaWNodGJhciBpc3QpCiAgICAgICAgICAgIHNldFRpbWVvdXQo +dW50ZXJiZXNldHp1bmdXYXJudW5nWmVpZ2VuLCAxNTAwKTsKICAgICAgICB9KS5jYXRjaChmdW5j +dGlvbihlcnIpIHsKICAgICAgICAgICAgdG9hc3QoJ0ZlaGxlciBiZWltIExhZGVuOiAnICsgZXJy +Lm1lc3NhZ2UsICdmZWhsZXInKTsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignTGFkZWZlaGxl +cjonLCBlcnIpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBCZWltIFNjaGxpZXNzZW46IGVpZ2Vu +ZXMgRWRpdC1Mb2NrIG5vY2ggZnJlaWdlYmVuLCBkYW1pdCBrZWluCiAgICAgICAgLy8gdmVyd2Fp +c3RlciBMb2NrIGltIEZpbGVzeXN0ZW0genVydWVja2JsZWlidC4KICAgICAgICB3aW5kb3cuYWRk +RXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgYWxsZUVpZ2VuZW5Mb2Nrc0ZyZWlnZWJlbkJl +YWNvbik7CiAgICB9CgogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykg +ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXQpOwogICAg +ZWxzZSBpbml0KCk7Cgp9KSgpOwo= ### FILE: check.bat | 179 QGVjaG8gb2ZmDQpzZXRsb2NhbA0KZWNoby4NCmVjaG8gPT09IFZJMyBER0wtUGxhbnVuZzogU2Vs YnN0dGVzdCAvIEhlYWx0aC1DaGVjayA9PT0NCmVjaG8uDQpwb3dlcnNoZWxsIC1Ob1Byb2ZpbGUg diff --git a/VI3DGL/sync-bundle-02.txt b/VI3DGL/sync-bundle-02.txt index 71dd547..a658064 100644 --- a/VI3DGL/sync-bundle-02.txt +++ b/VI3DGL/sync-bundle-02.txt @@ -1,6 +1,6 @@ ### SYNC-TRANSFER 2/5 -- mit sync-entpacken.bat entpacken ### Base64 - NICHT von Hand bearbeiten. -### FILE: index.html | 133481 +### FILE: index.html | 133575 PCFET0NUWVBFIGh0bWw+CjwhLS0gU3RhbmQ6IDIwMjYtMDUtMTQgLS0+CjxodG1sIGxhbmc9ImRl Ij4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3 cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAg @@ -20,1587 +20,1668 @@ bGUtVG9vbHRpcCwgZGVyCiAgICAgICAgIFNjaGljaHQgdW5kIEtvbW1lbnRhciB6dXNhbW1lbmts YXRzY2h0ZS4gR2VzY2hsb3NzZW5lciBIZWFkZXIsCiAgICAgICAgIE1laHJ6ZWlsZXItQm9keSwg Rm9vdGVyIG1pdCBWZXJmYXNzZXIgKyBEYXR1bS4gLS0+CiAgICA8ZGl2IGlkPSJ2aTMta29tbWVu dGFyLXBvcG92ZXIiIGNsYXNzPSJ2aTMta29tbWVudGFyLXBvcG92ZXIgdmVyc3RlY2t0IiByb2xl -PSJ0b29sdGlwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CgogICAgPCEtLSA9PT09PT09PT09 -IEhpbndlaXMtQmFubmVyIChudXIgU1UgKyBHZXNhbXR2ZXJhbnR3b3J0bGljaCkgPT09PT09PT09 -PSAtLT4KICAgIDxkaXYgaWQ9ImhpbndlaXMtYmFubmVyIiBjbGFzcz0iaGlud2Vpcy1iYW5uZXIg -dmVyc3RlY2t0IiByb2xlPSJzdGF0dXMiIGFyaWEtbGl2ZT0icG9saXRlIj48L2Rpdj4KCiAgICA8 -IS0tID09PT09PT09PT0gSGVhZGVyIG1pdCBOYXZpZ2F0aW9uID09PT09PT09PT0gLS0+CiAgICA8 -aGVhZGVyIGlkPSJrb3BmbGVpc3RlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItbGlua3Mi -PgogICAgICAgICAgICA8aDE+PGltZyBzcmM9Imljb25zL1ZJM19QbGFudW5nX0xvZ28ucG5nIiBh -bHQ9IiIgY2xhc3M9ImhlYWRlci1sb2dvIj48c3BhbiBkYXRhLWJlej0iYXBwLnRpdGVsIj5WSTMg -REdMLVBsYW51bmc8L3NwYW4+IDxzcGFuIGlkPSJhbnplaWdlLWphaHIiIGNsYXNzPSJoZWFkZXIt -amFociI+PC9zcGFuPjwvaDE+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPG5hdiBjbGFzcz0iaGVh -ZGVyLW5hdiI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idG4gYWt0aXYiIGRhdGEt -YW5zaWNodD0icGxhbnVuZyIgZGF0YS1iZXo9Im5hdi5wbGFudW5nIj5QbGFudW5nPC9idXR0b24+ -CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idG4iIGRhdGEtYW5zaWNodD0id29jaGVu -cGxhbiIgZGF0YS1iZXo9Im5hdi53b2NoZW5wbGFuIj5Xb2NoZW5wbGFuPC9idXR0b24+CiAgICAg -ICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idG4iIGRhdGEtYW5zaWNodD0icGVyc3BsYW4iIGRh -dGEtYmV6PSJuYXYucGVyc3BsYW4iPlBlcnMuIFBsYW48L2J1dHRvbj4KICAgICAgICAgICAgPGJ1 -dHRvbiBjbGFzcz0ibmF2LWJ0biIgZGF0YS1hbnNpY2h0PSJiZXNldHp1bmciIGlkPSJuYXYtYmVz -ZXR6dW5nIiB0aXRsZT0iUHLDvGZ1bmcg4oCUIDQgV29jaGVuLVZvcnNjaGF1IiBkYXRhLWJlej0i -bmF2LmJlc2V0enVuZyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+UHLDvGZ1bmc8L2J1dHRvbj4KICAg -ICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibmF2LWJ0biIgZGF0YS1hbnNpY2h0PSJhZG1pbiIgICAg -aWQ9Im5hdi1hZG1pbiIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+QWRtaW5pc3RyYXRpb248L2J1dHRv -bj4KICAgICAgICA8L25hdj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItcmVjaHRzIj4KICAg -ICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWJ1Z3JlcG9ydCIgY2xhc3M9Imljb24tYnRuIGJ1Z3Jl -cG9ydC1idG4iIHRpdGxlPSJCdWcgb2RlciBQcm9ibGVtIG1lbGRlbiI+QnVnUmVwb3J0PC9idXR0 -b24+CiAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1pbmZvIiBjbGFzcz0iaWNvbi1idG4iIHRp -dGxlPSJJbmZvcm1hdGlvbmVuICZhbXA7IEhpbGZlIj5JbmZvPC9idXR0b24+CiAgICAgICAgICAg -IDxzcGFuIGlkPSJiZW51dHplci13cmFwIiBjbGFzcz0iYmVudXR6ZXItd3JhcCI+CiAgICAgICAg -ICAgICAgICA8c3BhbiBpZD0ibWVpbi1hdmF0YXItYnRuIiBjbGFzcz0ibWVpbi1hdmF0YXItYnRu -IHZlcnN0ZWNrdCIgcm9sZT0iYnV0dG9uIiB0YWJpbmRleD0iMCIgdGl0bGU9Ik1laW4gUHJvZmls -YmlsZCBiZWFyYmVpdGVuIiBhcmlhLWxhYmVsPSJNZWluIFByb2ZpbGJpbGQgYmVhcmJlaXRlbiI+ -PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImJlbnV0emVyLWFuemVpZ2UiIGNsYXNz -PSJiZW51dHplci1iYWRnZSI+PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gaWQ9Imhpbndl -aXMtYmFkZ2UiIGNsYXNzPSJoaW53ZWlzLWJhZGdlIHZlcnN0ZWNrdCIgcm9sZT0iYnV0dG9uIiB0 -YWJpbmRleD0iMCIgYXJpYS1sYWJlbD0iT2ZmZW5lIEhpbndlaXNlIGFuemVpZ2VuIj48L3NwYW4+ -CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXRoZW1lIiBj -bGFzcz0iaWNvbi1idG4iIHRpdGxlPSJUYWcvTmFjaHQgdW1zY2hhbHRlbiI+TmFjaHQ8L2J1dHRv -bj4KICAgICAgICA8L2Rpdj4KICAgIDwvaGVhZGVyPgoKICAgIDwhLS0gPT09PT09PT09PSBBTlNJ -Q0hUOiBQTEFOVU5HID09PT09PT09PT0gLS0+CiAgICA8ZGl2IGlkPSJhbnNpY2h0LXBsYW51bmci -IGNsYXNzPSJhbnNpY2h0Ij4KICAgICAgICA8IS0tIFBsYW51bmdzZ3JpZCDigJQgRXhjZWwtdHJl -dWVzIExheW91dCAtLT4KICAgICAgICA8ZGl2IGlkPSJwbGFudW5nLWNvbnRhaW5lciI+CiAgICAg -ICAgICAgIDwhLS0gRml4aWVydGUgbGlua2UgU3BhbHRlIC0tPgogICAgICAgICAgICA8ZGl2IGlk -PSJuYW1lbi1zcGFsdGUiPgogICAgICAgICAgICAgICAgPCEtLSBLb3BmYmVyZWljaCBsaW5rczog -SGV1dGUtQmFubmVyIHVlYmVybGFnZXJ0IGRpZSBkcmVpIERhdHVtc3plaWxlbiAtLT4KICAgICAg -ICAgICAgICAgIDxkaXYgaWQ9ImtvcGYtbGlua3MiPgogICAgICAgICAgICAgICAgICAgIDwhLS0g -UGxhdHpoYWx0ZXItWmVpbGVuIGZ1ZXIgSG9laGVuLVN5bmMgbWl0IEtvcGYgcmVjaHRzLgogICAg -ICAgICAgICAgICAgICAgICAgICAgSmVkZSBaZWlsZSBsaW5rcyBlbnRzcHJpY2h0IEVYQUtUIGVp -bmVyIFplaWxlIHJlY2h0cwogICAgICAgICAgICAgICAgICAgICAgICAgKGdsZWljaGUgSG9laGUh -KSwgc29uc3QgdmVyc2NoaWVidCBzaWNoIGRpZSBOYW1lbnNzcGFsdGUKICAgICAgICAgICAgICAg -ICAgICAgICAgIGdlZ2VudWViZXIgZGVtIERhdGVuLUdyaWQuIC0tPgogICAgICAgICAgICAgICAg -ICAgIDxkaXYgY2xhc3M9ImtvcGYtemVpbGUga3otZGF0dW0iPjwvZGl2PiAgICAgICAgIDwhLS0g -PSAjZGF0dW0temVpbGUtdGFnICgyMHB4KSAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNs -YXNzPSJrb3BmLXplaWxlIGt6LXdvY2hlbnRhZyI+PC9kaXY+ICAgICA8IS0tID0gI2RhdHVtLXpl -aWxlLXdvY2hlbnRhZyAoMjBweCkgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i -a29wZi16ZWlsZSBrei1hbmxhc3MiPjwvZGl2PiAgICAgICAgPCEtLSA9ICNkYXR1bS16ZWlsZS1h -bmxhc3MgKDM4cHgsIE1haSAyMDI2IG1pdCBFdmVudHMga29tYmluaWVydCkgLS0+CiAgICAgICAg -ICAgICAgICAgICAgPCEtLSBPdmVybGF5OiBIZXV0ZS1MZWlzdGUgKEJ1dHRvbiArIERhdHVtICsg -V29jaGVudGFnKSBkZWNrdAogICAgICAgICAgICAgICAgICAgICAgICAgZGllIG9iZXJlbiBQbGF0 -emhhbHRlci1aZWlsZW4gYWIgKGt6LWRhdHVtK3dvY2hlbnRhZythbmxhc3MpLiAtLT4KICAgICAg -ICAgICAgICAgICAgICA8ZGl2IGlkPSJrbC1oZXV0ZS1iYW5uZXIiPgogICAgICAgICAgICAgICAg -ICAgICAgICA8YnV0dG9uIGlkPSJidG4taGV1dGUiIGNsYXNzPSJrbC1oZXV0ZS1idXR0b24iIHRp -dGxlPSJIZXV0ZSDigJQgc3ByaW5ndCBpbiBkZXIgUGxhbnRhZmVsIHNvZm9ydCB6dW0gaGV1dGln -ZW4gRGF0dW0gdW5kIHNjcm9sbHQgZGllIEFuc2ljaHQgZG9ydGhpbi4gUHJha3Rpc2NoLCB1bSBu -YWNoIGRlbSBCbMOkdHRlcm4gaW4gYW5kZXJlIFdvY2hlbiBvZGVyIE1vbmF0ZSBzY2huZWxsIHp1 -ciBha3R1ZWxsZW4gV29jaGUgenVyw7xja3p1a2VocmVuLiI+SGV1dGU8L2J1dHRvbj4KICAgICAg -ICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXNjaGljaHR0ZWFtIiBjbGFzcz0ia2wt -aGV1dGUtYnV0dG9uIiB0aXRsZT0iVGVhbSDigJQgTWVpbiBTY2hpY2h0LVRlYW0gZsO8ciBkaWUg -bsOkY2hzdGVuIDE0IFRhZ2U6IHplaWd0IGFsbGUgUGVyc29uZW4gYXVzIGRlaW5lciBTY2hpY2h0 -LVJvdGF0aW9uIChiYXNpZXJlbmQgYXVmIGRlaW5lciBoZXV0aWdlbiBTY2hpY2h0IEZyw7xoL1Nw -w6R0L05hY2h0KS4gUHJha3Rpc2NoIGbDvHIgU2NoaWNodHRhdXNjaC1BbmZyYWdlbiB1bmQgdW0g -enUgc2VoZW4sIHdlciB3YW5uIG1pdCBkaXIgYXJiZWl0ZXQuIE51ciBzaWNodGJhciwgd2VubiBk -ZWluZSBOVy1LZW5udW5nIGVpbmVyIFBsYW4tUGVyc29uIHp1Z2VvcmRuZXQgaXN0LiIgYXJpYS1s -YWJlbD0iTWVpbiBTY2hpY2h0LVRlYW0g4oCUIDE0LVRhZ2Utw5xiZXJzaWNodCI+VGVhbTwvYnV0 -dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJrbC1oZXV0ZS1pbmZvIj4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImtsLWhldXRlLWRhdHVtLXR4 -dCIgaWQ9ImtsLWhldXRlLWRhdHVtIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IDxkaXYgY2xhc3M9ImtsLWhldXRlLXd0YWctdHh0IiBpZD0ia2wtaGV1dGUtd3RhZyI+PC9kaXY+ -CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2 -PgogICAgICAgICAgICAgICAgICAgIDwhLS0gWmVpbGUgNTogU3TDpHJrZSAtLT4KICAgICAgICAg -ICAgICAgICAgICA8ZGl2IGNsYXNzPSJrb3BmLXplaWxlIGt6LXN0YWVya2UiPgogICAgICAgICAg -ICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2wtbGFiZWwiPlN0w6Rya2U8L3NwYW4+CiAgICAg -ICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrbC13ZXJ0Ij5ER0wgaW4gVkkgMzwvc3Bh -bj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8IS0tIFpl -aWxlbiA1LTExOiBTY2hpY2h0Zm9sZ2UgcHJvIFN0YW5kb3J0IC0tPgogICAgICAgICAgICAgICAg -ICAgIDxkaXYgaWQ9InNjaGljaHRmb2xnZS1saW5rcyI+CiAgICAgICAgICAgICAgICAgICAgICAg -IDxkaXYgY2xhc3M9ImtvcGYtemVpbGUga3otc2NoaWNodGZvbGdlIGt6LXNmLWVyc3RlIj4KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrbC1sYWJlbCI+U2NoaWNodDwv -c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrbC13ZXJ0IiBk -YXRhLXN0YW5kb3J0PSIwIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgog -ICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg -ICAgICAgICA8IS0tIFBlcnNvbmVubGlzdGUgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJu -YW1lbi1saXN0ZSIgcm9sZT0icm93aGVhZGVyIiBhcmlhLWxhYmVsPSJQZXJzb25lbmxpc3RlIGRl -ciBQbGFudGFmZWwiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0g -U2Nyb2xsYmFyZXIgcmVjaHRlciBCZXJlaWNoLiByb2xlPWdyaWQgbWFjaHQgZGllIFN0cnVrdHVy -IGZ1ZXIKICAgICAgICAgICAgICAgICBTY3JlZW5yZWFkZXIgZXhwbGl6aXQgKFNwcmludCA2YSAy -MDI2LTA1LTI5KS4gVGFiLU5hdmlnYXRpb24KICAgICAgICAgICAgICAgICBkZXIgZWluemVsbmVu -IFplbGxlbiBrb21tdCBpbiBTcHJpbnQgNmIgKEdyaWQtUmVmYWN0b3IpLiAtLT4KICAgICAgICAg -ICAgPGRpdiBpZD0iZ3JpZC1zY3JvbGwtY29udGFpbmVyIiByb2xlPSJncmlkIiBhcmlhLWxhYmVs -PSJEaWVuc3RwbGFuLVRhZmVsIj4KICAgICAgICAgICAgICAgIDwhLS0gS29wZmJlcmVpY2ggcmVj -aHRzIC0tPgogICAgICAgICAgICAgICAgPGRpdiBpZD0ia29wZi1yZWNodHMiIHJvbGU9InJvd2dy -b3VwIj4KICAgICAgICAgICAgICAgICAgICA8IS0tIFplaWxlIDE6IERhdHVtIC0tPgogICAgICAg -ICAgICAgICAgICAgIDxkaXYgaWQ9ImRhdHVtLXplaWxlLXRhZyIgY2xhc3M9ImtvcGYtZGF0ZW4t -emVpbGUiIHJvbGU9InJvdyIgYXJpYS1sYWJlbD0iVGFnZXNkYXR1bSI+PC9kaXY+CiAgICAgICAg -ICAgICAgICAgICAgPCEtLSBaZWlsZSAyOiBXb2NoZW50YWcgLS0+CiAgICAgICAgICAgICAgICAg -ICAgPGRpdiBpZD0iZGF0dW0temVpbGUtd29jaGVudGFnIiBjbGFzcz0ia29wZi1kYXRlbi16ZWls -ZSIgcm9sZT0icm93IiBhcmlhLWxhYmVsPSJXb2NoZW50YWciPjwvZGl2PgogICAgICAgICAgICAg -ICAgICAgIDwhLS0gWmVpbGUgMzogSWNvbnMgJiBBbmzDpHNzZSAoRmVpZXJ0YWcvU29uZGVydGVy -bWluL0dlYnVydHN0YWcgaW4gZWluZXIKICAgICAgICAgICAgICAgICAgICAgICAgIGtvbXBha3Rl -biBaZWlsZSwgZGF6dSBkaWUgRmVyaWVuLVJhbmdlLUJhciBhbHMgT3ZlcmxheSkgLS0+CiAgICAg -ICAgICAgICAgICAgICAgPGRpdiBpZD0iZGF0dW0temVpbGUtYW5sYXNzIiBjbGFzcz0ia29wZi1k -YXRlbi16ZWlsZSIgcm9sZT0icm93IiBhcmlhLWxhYmVsPSJBbmzDpHNzZSI+PC9kaXY+CiAgICAg -ICAgICAgICAgICAgICAgPCEtLSBaZWlsZSA1OiBTdMOkcmtlIEZ8U3xOIC0tPgogICAgICAgICAg -ICAgICAgICAgIDxkaXYgaWQ9InN0YWVya2UtemVpbGUiIGNsYXNzPSJrb3BmLWRhdGVuLXplaWxl -IiByb2xlPSJyb3ciIGFyaWEtbGFiZWw9IlNjaGljaHRzdMOkcmtlIj48L2Rpdj4KICAgICAgICAg -ICAgICAgICAgICA8IS0tIFplaWxlbiA1KzogU2NoaWNodGZvbGdlIHBybyBTdGFuZG9ydCAtLT4K -ICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzY2hpY2h0Zm9sZ2UtcmVjaHRzIiByb2xlPSJy -b3dncm91cCIgYXJpYS1sYWJlbD0iU2NoaWNodGZvbGdlIHBybyBTdGFuZG9ydCI+PC9kaXY+CiAg -ICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwhLS0gRGF0ZW4tR3JpZCAtLT4K -ICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImdyaWQtZGF0ZW4iIHJvbGU9InJvd2dyb3VwIiBhcmlh -LWxhYmVsPSJTY2hpY2h0ZW4gZGVyIFBlcnNvbmVuIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ -CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gWmVsbGVuLUVkaXRvciAtLT4KICAgICAgICA8 -ZGl2IGlkPSJ6ZWxsLWVkaXRvciIgY2xhc3M9InZlcnN0ZWNrdCI+CiAgICAgICAgICAgIDxzZWxl -Y3QgaWQ9ImVkaXRvci1hdXN3YWhsIiBzaXplPSIxMCI+PC9zZWxlY3Q+CiAgICAgICAgICAgIDxk -aXYgY2xhc3M9ImVkaXRvci1rb21tZW50YXIiPgogICAgICAgICAgICAgICAgPCEtLSBWZXJsYXVm -c2xpc3RlOiBnZXJlbmRlcnQgdm9uIGVkaXRvcktvbW1lbnRhclZlcmxhdWZSZW5kZXJuKCkuCiAg -ICAgICAgICAgICAgICAgICAgIFBybyBFaW50cmFnOiBUZXh0LCBNZXRhLVplaWxlIChWZXJmYXNz -ZXIgKyBaZWl0KSwgb3B0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgTG9lc2NoLUljb24gZnVl -ciBTdXBlclVzZXIvR2VzYW10dmVyYW50d29ydGxpY2hlLiAtLT4KICAgICAgICAgICAgICAgIDxk -aXYgaWQ9ImVkaXRvci1rb21tZW50YXItdmVybGF1ZiIgY2xhc3M9ImVkaXRvci1rb21tZW50YXIt -dmVybGF1ZiI+PC9kaXY+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImVk -aXRvci1rb21tZW50YXItaW5wdXQiIGNsYXNzPSJmb3JtLWlucHV0IiBwbGFjZWhvbGRlcj0iTmV1 -ZXIgS29tbWVudGFyLi4uIiBzdHlsZT0id2lkdGg6MTAwJTtmb250LXNpemU6MTFweDtwYWRkaW5n -OjRweCA2cHgiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWtvbW1lbnRhci1i -dG5zIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4ta29tbWVudGFyLWhpbnp1 -IiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVyIGJ0bi1rbGVpbiI+SGluenVmw7xnZW48L2J1dHRvbj4K -ICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4K -ICAgIDwvZGl2PgoKICAgIDwhLS0gPT09PT09PT09PSBBTlNJQ0hUOiBXT0NIRU5QTEFOID09PT09 -PT09PT0gLS0+CiAgICA8ZGl2IGlkPSJhbnNpY2h0LXdvY2hlbnBsYW4iIGNsYXNzPSJhbnNpY2h0 -IHZlcnN0ZWNrdCI+CiAgICAgICAgPGRpdiBjbGFzcz0id3AtbGF5b3V0Ij4KICAgICAgICAgICAg -PCEtLSBUb29sYmFyIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3cC10b29sYmFyIj4KICAg -ICAgICAgICAgICAgIDxidXR0b24gaWQ9IndwLXZvcndvY2hlIiBjbGFzcz0idG9vbGJhci1idG4i -PiZsYXJyOyBWb3J3b2NoZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0id3At -YWt0dWVsbGUtd29jaGUiIGNsYXNzPSJ0b29sYmFyLWJ0biI+QWt0dWVsbGUgV29jaGU8L2J1dHRv -bj4KICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IndwLW5hZWNoc3RlLXdvY2hlIiBjbGFzcz0i -dG9vbGJhci1idG4iPk7DpGNoc3RlIFdvY2hlICZyYXJyOzwvYnV0dG9uPgogICAgICAgICAgICAg -ICAgPGRpdiBjbGFzcz0idG9vbGJhci10cmVubmVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxz -cGFuIGlkPSJ3cC16ZWl0cmF1bSIgY2xhc3M9IndwLXplaXRyYXVtLWFuemVpZ2UiPjwvc3Bhbj4K -ICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IndwLWRydWNrZW4iIGNsYXNzPSJ0b29sYmFyLWJ0 -biIgc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG8iIHRpdGxlPSJXb2NoZW5wbGFuIGRydWNrZW4gKGVp -bmUgU2VpdGUpIj5EcnVja2VuPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAg -ICA8IS0tIFdvY2hlbnBsYW4tUmVuZGVyLVppZWw6IHdvY2hlbnBsYW4uanMgZXJzZXR6dCBkZW4g -SW5oYWx0IHZvbgogICAgICAgICAgICAgICAgIC53cC1zY3JvbGwgYmVpIGplZGVtIFJlbmRlciBk -dXJjaCAud3Atc2VpdGUgKFRhZ2Jsb2NrLUxheW91dCkuCiAgICAgICAgICAgICAgICAgRnJ1ZWhl -ciBzdGFuZCBoaWVyIGVpbmUgc3RhdGlzY2hlIDx0YWJsZT4sIGRpZSBzb2ZvcnQKICAgICAgICAg -ICAgICAgICB1ZWJlcnNjaHJpZWJlbiB3dXJkZSDigJQgZW50ZmVybnQgKEF1ZGl0IDIwMjYtMDYt -MTUpLiAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0id3Atc2Nyb2xsIj48L2Rpdj4KICAgICAg -ICAgICAgPCEtLSBMZWdlbmRlIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3cC1sZWdlbmRl -Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3cC1sZWctaXRlbSI+PHNwYW4gY2xhc3M9 -IndwLWxlZy1kb3QiIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWZhcmJlLWZydWVoKSI+PC9zcGFu -PiBGcsO8aGRpZW5zdDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3cC1sZWct -aXRlbSI+PHNwYW4gY2xhc3M9IndwLWxlZy1kb3QiIHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWZh -cmJlLXNwYWV0KSI+PC9zcGFuPiBTcMOkdGRpZW5zdDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxz -cGFuIGNsYXNzPSJ3cC1sZWctaXRlbSI+PHNwYW4gY2xhc3M9IndwLWxlZy1kb3QiIHN0eWxlPSJi -YWNrZ3JvdW5kOnZhcigtLWZhcmJlLW5hY2h0KSI+PC9zcGFuPiBOYWNodGRpZW5zdDwvc3Bhbj4K -ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tID09 -PT09PT09PT0gQU5TSUNIVDogUEVSU8OWTkxJQ0hFUiBQTEFOID09PT09PT09PT0gLS0+CiAgICA8 -ZGl2IGlkPSJhbnNpY2h0LXBlcnNwbGFuIiBjbGFzcz0iYW5zaWNodCB2ZXJzdGVja3QiPgogICAg -ICAgIDxkaXYgY2xhc3M9InBwLWxheW91dCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBwLXRv -b2xiYXIiPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0icHAtcGVyc29uLWF1c3dhaGwiIHN0 -eWxlPSJmb250LXdlaWdodDo2MDA7bWFyZ2luLXJpZ2h0OjZweCI+UGVyc29uOjwvbGFiZWw+CiAg -ICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJwcC1wZXJzb24tYXVzd2FobCIgY2xhc3M9ImZvcm0t -aW5wdXQiIHN0eWxlPSJ3aWR0aDoyNTBweCI+PC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8ZGl2 -IGNsYXNzPSJ0b29sYmFyLXRyZW5uZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBp -ZD0icHAtZHJ1Y2tlbiIgY2xhc3M9InRvb2xiYXItYnRuIj5EcnVja2VuPC9idXR0b24+CiAgICAg -ICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcC1zY3JvbGwiIGlkPSJwcC1z -Y3JvbGwiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHAtdGl0ZWwiIGlkPSJwcC10aXRl -bCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcC1tb25hdGUiIGlkPSJwcC1t -b25hdGUiPjwvZGl2PgogICAgICAgICAgICAgICAgPCEtLSBadXNhbW1lbmZhc3N1bmcgLS0+CiAg -ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcC1zdW1tYXJ5IiBpZD0icHAtc3VtbWFyeSI+PC9k -aXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEt -LSA9PT09PT09PT09IEFOU0lDSFQ6IEJFU0VUWlVOR1NLT05UUk9MTEUgPT09PT09PT09PSAtLT4K -ICAgIDxkaXYgaWQ9ImFuc2ljaHQtYmVzZXR6dW5nIiBjbGFzcz0iYW5zaWNodCB2ZXJzdGVja3Qi -PgogICAgICAgIDxkaXYgY2xhc3M9ImJrLWxheW91dCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9 -ImJrLWtvcGYiPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8aDIg -c3R5bGU9Im1hcmdpbjowIiBkYXRhLWJlej0ibmF2LmJlc2V0enVuZyI+UHLDvGZ1bmc8L2gyPgog -ICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigt -LXRleHQtbXV0ZWQpO21hcmdpbi10b3A6NHB4IiBpZD0iYmstdW50ZXJ0aXRlbCI+NC1Xb2NoZW4t -Vm9yc2NoYXUgYWIgaGV1dGUg4oCUIEFtcGVsOiDiiaQxIEZrID0gcm90LCA9MiBGayA9IGdlbGIs -IOKJpTMgRmsgPSBncsO8biBwcm8gU2NoaWNodDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+ -CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiay1rb3BmLXN0YXRzIj4KICAgICAgICAgICAg -ICAgICAgICA8ZGl2IGNsYXNzPSJiay1rcGkiIGlkPSJiay1rcGktZ2VzYW10Ij48ZGl2IGNsYXNz -PSJiay1rcGktemFobCI+4oCTPC9kaXY+PGRpdiBjbGFzcz0iYmsta3BpLWxhYmVsIj5UYWdlIGlt -IEZlbnN0ZXI8L2Rpdj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiay1r -cGkgYmsta3BpLXdhcm4iIGlkPSJiay1rcGktZGVmaXppdCI+PGRpdiBjbGFzcz0iYmsta3BpLXph -aGwiPuKAkzwvZGl2PjxkaXYgY2xhc3M9ImJrLWtwaS1sYWJlbCI+cm90ICjiiaQxKTwvZGl2Pjwv -ZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJrLWtwaSBiay1rcGktb2siIGlk -PSJiay1rcGktb2siPjxkaXYgY2xhc3M9ImJrLWtwaS16YWhsIj7igJM8L2Rpdj48ZGl2IGNsYXNz -PSJiay1rcGktbGFiZWwiPmdyw7xuICjiiaUzKTwvZGl2PjwvZGl2PgogICAgICAgICAgICAgICAg -PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJiay1iZWdydWVz -c3VuZyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJrLWluaGFsdCIgaWQ9ImJrLWlu -aGFsdCI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGln -bjpjZW50ZXI7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCkiPldpcmQgZ2VsYWRlbiDigKY8L2Rpdj4K -ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tID09 -PT09PT09PT0gQU5TSUNIVDogQURNSU5JU1RSQVRJT04gPT09PT09PT09PSAtLT4KICAgIDxkaXYg -aWQ9ImFuc2ljaHQtYWRtaW4iIGNsYXNzPSJhbnNpY2h0IHZlcnN0ZWNrdCI+CiAgICAgICAgPGRp -diBjbGFzcz0iYWRtaW4tbGF5b3V0Ij4KICAgICAgICAgICAgPCEtLSBBZG1pbi1TaWRlYmFyOiBD -bHVzdGVyIG1pdCBVZWJlcnNjaHJpZnRlbiAodHlwb2dyYWZpc2NoIGdydXBwaWVydCwgb2huZSBJ -Y29ucykuCiAgICAgICAgICAgICAgICAgR3J1cHBlbiBmb2xnZW4gbWVudGFsZW4gS2F0ZWdvcmll -bjogIldlciBhcmJlaXRldCBoaWVyPyIgKFBlcnNvbmVuKQogICAgICAgICAgICAgICAgIC0+ICJX -aWUgaXN0IGVzIG9yZ2FuaXNpZXJ0PyIgKE9yZ2FuaXNhdGlvbikgLT4gSW5oYWx0ZSAoU2NoaWNo -dGVuLAogICAgICAgICAgICAgICAgIEthbGVuZGVyKSAtPiBLb21tdW5pa2F0aW9uIC0+IFNpY2hl -cmhlaXQgKFJlY2h0ZSkgLT4gRGFyc3RlbGx1bmcgLT4gU3lzdGVtLgogICAgICAgICAgICAgICAg -IGRhdGEtYWRtaW4tdGFiLVdlcnRlIHVuZCBUYWItSURzIGJsZWliZW4gdW52ZXJhZW5kZXJ0IOKA -lCBudXIgR3J1cHBpZXJ1bmcKICAgICAgICAgICAgICAgICB1bmQgUmVpaGVuZm9sZ2Ugd3VyZGVu -IGltIFBoYXNlLTMtUmVkZXNpZ24gbmV1IHNvcnRpZXJ0LiAtLT4KICAgICAgICAgICAgPGFzaWRl -IGNsYXNzPSJhZG1pbi1zaWRlYmFyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWlu -LW5hdi1ncnVwcGUiPgogICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iYWRtaW4tbmF2LXRp -dGVsIj5QZXJzb25lbjwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWRt -aW4tbmF2LWJ0biBha3RpdiIgZGF0YS1hZG1pbi10YWI9InBlcnNvbmFsIj5QZXJzb25hbHZlcndh -bHR1bmc8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhZG1pbi1u -YXYtYnRuIiBkYXRhLWFkbWluLXRhYj0ibGlzdGVuIiBpZD0ibmF2LWxpc3RlbiI+RGllbnN0Z3Jh -ZGUgJmFtcDsgRnVua3Rpb25lbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAg -ICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tbmF2LWdydXBwZSI+CiAgICAgICAgICAgICAg -ICAgICAgPGgzIGNsYXNzPSJhZG1pbi1uYXYtdGl0ZWwiPk9yZ2FuaXNhdGlvbjwvaDM+CiAgICAg +PSJ0b29sdGlwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CgogICAgPCEtLSBIaW53ZWlzLUJh +bm5lciAoc2VpdCB2MS40LjUpIGVudGZlcm50OiBsYWcgaW0gRmxvdyB1ZWJlciBkZW0gSGVhZGVy +IHVuZAogICAgICAgICB2ZXJzY2hvYiBkaWUgSG9laGVucmVjaG51bmcgZGVzIFBsYW51bmdzLUdy +aWRzICh1bnRlcnN0ZSBaZWlsZSBuaWNodCBtZWhyCiAgICAgICAgIGVycmVpY2hiYXIpLiBFcnNh +dHo6IEF1dG8tTW9kYWwgYmVpbSBMb2dpbiArIFphZWhsZXItQmFkZ2UgYW0gTmFtZW4KICAgICAg +ICAgKHNpZWhlIGpzL2hpbndlaXNlLmpzKS4gLS0+CgogICAgPCEtLSA9PT09PT09PT09IEhlYWRl +ciBtaXQgTmF2aWdhdGlvbiA9PT09PT09PT09IC0tPgogICAgPGhlYWRlciBpZD0ia29wZmxlaXN0 +ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWxpbmtzIj4KICAgICAgICAgICAgPGgxPjxp +bWcgc3JjPSJpY29ucy9WSTNfUGxhbnVuZ19Mb2dvLnBuZyIgYWx0PSIiIGNsYXNzPSJoZWFkZXIt +bG9nbyI+PHNwYW4gZGF0YS1iZXo9ImFwcC50aXRlbCI+VkkzIERHTC1QbGFudW5nPC9zcGFuPiA8 +c3BhbiBpZD0iYW56ZWlnZS1qYWhyIiBjbGFzcz0iaGVhZGVyLWphaHIiPjwvc3Bhbj48L2gxPgog +ICAgICAgIDwvZGl2PgogICAgICAgIDxuYXYgY2xhc3M9ImhlYWRlci1uYXYiPgogICAgICAgICAg +ICA8YnV0dG9uIGNsYXNzPSJuYXYtYnRuIGFrdGl2IiBkYXRhLWFuc2ljaHQ9InBsYW51bmciIGRh +dGEtYmV6PSJuYXYucGxhbnVuZyI+UGxhbnVuZzwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9u +IGNsYXNzPSJuYXYtYnRuIiBkYXRhLWFuc2ljaHQ9IndvY2hlbnBsYW4iIGRhdGEtYmV6PSJuYXYu +d29jaGVucGxhbiI+V29jaGVucGxhbjwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNz +PSJuYXYtYnRuIiBkYXRhLWFuc2ljaHQ9InBlcnNwbGFuIiBkYXRhLWJlej0ibmF2LnBlcnNwbGFu +Ij5QZXJzLiBQbGFuPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idG4i +IGRhdGEtYW5zaWNodD0iYmVzZXR6dW5nIiBpZD0ibmF2LWJlc2V0enVuZyIgdGl0bGU9IlByw7xm +dW5nIOKAlCA0IFdvY2hlbi1Wb3JzY2hhdSIgZGF0YS1iZXo9Im5hdi5iZXNldHp1bmciIHN0eWxl +PSJkaXNwbGF5Om5vbmUiPlByw7xmdW5nPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xh +c3M9Im5hdi1idG4iIGRhdGEtYW5zaWNodD0iYWRtaW4iICAgIGlkPSJuYXYtYWRtaW4iIHN0eWxl +PSJkaXNwbGF5Om5vbmUiPkFkbWluaXN0cmF0aW9uPC9idXR0b24+CiAgICAgICAgPC9uYXY+CiAg +ICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLXJlY2h0cyI+CiAgICAgICAgICAgIDxidXR0b24gaWQ9 +ImJ0bi1idWdyZXBvcnQiIGNsYXNzPSJpY29uLWJ0biBidWdyZXBvcnQtYnRuIiB0aXRsZT0iQnVn +IG9kZXIgUHJvYmxlbSBtZWxkZW4iPkJ1Z1JlcG9ydDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0 +dG9uIGlkPSJidG4taW5mbyIgY2xhc3M9Imljb24tYnRuIiB0aXRsZT0iSW5mb3JtYXRpb25lbiAm +YW1wOyBIaWxmZSI+SW5mbzwvYnV0dG9uPgogICAgICAgICAgICA8c3BhbiBpZD0iYmVudXR6ZXIt +d3JhcCIgY2xhc3M9ImJlbnV0emVyLXdyYXAiPgogICAgICAgICAgICAgICAgPHNwYW4gaWQ9Im1l +aW4tYXZhdGFyLWJ0biIgY2xhc3M9Im1laW4tYXZhdGFyLWJ0biB2ZXJzdGVja3QiIHJvbGU9ImJ1 +dHRvbiIgdGFiaW5kZXg9IjAiIHRpdGxlPSJNZWluIFByb2ZpbGJpbGQgYmVhcmJlaXRlbiIgYXJp +YS1sYWJlbD0iTWVpbiBQcm9maWxiaWxkIGJlYXJiZWl0ZW4iPjwvc3Bhbj4KICAgICAgICAgICAg +ICAgIDxzcGFuIGlkPSJiZW51dHplci1hbnplaWdlIiBjbGFzcz0iYmVudXR6ZXItYmFkZ2UiPjwv +c3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJoaW53ZWlzLWJhZGdlIiBjbGFzcz0iaGlu +d2Vpcy1iYWRnZSB2ZXJzdGVja3QiIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiIGFyaWEtbGFi +ZWw9Ik9mZmVuZSBIaW53ZWlzZSBhbnplaWdlbiI+PC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+ +CiAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi10aGVtZSIgY2xhc3M9Imljb24tYnRuIiB0aXRs +ZT0iVGFnL05hY2h0IHVtc2NoYWx0ZW4iPk5hY2h0PC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAg +ICA8L2hlYWRlcj4KCiAgICA8IS0tID09PT09PT09PT0gQU5TSUNIVDogUExBTlVORyA9PT09PT09 +PT09IC0tPgogICAgPGRpdiBpZD0iYW5zaWNodC1wbGFudW5nIiBjbGFzcz0iYW5zaWNodCI+CiAg +ICAgICAgPCEtLSBQbGFudW5nc2dyaWQg4oCUIEV4Y2VsLXRyZXVlcyBMYXlvdXQgLS0+CiAgICAg +ICAgPGRpdiBpZD0icGxhbnVuZy1jb250YWluZXIiPgogICAgICAgICAgICA8IS0tIEZpeGllcnRl +IGxpbmtlIFNwYWx0ZSAtLT4KICAgICAgICAgICAgPGRpdiBpZD0ibmFtZW4tc3BhbHRlIj4KICAg +ICAgICAgICAgICAgIDwhLS0gS29wZmJlcmVpY2ggbGlua3M6IEhldXRlLUJhbm5lciB1ZWJlcmxh +Z2VydCBkaWUgZHJlaSBEYXR1bXN6ZWlsZW4gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJr +b3BmLWxpbmtzIj4KICAgICAgICAgICAgICAgICAgICA8IS0tIFBsYXR6aGFsdGVyLVplaWxlbiBm +dWVyIEhvZWhlbi1TeW5jIG1pdCBLb3BmIHJlY2h0cy4KICAgICAgICAgICAgICAgICAgICAgICAg +IEplZGUgWmVpbGUgbGlua3MgZW50c3ByaWNodCBFWEFLVCBlaW5lciBaZWlsZSByZWNodHMKICAg +ICAgICAgICAgICAgICAgICAgICAgIChnbGVpY2hlIEhvZWhlISksIHNvbnN0IHZlcnNjaGllYnQg +c2ljaCBkaWUgTmFtZW5zc3BhbHRlCiAgICAgICAgICAgICAgICAgICAgICAgICBnZWdlbnVlYmVy +IGRlbSBEYXRlbi1HcmlkLiAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJrb3Bm +LXplaWxlIGt6LWRhdHVtIj48L2Rpdj4gICAgICAgICA8IS0tID0gI2RhdHVtLXplaWxlLXRhZyAo +MjBweCkgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ia29wZi16ZWlsZSBrei13 +b2NoZW50YWciPjwvZGl2PiAgICAgPCEtLSA9ICNkYXR1bS16ZWlsZS13b2NoZW50YWcgKDIwcHgp +IC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImtvcGYtemVpbGUga3otYW5sYXNz +Ij48L2Rpdj4gICAgICAgIDwhLS0gPSAjZGF0dW0temVpbGUtYW5sYXNzICgzOHB4LCBNYWkgMjAy +NiBtaXQgRXZlbnRzIGtvbWJpbmllcnQpIC0tPgogICAgICAgICAgICAgICAgICAgIDwhLS0gT3Zl +cmxheTogSGV1dGUtTGVpc3RlIChCdXR0b24gKyBEYXR1bSArIFdvY2hlbnRhZykgZGVja3QKICAg +ICAgICAgICAgICAgICAgICAgICAgIGRpZSBvYmVyZW4gUGxhdHpoYWx0ZXItWmVpbGVuIGFiIChr +ei1kYXR1bSt3b2NoZW50YWcrYW5sYXNzKS4gLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBp +ZD0ia2wtaGV1dGUtYmFubmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0i +YnRuLWhldXRlIiBjbGFzcz0ia2wtaGV1dGUtYnV0dG9uIiB0aXRsZT0iSGV1dGUg4oCUIHNwcmlu +Z3QgaW4gZGVyIFBsYW50YWZlbCBzb2ZvcnQgenVtIGhldXRpZ2VuIERhdHVtIHVuZCBzY3JvbGx0 +IGRpZSBBbnNpY2h0IGRvcnRoaW4uIFByYWt0aXNjaCwgdW0gbmFjaCBkZW0gQmzDpHR0ZXJuIGlu +IGFuZGVyZSBXb2NoZW4gb2RlciBNb25hdGUgc2NobmVsbCB6dXIgYWt0dWVsbGVuIFdvY2hlIHp1 +csO8Y2t6dWtlaHJlbi4iPkhldXRlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxi +dXR0b24gaWQ9ImJ0bi1zY2hpY2h0dGVhbSIgY2xhc3M9ImtsLWhldXRlLWJ1dHRvbiIgdGl0bGU9 +IlRlYW0g4oCUIE1laW4gU2NoaWNodC1UZWFtIGbDvHIgZGllIG7DpGNoc3RlbiAxNCBUYWdlOiB6 +ZWlndCBhbGxlIFBlcnNvbmVuIGF1cyBkZWluZXIgU2NoaWNodC1Sb3RhdGlvbiAoYmFzaWVyZW5k +IGF1ZiBkZWluZXIgaGV1dGlnZW4gU2NoaWNodCBGcsO8aC9TcMOkdC9OYWNodCkuIFByYWt0aXNj +aCBmw7xyIFNjaGljaHR0YXVzY2gtQW5mcmFnZW4gdW5kIHVtIHp1IHNlaGVuLCB3ZXIgd2FubiBt +aXQgZGlyIGFyYmVpdGV0LiBOdXIgc2ljaHRiYXIsIHdlbm4gZGVpbmUgTlctS2VubnVuZyBlaW5l +ciBQbGFuLVBlcnNvbiB6dWdlb3JkbmV0IGlzdC4iIGFyaWEtbGFiZWw9Ik1laW4gU2NoaWNodC1U +ZWFtIOKAlCAxNC1UYWdlLcOcYmVyc2ljaHQiPlRlYW08L2J1dHRvbj4KICAgICAgICAgICAgICAg +ICAgICAgICAgPGRpdiBjbGFzcz0ia2wtaGV1dGUtaW5mbyI+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8ZGl2IGNsYXNzPSJrbC1oZXV0ZS1kYXR1bS10eHQiIGlkPSJrbC1oZXV0ZS1kYXR1 +bSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJrbC1oZXV0 +ZS13dGFnLXR4dCIgaWQ9ImtsLWhldXRlLXd0YWciPjwvZGl2PgogICAgICAgICAgICAgICAgICAg +ICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAg +ICA8IS0tIFplaWxlIDU6IFN0w6Rya2UgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFz +cz0ia29wZi16ZWlsZSBrei1zdGFlcmtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4g +Y2xhc3M9ImtsLWxhYmVsIj5TdMOkcmtlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8 +c3BhbiBjbGFzcz0ia2wtd2VydCI+REdMIGluIFZJIDM8L3NwYW4+CiAgICAgICAgICAgICAgICAg +ICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBaZWlsZW4gNS0xMTogU2NoaWNodGZv +bGdlIHBybyBTdGFuZG9ydCAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzY2hpY2h0 +Zm9sZ2UtbGlua3MiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJrb3BmLXpl +aWxlIGt6LXNjaGljaHRmb2xnZSBrei1zZi1lcnN0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICA8c3BhbiBjbGFzcz0ia2wtbGFiZWwiPlNjaGljaHQ8L3NwYW4+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2wtd2VydCIgZGF0YS1zdGFuZG9ydD0iMCI+PC9z +cGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8 +L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPCEtLSBQZXJzb25l +bmxpc3RlIC0tPgogICAgICAgICAgICAgICAgPGRpdiBpZD0ibmFtZW4tbGlzdGUiIHJvbGU9InJv +d2hlYWRlciIgYXJpYS1sYWJlbD0iUGVyc29uZW5saXN0ZSBkZXIgUGxhbnRhZmVsIj48L2Rpdj4K +ICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFNjcm9sbGJhcmVyIHJlY2h0ZXIg +QmVyZWljaC4gcm9sZT1ncmlkIG1hY2h0IGRpZSBTdHJ1a3R1ciBmdWVyCiAgICAgICAgICAgICAg +ICAgU2NyZWVucmVhZGVyIGV4cGxpeml0IChTcHJpbnQgNmEgMjAyNi0wNS0yOSkuIFRhYi1OYXZp +Z2F0aW9uCiAgICAgICAgICAgICAgICAgZGVyIGVpbnplbG5lbiBaZWxsZW4ga29tbXQgaW4gU3By +aW50IDZiIChHcmlkLVJlZmFjdG9yKS4gLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9ImdyaWQtc2Ny +b2xsLWNvbnRhaW5lciIgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbD0iRGllbnN0cGxhbi1UYWZlbCI+ +CiAgICAgICAgICAgICAgICA8IS0tIEtvcGZiZXJlaWNoIHJlY2h0cyAtLT4KICAgICAgICAgICAg +ICAgIDxkaXYgaWQ9ImtvcGYtcmVjaHRzIiByb2xlPSJyb3dncm91cCI+CiAgICAgICAgICAgICAg +ICAgICAgPCEtLSBaZWlsZSAxOiBEYXR1bSAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlk +PSJkYXR1bS16ZWlsZS10YWciIGNsYXNzPSJrb3BmLWRhdGVuLXplaWxlIiByb2xlPSJyb3ciIGFy +aWEtbGFiZWw9IlRhZ2VzZGF0dW0iPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwhLS0gWmVp +bGUgMjogV29jaGVudGFnIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImRhdHVtLXpl +aWxlLXdvY2hlbnRhZyIgY2xhc3M9ImtvcGYtZGF0ZW4temVpbGUiIHJvbGU9InJvdyIgYXJpYS1s +YWJlbD0iV29jaGVudGFnIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8IS0tIFplaWxlIDM6 +IEljb25zICYgQW5sw6Rzc2UgKEZlaWVydGFnL1NvbmRlcnRlcm1pbi9HZWJ1cnRzdGFnIGluIGVp +bmVyCiAgICAgICAgICAgICAgICAgICAgICAgICBrb21wYWt0ZW4gWmVpbGUsIGRhenUgZGllIEZl +cmllbi1SYW5nZS1CYXIgYWxzIE92ZXJsYXkpIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYg +aWQ9ImRhdHVtLXplaWxlLWFubGFzcyIgY2xhc3M9ImtvcGYtZGF0ZW4temVpbGUiIHJvbGU9InJv +dyIgYXJpYS1sYWJlbD0iQW5sw6Rzc2UiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwhLS0g +WmVpbGUgNTogU3TDpHJrZSBGfFN8TiAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJz +dGFlcmtlLXplaWxlIiBjbGFzcz0ia29wZi1kYXRlbi16ZWlsZSIgcm9sZT0icm93IiBhcmlhLWxh +YmVsPSJTY2hpY2h0c3TDpHJrZSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBaZWls +ZW4gNSs6IFNjaGljaHRmb2xnZSBwcm8gU3RhbmRvcnQgLS0+CiAgICAgICAgICAgICAgICAgICAg +PGRpdiBpZD0ic2NoaWNodGZvbGdlLXJlY2h0cyIgcm9sZT0icm93Z3JvdXAiIGFyaWEtbGFiZWw9 +IlNjaGljaHRmb2xnZSBwcm8gU3RhbmRvcnQiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+ +CiAgICAgICAgICAgICAgICA8IS0tIERhdGVuLUdyaWQgLS0+CiAgICAgICAgICAgICAgICA8ZGl2 +IGlkPSJncmlkLWRhdGVuIiByb2xlPSJyb3dncm91cCIgYXJpYS1sYWJlbD0iU2NoaWNodGVuIGRl +ciBQZXJzb25lbiI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAg +ICAgICA8IS0tIFplbGxlbi1FZGl0b3IgLS0+CiAgICAgICAgPGRpdiBpZD0iemVsbC1lZGl0b3Ii +IGNsYXNzPSJ2ZXJzdGVja3QiPgogICAgICAgICAgICA8c2VsZWN0IGlkPSJlZGl0b3ItYXVzd2Fo +bCIgc2l6ZT0iMTAiPjwvc2VsZWN0PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3Ita29t +bWVudGFyIj4KICAgICAgICAgICAgICAgIDwhLS0gVmVybGF1ZnNsaXN0ZTogZ2VyZW5kZXJ0IHZv +biBlZGl0b3JLb21tZW50YXJWZXJsYXVmUmVuZGVybigpLgogICAgICAgICAgICAgICAgICAgICBQ +cm8gRWludHJhZzogVGV4dCwgTWV0YS1aZWlsZSAoVmVyZmFzc2VyICsgWmVpdCksIG9wdGlvbmFs +CiAgICAgICAgICAgICAgICAgICAgIExvZXNjaC1JY29uIGZ1ZXIgU3VwZXJVc2VyL0dlc2FtdHZl +cmFudHdvcnRsaWNoZS4gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJlZGl0b3Ita29tbWVu +dGFyLXZlcmxhdWYiIGNsYXNzPSJlZGl0b3Ita29tbWVudGFyLXZlcmxhdWYiPjwvZGl2PgogICAg +ICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJlZGl0b3Ita29tbWVudGFyLWlucHV0 +IiBjbGFzcz0iZm9ybS1pbnB1dCIgcGxhY2Vob2xkZXI9Ik5ldWVyIEtvbW1lbnRhci4uLiIgc3R5 +bGU9IndpZHRoOjEwMCU7Zm9udC1zaXplOjExcHg7cGFkZGluZzo0cHggNnB4Ij4KICAgICAgICAg +ICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1rb21tZW50YXItYnRucyI+CiAgICAgICAgICAgICAg +ICAgICAgPGJ1dHRvbiBpZD0iYnRuLWtvbW1lbnRhci1oaW56dSIgY2xhc3M9ImJ0biBidG4tcHJp +bWFlciBidG4ta2xlaW4iPkhpbnp1ZsO8Z2VuPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rp +dj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0t +ID09PT09PT09PT0gQU5TSUNIVDogV09DSEVOUExBTiA9PT09PT09PT09IC0tPgogICAgPGRpdiBp +ZD0iYW5zaWNodC13b2NoZW5wbGFuIiBjbGFzcz0iYW5zaWNodCB2ZXJzdGVja3QiPgogICAgICAg +IDxkaXYgY2xhc3M9IndwLWxheW91dCI+CiAgICAgICAgICAgIDwhLS0gVG9vbGJhciAtLT4KICAg +ICAgICAgICAgPGRpdiBjbGFzcz0id3AtdG9vbGJhciI+CiAgICAgICAgICAgICAgICA8YnV0dG9u +IGlkPSJ3cC12b3J3b2NoZSIgY2xhc3M9InRvb2xiYXItYnRuIj4mbGFycjsgVm9yd29jaGU8L2J1 +dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IndwLWFrdHVlbGxlLXdvY2hlIiBjbGFz +cz0idG9vbGJhci1idG4iPkFrdHVlbGxlIFdvY2hlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8 +YnV0dG9uIGlkPSJ3cC1uYWVjaHN0ZS13b2NoZSIgY2xhc3M9InRvb2xiYXItYnRuIj5Ow6RjaHN0 +ZSBXb2NoZSAmcmFycjs8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xi +YXItdHJlbm5lciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBpZD0id3AtemVpdHJhdW0i +IGNsYXNzPSJ3cC16ZWl0cmF1bS1hbnplaWdlIj48L3NwYW4+CiAgICAgICAgICAgICAgICA8YnV0 +dG9uIGlkPSJ3cC1kcnVja2VuIiBjbGFzcz0idG9vbGJhci1idG4iIHN0eWxlPSJtYXJnaW4tbGVm +dDphdXRvIiB0aXRsZT0iV29jaGVucGxhbiBkcnVja2VuIChlaW5lIFNlaXRlKSI+RHJ1Y2tlbjwv +YnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPCEtLSBXb2NoZW5wbGFuLVJl +bmRlci1aaWVsOiB3b2NoZW5wbGFuLmpzIGVyc2V0enQgZGVuIEluaGFsdCB2b24KICAgICAgICAg +ICAgICAgICAud3Atc2Nyb2xsIGJlaSBqZWRlbSBSZW5kZXIgZHVyY2ggLndwLXNlaXRlIChUYWdi +bG9jay1MYXlvdXQpLgogICAgICAgICAgICAgICAgIEZydWVoZXIgc3RhbmQgaGllciBlaW5lIHN0 +YXRpc2NoZSA8dGFibGU+LCBkaWUgc29mb3J0CiAgICAgICAgICAgICAgICAgdWViZXJzY2hyaWVi +ZW4gd3VyZGUg4oCUIGVudGZlcm50IChBdWRpdCAyMDI2LTA2LTE1KS4gLS0+CiAgICAgICAgICAg +IDxkaXYgY2xhc3M9IndwLXNjcm9sbCI+PC9kaXY+CiAgICAgICAgICAgIDwhLS0gTGVnZW5kZSAt +LT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0id3AtbGVnZW5kZSI+CiAgICAgICAgICAgICAgICA8 +c3BhbiBjbGFzcz0id3AtbGVnLWl0ZW0iPjxzcGFuIGNsYXNzPSJ3cC1sZWctZG90IiBzdHlsZT0i +YmFja2dyb3VuZDp2YXIoLS1mYXJiZS1mcnVlaCkiPjwvc3Bhbj4gRnLDvGhkaWVuc3Q8L3NwYW4+ +CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0id3AtbGVnLWl0ZW0iPjxzcGFuIGNsYXNzPSJ3 +cC1sZWctZG90IiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1mYXJiZS1zcGFldCkiPjwvc3Bhbj4g +U3DDpHRkaWVuc3Q8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0id3AtbGVnLWl0 +ZW0iPjxzcGFuIGNsYXNzPSJ3cC1sZWctZG90IiBzdHlsZT0iYmFja2dyb3VuZDp2YXIoLS1mYXJi +ZS1uYWNodCkiPjwvc3Bhbj4gTmFjaHRkaWVuc3Q8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2Pgog +ICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSA9PT09PT09PT09IEFOU0lDSFQ6IFBF +UlPDlk5MSUNIRVIgUExBTiA9PT09PT09PT09IC0tPgogICAgPGRpdiBpZD0iYW5zaWNodC1wZXJz +cGxhbiIgY2xhc3M9ImFuc2ljaHQgdmVyc3RlY2t0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJwcC1s +YXlvdXQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcC10b29sYmFyIj4KICAgICAgICAgICAg +ICAgIDxsYWJlbCBmb3I9InBwLXBlcnNvbi1hdXN3YWhsIiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAw +O21hcmdpbi1yaWdodDo2cHgiPlBlcnNvbjo8L2xhYmVsPgogICAgICAgICAgICAgICAgPHNlbGVj +dCBpZD0icHAtcGVyc29uLWF1c3dhaGwiIGNsYXNzPSJmb3JtLWlucHV0IiBzdHlsZT0id2lkdGg6 +MjUwcHgiPjwvc2VsZWN0PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci10cmVu +bmVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9InBwLWRydWNrZW4iIGNsYXNz +PSJ0b29sYmFyLWJ0biI+RHJ1Y2tlbjwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAg +ICAgICAgPGRpdiBjbGFzcz0icHAtc2Nyb2xsIiBpZD0icHAtc2Nyb2xsIj4KICAgICAgICAgICAg +ICAgIDxkaXYgY2xhc3M9InBwLXRpdGVsIiBpZD0icHAtdGl0ZWwiPjwvZGl2PgogICAgICAgICAg +ICAgICAgPGRpdiBjbGFzcz0icHAtbW9uYXRlIiBpZD0icHAtbW9uYXRlIj48L2Rpdj4KICAgICAg +ICAgICAgICAgIDwhLS0gWnVzYW1tZW5mYXNzdW5nIC0tPgogICAgICAgICAgICAgICAgPGRpdiBj +bGFzcz0icHAtc3VtbWFyeSIgaWQ9InBwLXN1bW1hcnkiPjwvZGl2PgogICAgICAgICAgICA8L2Rp +dj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gPT09PT09PT09PSBBTlNJQ0hU +OiBCRVNFVFpVTkdTS09OVFJPTExFID09PT09PT09PT0gLS0+CiAgICA8ZGl2IGlkPSJhbnNpY2h0 +LWJlc2V0enVuZyIgY2xhc3M9ImFuc2ljaHQgdmVyc3RlY2t0Ij4KICAgICAgICA8ZGl2IGNsYXNz +PSJiay1sYXlvdXQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJiay1rb3BmIj4KICAgICAgICAg +ICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyIHN0eWxlPSJtYXJnaW46MCIgZGF0 +YS1iZXo9Im5hdi5iZXNldHp1bmciPlByw7xmdW5nPC9oMj4KICAgICAgICAgICAgICAgICAgICA8 +ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4t +dG9wOjRweCIgaWQ9ImJrLXVudGVydGl0ZWwiPjQtV29jaGVuLVZvcnNjaGF1IGFiIGhldXRlIOKA +lCBBbXBlbDog4omkMSBGayA9IHJvdCwgPTIgRmsgPSBnZWxiLCDiiaUzIEZrID0gZ3LDvG4gcHJv +IFNjaGljaHQ8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRp +diBjbGFzcz0iYmsta29wZi1zdGF0cyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i +Ymsta3BpIiBpZD0iYmsta3BpLWdlc2FtdCI+PGRpdiBjbGFzcz0iYmsta3BpLXphaGwiPuKAkzwv +ZGl2PjxkaXYgY2xhc3M9ImJrLWtwaS1sYWJlbCI+VGFnZSBpbSBGZW5zdGVyPC9kaXY+PC9kaXY+ +CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmsta3BpIGJrLWtwaS13YXJuIiBpZD0i +Ymsta3BpLWRlZml6aXQiPjxkaXYgY2xhc3M9ImJrLWtwaS16YWhsIj7igJM8L2Rpdj48ZGl2IGNs +YXNzPSJiay1rcGktbGFiZWwiPnJvdCAo4omkMSk8L2Rpdj48L2Rpdj4KICAgICAgICAgICAgICAg +ICAgICA8ZGl2IGNsYXNzPSJiay1rcGkgYmsta3BpLW9rIiBpZD0iYmsta3BpLW9rIj48ZGl2IGNs +YXNzPSJiay1rcGktemFobCI+4oCTPC9kaXY+PGRpdiBjbGFzcz0iYmsta3BpLWxhYmVsIj5ncsO8 +biAo4omlMyk8L2Rpdj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8 +L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0iYmstYmVncnVlc3N1bmciPjwvZGl2PgogICAgICAg +ICAgICA8ZGl2IGNsYXNzPSJiay1pbmhhbHQiIGlkPSJiay1pbmhhbHQiPgogICAgICAgICAgICAg +ICAgPGRpdiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigt +LXRleHQtbXV0ZWQpIj5XaXJkIGdlbGFkZW4g4oCmPC9kaXY+CiAgICAgICAgICAgIDwvZGl2Pgog +ICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSA9PT09PT09PT09IEFOU0lDSFQ6IEFE +TUlOSVNUUkFUSU9OID09PT09PT09PT0gLS0+CiAgICA8ZGl2IGlkPSJhbnNpY2h0LWFkbWluIiBj +bGFzcz0iYW5zaWNodCB2ZXJzdGVja3QiPgogICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWxheW91 +dCI+CiAgICAgICAgICAgIDwhLS0gQWRtaW4tU2lkZWJhcjogQ2x1c3RlciBtaXQgVWViZXJzY2hy +aWZ0ZW4gKHR5cG9ncmFmaXNjaCBncnVwcGllcnQsIG9obmUgSWNvbnMpLgogICAgICAgICAgICAg +ICAgIEdydXBwZW4gZm9sZ2VuIG1lbnRhbGVuIEthdGVnb3JpZW46ICJXZXIgYXJiZWl0ZXQgaGll +cj8iIChQZXJzb25lbikKICAgICAgICAgICAgICAgICAtPiAiV2llIGlzdCBlcyBvcmdhbmlzaWVy +dD8iIChPcmdhbmlzYXRpb24pIC0+IEluaGFsdGUgKFNjaGljaHRlbiwKICAgICAgICAgICAgICAg +ICBLYWxlbmRlcikgLT4gS29tbXVuaWthdGlvbiAtPiBTaWNoZXJoZWl0IChSZWNodGUpIC0+IERh +cnN0ZWxsdW5nIC0+IFN5c3RlbS4KICAgICAgICAgICAgICAgICBkYXRhLWFkbWluLXRhYi1XZXJ0 +ZSB1bmQgVGFiLUlEcyBibGVpYmVuIHVudmVyYWVuZGVydCDigJQgbnVyIEdydXBwaWVydW5nCiAg +ICAgICAgICAgICAgICAgdW5kIFJlaWhlbmZvbGdlIHd1cmRlbiBpbSBQaGFzZS0zLVJlZGVzaWdu +IG5ldSBzb3J0aWVydC4gLS0+CiAgICAgICAgICAgIDxhc2lkZSBjbGFzcz0iYWRtaW4tc2lkZWJh +ciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1uYXYtZ3J1cHBlIj4KICAgICAg +ICAgICAgICAgICAgICA8aDMgY2xhc3M9ImFkbWluLW5hdi10aXRlbCI+UGVyc29uZW48L2gzPgog +ICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4gYWt0aXYiIGRh +dGEtYWRtaW4tdGFiPSJwZXJzb25hbCI+UGVyc29uYWx2ZXJ3YWx0dW5nPC9idXR0b24+CiAgICAg ICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWRtaW4tbmF2LWJ0biIgZGF0YS1hZG1pbi10 -YWI9ImdydXBwZW4iPkRpZW5zdGdydXBwZW48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8 -YnV0dG9uIGNsYXNzPSJhZG1pbi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0ic3RhbmRvcnRlIj5T -dGFuZG9ydGUgJmFtcDsgU2NoaWNodGZvbGdlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAg -PGJ1dHRvbiBjbGFzcz0iYWRtaW4tbmF2LWJ0biIgZGF0YS1hZG1pbi10YWI9Im1pa3JvdGVhbXMi -Pk1pa3JvdGVhbXM8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAg -ICAgIDxkaXYgY2xhc3M9ImFkbWluLW5hdi1ncnVwcGUiPgogICAgICAgICAgICAgICAgICAgIDxo -MyBjbGFzcz0iYWRtaW4tbmF2LXRpdGVsIj5TY2hpY2h0LUthdGFsb2c8L2gzPgogICAgICAgICAg -ICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRhdGEtYWRtaW4tdGFiPSJz -Y2hpY2h0Y29kZXMiPlNjaGljaHRjb2RlcyAmYW1wOyBGYXJiZW48L2J1dHRvbj4KICAgICAgICAg -ICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLW5hdi1ncnVw -cGUiPgogICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iYWRtaW4tbmF2LXRpdGVsIj5LYWxl -bmRlcjwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWRtaW4tbmF2LWJ0 -biIgZGF0YS1hZG1pbi10YWI9ImZlaWVydGFnZSI+RmVpZXJ0YWdlICZhbXA7IEZlcmllbjwvYnV0 -dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRh -dGEtYWRtaW4tdGFiPSJzb25kZXJ0ZXJtaW5lIj5Tb25kZXJ0ZXJtaW5lPC9idXR0b24+CiAgICAg -ICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1uYXYt -Z3J1cHBlIj4KICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImFkbWluLW5hdi10aXRlbCI+ -S29tbXVuaWthdGlvbjwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWRt -aW4tbmF2LWJ0biIgZGF0YS1hZG1pbi10YWI9ImVtYWlsdm9ybGFnZW4iIGlkPSJuYXYtZW1haWx2 -b3JsYWdlbiI+RS1NYWlsLVZvcmxhZ2VuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1 -dHRvbiBjbGFzcz0iYWRtaW4tbmF2LWJ0biIgZGF0YS1hZG1pbi10YWI9Im1pdHRlaWx1bmdlbiIg -aWQ9Im5hdi1taXR0ZWlsdW5nZW4iPk1pdHRlaWx1bmdlbjwvYnV0dG9uPgogICAgICAgICAgICAg -ICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRhdGEtYWRtaW4tdGFiPSJiZXpl -aWNobnVuZ2VuIiBpZD0ibmF2LWJlemVpY2hudW5nZW4iPkJlc2NocmlmdHVuZ2VuICZhbXA7IEhp -bGZldGV4dGU8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAg -IDxkaXYgY2xhc3M9ImFkbWluLW5hdi1ncnVwcGUiPgogICAgICAgICAgICAgICAgICAgIDxoMyBj -bGFzcz0iYWRtaW4tbmF2LXRpdGVsIj5SZWNodGUgJmFtcDsgUm9sbGVuPC9oMz4KICAgICAgICAg -ICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhZG1pbi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0i -c3VwZXJ1c2VyIiBpZD0ibmF2LXN1cGVydXNlciI+UmVjaHRlICZhbXA7IFNpY2h0YmFya2VpdDwv -YnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4i -IGRhdGEtYWRtaW4tdGFiPSJzdGFuZGFyZHJlY2h0ZSIgaWQ9Im5hdi1zdGFuZGFyZHJlY2h0ZSI+ -U3RhbmRhcmRyZWNodGUgKFVzZXIpPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAg -ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1uYXYtZ3J1cHBlIj4KICAgICAgICAgICAg -ICAgICAgICA8aDMgY2xhc3M9ImFkbWluLW5hdi10aXRlbCI+RGFyc3RlbGx1bmc8L2gzPgogICAg -ICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRhdGEtYWRtaW4t -dGFiPSJlcnNjaGVpbnVuZ3NiaWxkIiBpZD0ibmF2LWVyc2NoZWludW5nc2JpbGQiPkVyc2NoZWlu -dW5nc2JpbGQ8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhZG1p -bi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0ic3RhdGlzdGlrLWxheW91dCIgaWQ9Im5hdi1zdGF0 -aXN0aWstbGF5b3V0Ij5TdGF0aXN0aWstTGF5b3V0PC9idXR0b24+CiAgICAgICAgICAgICAgICAg -ICAgPGJ1dHRvbiBjbGFzcz0iYWRtaW4tbmF2LWJ0biIgZGF0YS1hZG1pbi10YWI9InN0YXRpc3Rp -ay1idWlsZGVyIiBpZD0ibmF2LXN0YXRpc3Rpay1idWlsZGVyIj5TdGF0aXN0aWstQnVpbGRlcjwv -YnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFz -cz0iYWRtaW4tbmF2LWdydXBwZSI+CiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJhZG1p -bi1uYXYtdGl0ZWwiPlN5c3RlbTwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFz -cz0iYWRtaW4tbmF2LWJ0biIgZGF0YS1hZG1pbi10YWI9ImVpbnN0ZWxsdW5nZW4iPktvbmZpZ3Vy -YXRpb24gJmFtcDsgRnVua3Rpb25lbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0 -b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRhdGEtYWRtaW4tdGFiPSJiYWNrdXBzIj5CYWNrdXBz -PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWRtaW4tbmF2LWJ0 -biIgZGF0YS1hZG1pbi10YWI9ImhpbndlaXNlLXByb3Rva29sbCIgaWQ9Im5hdi1oaW53ZWlzZS1w -cm90b2tvbGwiPkhpbndlaXNlLVByb3Rva29sbDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAg -IDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRhdGEtYWRtaW4tdGFiPSJpbXBvcnQiIGlk -PSJuYXYtaW1wb3J0Ij5FeGNlbC1JbXBvcnQ8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8 -YnV0dG9uIGNsYXNzPSJhZG1pbi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0iZXhwb3J0IiBpZD0i -bmF2LWV4cG9ydCI+RXhjZWwtRXhwb3J0PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1 -dHRvbiBjbGFzcz0iYWRtaW4tbmF2LWJ0biIgZGF0YS1hZG1pbi10YWI9InRlc3RkYXRlbiI+VGVz -dGRhdGVuPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8 -ZGl2IGNsYXNzPSJhZG1pbi1uYXYtZ3J1cHBlIj4KICAgICAgICAgICAgICAgICAgICA8aDMgY2xh -c3M9ImFkbWluLW5hdi10aXRlbCI+QWt0dWFsaXNpZXJ1bmc8L2gzPgogICAgICAgICAgICAgICAg -ICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRhdGEtYWRtaW4tdGFiPSJ1cGRhdGUi -IGlkPSJuYXYtdXBkYXRlIj5VcGRhdGVzICZhbXA7IFNlbGJzdHRlc3Q8L2J1dHRvbj4KICAgICAg -ICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2FzaWRlPgoKICAgICAgICAgICAgPCEtLSBB -ZG1pbi1JbmhhbHQgLS0+CiAgICAgICAgICAgIDxtYWluIGNsYXNzPSJhZG1pbi1pbmhhbHQiPgoK -ICAgICAgICAgICAgICAgIDwhLS0gUmVhZC1vbmx5LUJhbm5lcjogZXJzY2hlaW50LCB3ZW5uIGRl -ciBlaW5nZWxvZ2d0ZSBCZW51dHplcgogICAgICAgICAgICAgICAgICAgICBkZW4gQWRtaW4tQmVy -ZWljaCBudXIgbGVzZW5kIHNlaGVuIGRhcmYgKGFsbGUgUm9sbGVuCiAgICAgICAgICAgICAgICAg -ICAgIGF1c3NlciBTdXBlclVzZXIpLiBXaXJkIHZvbiBhZG1pbkJhbm5lckFrdHVhbGlzaWVyZW4o -KQogICAgICAgICAgICAgICAgICAgICBpbiBhZG1pbi5qcyBlaW4tL2F1c2dlYmxlbmRldCB1bmQg -bWl0IFJvbGxlIGJlZnVlbGx0LiAtLT4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImFkbWluLXJl -YWRvbmx5LWJhbm5lciIgY2xhc3M9ImFkbWluLWJhbm5lciBhZG1pbi1iYW5uZXItaW5mbyB2ZXJz -dGVja3QiIHJvbGU9InN0YXR1cyIgYXJpYS1saXZlPSJwb2xpdGUiPgogICAgICAgICAgICAgICAg -ICAgIDxzcGFuIGNsYXNzPSJhZG1pbi1iYW5uZXItaWNvbiIgYXJpYS1oaWRkZW49InRydWUiPiYj -OTQzMjs8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tYmFubmVy -LXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1iYW5uZXIt -dGl0ZWwiPk51ci1MZXNlLU1vZHVzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYg -Y2xhc3M9ImFkbWluLWJhbm5lci1ib2R5IiBpZD0iYWRtaW4tcmVhZG9ubHktYmFubmVyLXRleHQi -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHUgc2llaHN0IGRpZXNlbiBCZXJlaWNoIG51 -ciBsZXNlbmQuICZBdW1sO25kZXJ1bmdlbiBzaW5kIGRlbSBTdXBlclVzZXIgdm9yYmVoYWx0ZW4u -CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2 -PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBEcmFmdC1SZXN0 -b3JlLUJhbm5lcjogZXJzY2hlaW50LCB3ZW5uIGJlaW0gVGFiLVdlY2hzZWwgZWluCiAgICAgICAg -ICAgICAgICAgICAgIHVuZ2VzaWNoZXJ0ZXIgQXV0by1TYXZlLURyYWZ0IGltIGxvY2FsU3RvcmFn -ZSBnZWZ1bmRlbiB3dXJkZQogICAgICAgICAgICAgICAgICAgICAoQnJvd3Nlci1DcmFzaCwgRjUt -UmVsb2FkLCB2ZXJzZWhlbnRsaWNoZXMgU2NobGllc3NlbikuCiAgICAgICAgICAgICAgICAgICAg -IGFkbWluRHJhZnRCYW5uZXJBbmJpZXRlbigpIGluIGFkbWluLmpzIGJlc3R1ZWNrdCBUZXh0ICsg -QnV0dG9ucy4gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJhZG1pbi1kcmFmdC1iYW5uZXIi -IGNsYXNzPSJhZG1pbi1iYW5uZXIgYWRtaW4tYmFubmVyLXdhcm4gdmVyc3RlY2t0IiByb2xlPSJz -dGF0dXMiIGFyaWEtbGl2ZT0icG9saXRlIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFz -cz0iYWRtaW4tYmFubmVyLWljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIj4mIzkyMDE7PC9zcGFuPgog -ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWJhbm5lci10ZXh0Ij4KICAgICAg -ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tYmFubmVyLXRpdGVsIj5Vbmdlc2lj -aGVydGUgJkF1bWw7bmRlcnVuZ2VuIHdpZWRlcmhlcnN0ZWxsZW4/PC9kaXY+CiAgICAgICAgICAg -ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWJhbm5lci1ib2R5IiBpZD0iYWRtaW4tZHJh -ZnQtYmFubmVyLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHUgaGFzdCBpbiBk -aWVzZW0gVGFiICZBdW1sO25kZXJ1bmdlbiwgZGllIG5vY2ggbmljaHQgZ2VzcGVpY2hlcnQgc2lu -ZC4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAg -IDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6OHB4O2Rpc3BsYXk6ZmxleDtnYXA6OHB4Ij4KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYWRtaW4tZHJh -ZnQtcmVzdG9yZSIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciBidG4ta2xlaW4iPldpZWRlcmhlcnN0 -ZWxsZW48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0i -YnV0dG9uIiBpZD0iYWRtaW4tZHJhZnQtdmVyd2VyZmVuIiBjbGFzcz0iYnRuIGJ0bi1zZWsgYnRu -LWtsZWluIj5WZXJ3ZXJmZW48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ -CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAg -ICAgICAgICAgICA8IS0tIFRhYjogUGVyc29uYWwgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNs -YXNzPSJhZG1pbi10YWIiIGlkPSJhZG1pbi10YWItcGVyc29uYWwiPgogICAgICAgICAgICAgICAg -ICAgIDxkaXYgY2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+ -UGVyc29uYWx2ZXJ3YWx0dW5nPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHls -ZT0iZGlzcGxheTpmbGV4O2dhcDoxMnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3Jh -cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6Zmxl -eDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtmb250LXNpemU6MTNweDtjdXJzb3I6cG9pbnRl -ciIgdGl0bGU9IlVtZ2VzZXR6dGUgaW4gZGllc2VyIFRhYmVsbGUgYW56ZWlnZW4iPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImFkbWlu -LXBlcnNvbmFsLWZpbHRlciI+IFVtZ2VzZXR6dGUgZWluYmxlbmRlbgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBz -dHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2ZvbnQtc2l6ZTox -M3B4O2N1cnNvcjpwb2ludGVyIiB0aXRsZT0iVW1nZXNldHp0ZSBhdWNoIGluIGRlciBQbGFudW5n -cy1BbnNpY2h0IGVpbmJsZW5kZW4gKG5pY2h0IGVkaXRpZXJiYXIsIG51ciB6dXIgUmVjaGVyY2hl -KSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94 -IiBpZD0iY2hrLXVtZ2VzZXR6dGUtZWluYmxlbmRlbiI+IEluIFBsYW51bmdzLUFuc2ljaHQgZWlu -YmxlbmRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDxsYWJlbCBpZD0icGFwaWVya29yYi1maWx0ZXItemVpbGUiIGNsYXNz -PSJ2ZXJzdGVja3QiIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2 -cHg7Zm9udC1zaXplOjEzcHg7Y3Vyc29yOnBvaW50ZXIiIHRpdGxlPSJTb2Z0LWdlbMO2c2NodGUg -UGVyc29uZW4gaW0gUGFwaWVya29yYiBhbnplaWdlbiAobnVyIGJlaSBha3RpdmVtIEZlYXR1cmUp -Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3gi -IGlkPSJhZG1pbi1wYXBpZXJrb3JiLWZpbHRlciI+IFBhcGllcmtvcmIgZWluYmxlbmRlbgogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDxidXR0b24gaWQ9ImJ0bi1tYW51ZWxsZS1zb3J0aWVydW5nIiBjbGFzcz0iYnRuIGJ0bi1z -ZWsiIHRpdGxlPSJGw7xocnVuZ3NrcsOkZnRlIChB4oCTQyB1bmQgV0QpIHBlciBEcmFnICZhbXA7 -IERyb3AgaW4gbmV1ZSBSZWloZW5mb2xnZSBicmluZ2VuIj5NYW51ZWxsZSBTb3J0aWVydW5nPC9i -dXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tcGVyc29u -LW5ldSIgY2xhc3M9ImJ0biBidG4tZXJmb2xnIj5OZXVlIFBlcnNvbjwvYnV0dG9uPgogICAgICAg -ICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAg -ICAgICAgICAgICAgICA8IS0tIE5ldWltcG9ydC1CbG9jazogZXJzY2hlaW50LCB3ZW5uIFBlcnNv -bmVuIG1pdCBpbXBvcnROZXVBbS1NYXJrZXIKICAgICAgICAgICAgICAgICAgICAgICAgIHZvcmhh -bmRlbiBzaW5kIChFeGNlbC1JbXBvcnQgIm5ldSBhbmxlZ2VuIikuIFVzZXIga2FubiBkaWUgUGVy -c29uZW4KICAgICAgICAgICAgICAgICAgICAgICAgIGhpZXIgZGlyZWt0IG5hY2hwZmxlZ2VuIHVu -ZCBlaW56ZWxuIGF1ZiAiRXJsZWRpZ3QiIHNldHplbi4KICAgICAgICAgICAgICAgICAgICAgICAg -IEJsb2NrIHZlcnNjaHdpbmRldCBhdXRvbWF0aXNjaCwgc29iYWxkIGFsbGUgTWFya2VyIHdlZyBz -aW5kLiAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJwZXJzb25hbC1uZXVpbXBvcnQt -YmxvY2siIGNsYXNzPSJ2ZXJzdGVja3QiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkZXRh -aWxzIGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5PSJwZXJzb25hbCIgb3Blbj4KICAg -ICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tY2hl -diI+4pa4PC9zcGFuPkhpbndlaXNlIHp1ciBQZXJzb25hbHZlcndhbHR1bmc8c3BhbiBjbGFzcz0i -YWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xhcHBlbjwvc3Bhbj48L3N1bW1hcnk+ -CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWluZm8tYm9keSI+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlp3ZWNrOjwvc3Ryb25nPiBaZW50 -cmFsZSBWZXJ3YWx0dW5nIGFsbGVyIE1pdGFyYmVpdGVyLCBkaWUgaW4gZGVyIERpZW5zdHBsYW51 -bmcgZXJzY2hlaW5lbi4gSmVkZSBQZXJzb24gYmVrb21tdCBTdGFtbWRhdGVuIChOYW1lLCBEaWVu -c3RncmFkLCBUZWxlZm9uLCBOVy1LZW5udW5nLCBEaWVuc3RncnVwcGUsIFN0YW5kb3J0KSBzb3dp -ZSBlaW5lbiBha3RpdmVuIG9kZXIgdW1nZXNldHp0ZW4gU3RhdHVzLjwvcD4KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+UmFuZ2ZvbGdlOjwvc3Ryb25nPiBEaWUgUmFuZy1T -cGFsdGUgemVpZ3QgZGVuIHJvaGVuIFBvc2l0aW9ucy1XZXJ0ICh6LkIuIDxjb2RlPjExMTwvY29k -ZT4g4oCUIMO8YmVybm9tbWVuIGF1cyBkZW0gRXhjZWwtSW1wb3J0KS4gWnVtIFVtc29ydGllcmVu -IG51dHplIGRlbiBCdXR0b24gPGVtPk1hbnVlbGxlIFNvcnRpZXJ1bmc8L2VtPiBvYmVuIOKAlCBk -b3J0IGvDtm5uZW4gRsO8aHJ1bmdza3LDpGZ0ZSAoQeKAk0MgdW5kIFdEKSBwZXIgRHJhZyAmYW1w -OyBEcm9wIG5ldSBhbmdlb3JkbmV0IHdlcmRlbi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8cD48c3Ryb25nPkRpZW5zdGdyYWQ6PC9zdHJvbmc+IE9wdGlvbmFsIOKAlCB6LiBCLiBQ -SEssIFBPSywgUEsuIFdpcmQgaW4gZGVyIE5hbWVuc3NwYWx0ZSBhbHMgUHLDpGZpeCB2b3IgZGVt -IE5hY2huYW1lbiBhbmdlemVpZ3QuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+ -PHN0cm9uZz5EaWVuc3RncnVwcGUgKEEvQi9DL1dEL1dMKTo8L3N0cm9uZz4gQmVzdGltbXQgZGll -IFJvdGF0aW9uIGFuIGRlbiBTdGFuZG9ydGVuLiBBL0IvQyByb3RpZXJlbiBpbiBBQkMtL0JDQS0v -Q0FCLVNjaGljaHRmb2xnZSBkdXJjaCBGcsO8aC9TcMOkdC9OYWNodC4gV0QgKFdhY2hkaWVuc3Qp -IHVuZCBXTCAoV2FjaGxlaXR1bmcpIHNpbmQgZmVzdGUgU29uZGVyZ3J1cHBlbiBvaG5lIFJvdGF0 -aW9uLiBLw7xyemVsIHVuZCBCZXplaWNobnVuZ2VuIGxhc3NlbiBzaWNoIGltIFRhYiA8Yj5EaWVu -c3RncnVwcGVuPC9iPiBhbnBhc3NlbiDigJQgVW1iZW5lbm51bmcga2Fza2FkaWVydCBhdXRvbWF0 -aXNjaCBhdWYgYWxsZSBQZXJzb25lbi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -cD48c3Ryb25nPk5XLUtlbm51bmc6PC9zdHJvbmc+IERpZSBOZXR6d2Vyay1LZW5udW5nICh6LkIu -IDxjb2RlPkRPTUFJTlxtYXgubXVzdGVybWFubjwvY29kZT4pIHdpcmQgYXV0b21hdGlzY2ggZGVt -IGFuZ2VtZWxkZXRlbiBXaW5kb3dzLUJlbnV0emVyIHp1Z2VvcmRuZXQuIE9obmUgS2VubnVuZyBl -cmtlbm50IGRhcyBTeXN0ZW0gZGllIFBlcnNvbiBuaWNodCDigJQgRnVua3Rpb25lbiB3aWUg4oCe -RnJlbWQtw4RuZGVydW5nIFdhcm51bmciIG9kZXIgcGVyc8O2bmxpY2hlciBQbGFuIGZ1bmt0aW9u -aWVyZW4gZGFubiBuaWNodC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ry -b25nPkUtTWFpbDo8L3N0cm9uZz4gT3B0aW9uYWwuIFdpcmQgdmVyd2VuZGV0LCB3ZW5uIGRpZSBC -ZW5hY2hyaWNodGlndW5nc2Z1bmt0aW9uIGFrdGl2aWVydCBpc3QgKFRhYiA8Yj5FaW5zdGVsbHVu -Z2VuPC9iPikuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5VbWdl -c2V0enQ6PC9zdHJvbmc+IFBlcnNvbmVuIG1pdCBTdGF0dXMg4oCeVW1nZXNldHp0IiB3ZXJkZW4g -YXVzIGRlciBsYXVmZW5kZW4gUGxhbnVuZyBlbnRmZXJudCwgaWhyZSBIaXN0b3JpZSBibGVpYnQg -YWJlciBlcmhhbHRlbiAoenVyIFJlY2hlcmNoZSkuIEVpbnRyw6RnZSBrw7ZubmVuIHdlaXRlcmhp -biBhbmdlemVpZ3Qgd2VyZGVuLCBzaW5kIGFiZXIgbmljaHQgbWVociBlZGl0aWVyYmFyLiBEaWUg -Q2hlY2tib3ggb2JlbiByZWNodHMgYmxlbmRldCBzaWUgYmVpIEJlZGFyZiBlaW4uPC9wPgogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5Mw7ZzY2hlbiB2cy4gVW1zZXR6ZW46 -PC9zdHJvbmc+IE51ciBhdXNuYWhtc3dlaXNlIGzDtnNjaGVuIOKAlCB2ZXJsb3JlbmUgSGlzdG9y -aWUuIEltIFJlZ2VsZmFsbCDigJ5VbXNldHplbiIgKGRlYWt0aXZpZXJlbikgYmV2b3J6dWdlbi48 -L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwv -ZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgaWQ9InBlcnNvbmFsLXRhYmVsbGUi -IGNsYXNzPSJhZG1pbi10YWJlbGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIDx0aD5OYW1lPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+ -Vm9ybmFtZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3 -aWR0aDoxMjBweCIgdGl0bGU9IlN0YW1tLUZ1bmt0aW9uIChER0wvREdMaW4vV0RGL1dERmluLzMu -IE1hbm4vMy4gRnJhdS9XYWNobGVpdHVuZy9HcnVwcGVuZsO8aHJ1bmcpLiBCZXN0aW1tdCBkaWUg -VmVyYW50d29ydHVuZ3MtUmVpaGVuZm9sZ2UgaW4gZGVyIFNjaGljaHQuIj5GdW5rdGlvbjwvdGg+ -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo4NXB4IiB0 -aXRsZT0iRGllbnN0Z3JhZCAoZsO8ciBTdXBlclVzZXIgcGVyIEtsaWNrIGVkaXRpZXJiYXIpIj5E -aWVuc3RncmFkPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9 -IndpZHRoOjY1cHgiIHRpdGxlPSJEaWVuc3RyYW5nIOKAlCByb2hlIFBvc2l0aW9uIChhdXMgRXhj -ZWwtSW1wb3J0KS4gVW1zb3J0aWVyZW4gdmlhIOKAnk1hbnVlbGxlIFNvcnRpZXJ1bmciIG9iZW4u -Ij5EaWVuc3RyYW5nPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5 -bGU9IndpZHRoOjUwcHgiIHRpdGxlPSJPcmdhbmlzYXRpb25zZWluaGVpdCAoU3RhbmRvcnQtS3Vl -cnplbCBhdXMgZGVtIFRhYiDigJ5TdGFuZG9ydGUiIOKAlCB6LkIuIEtBLCBIQSwgQk8pLiI+T0U8 -L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NjBw -eCIgdGl0bGU9IlRlbGVmb24tRHVyY2h3YWhsIChpbnRlcm4pLiI+VGVsLjwvdGg+CiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoxMTVweCIgdGl0bGU9Ik5X -LUtlbm51bmcg4oCUIGkuZC5SLiA4IFplaWNoZW4sIGxhbmdlIERPTUFJTi1QcmFlZml4ZSB3ZXJk -ZW4gZ2dmLiBhYmdlc2Nobml0dGVuIj5OVy1LZW5udW5nPC90aD4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjQ4cHgiIHRpdGxlPSJIZXV0aWdlIFNjaGlj -aHRyb3RhdGlvbiAoRnJ1ZWhkaWVuc3QgLyBTcGFldGRpZW5zdCAvIE5hY2h0ZGllbnN0KS4gV2ly -ZCBhdXMgZGVyIFN0YW5kb3J0LVNjaGljaHRmb2xnZSB1bmQgZGVyIERpZW5zdGdydXBwZSBkZXIg -UGVyc29uIGFiZ2VsZWl0ZXQuIEhvdmVyIHplaWd0IGRlbiBuYWVjaHN0ZW4gV2VjaHNlbHRhZy4i -PlJvdGE8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lk -dGg6OTBweCI+RS1NYWlsPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGgg -c3R5bGU9IndpZHRoOjk1cHgiPkdlYnVydHN0YWc8L3RoPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NzBweCIgdGl0bGU9IlF1YWxpZmlrYXRpb24gYWxz -IERpZW5zdGdydXBwZW4tTGVpdGVyIChER0wpIGJ6dy4g4oCeMy4gTWFubi9GcmF1IiBkZXIgVmVy -a2VocnNpbnNwZWt0aW9uIDMuIE1hcmtpZXJ0IGRpZSBQZXJzb24gYWxzIHVlYmVyYmVzZXR6dW5n -cy1mYWVoaWcgZnVlciBsZWVyZSBTY2hpY2h0ZW4gaW4gaWhyZXIgRGllbnN0Z3J1cHBlLiI+Vkkz -IERHTDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0 -aDo5MHB4IiB0aXRsZT0iQW5zcHJlY2hwYXJ0bmVyIGltIEluZm8tRmVuc3RlciDigJQgbnVyIGbD -vHIgTGVpdHVuZ3MtRnVua3Rpb25lbiBha3RpdmllcmJhciAoRnVua3Rpb25lbiBtaXQg4oCeSW4g -UGxhbnVuZyBzaWNodGJhciA9IG5laW4iKSI+QW5zcHJlY2gtwq1wYXJ0bmVyPC90aD4KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjY0cHgiIHRpdGxlPSJE -aWVzZSBQZXJzb24gZWluemVsbiBhdXMgZGVyIFBsYW51bmdzYW5zaWNodCAvIFdvY2hlbnBsYW4g -LyBQZXJzLiBQbGFuIGF1c2JsZW5kZW4gKGdyw7xuID0gc2ljaHRiYXIsIHJvdCA9IGF1c2dlYmxl -bmRldCkuIFN1cGVyVXNlci1vbmx5LiI+SW4gUGxhbnVuZzwvdGg+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo4MHB4Ij5TdGF0dXM8L3RoPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MjEwcHgiPkFrdGlvbmVu -PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAg -ICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBpZD0icGVyc29u -YWwtdGJvZHkiPjwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAg -ICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBGZWllcnRhZ2UgLS0+CiAg -ICAgICAgICAgICAgICA8IS0tIFRhYjogRGllbnN0Z3J1cHBlbiAtLT4KICAgICAgICAgICAgICAg -IDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItZ3J1cHBlbiI+ -CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29wZiI+CiAgICAgICAgICAg -ICAgICAgICAgICAgIDxoMj5EaWVuc3RncnVwcGVuPC9oMj4KICAgICAgICAgICAgICAgICAgICA8 -L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0iYWRtaW4taW5mbyIgZGF0 -YS1pbmZvLWtleT0iZ3J1cHBlbiIgb3Blbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1h -cnk+PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1IERp -ZW5zdGdydXBwZW48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1 -a2xhcHBlbjwvc3Bhbj48L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xh -c3M9ImFkbWluLWluZm8tYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ry -b25nPldhcyBzaW5kIERpZW5zdGdydXBwZW4/PC9zdHJvbmc+IERpZW5zdGdydXBwZW4gYsO8bmRl -bG4gTWl0YXJiZWl0ZXIgbWl0IGRlbXNlbGJlbiBSb3RhdGlvbnNyaHl0aG11cy4gQmVpIGRlciBW -STMgc2luZCBkYXMgZGllIGtsYXNzaXNjaGVuIDxiPkEgLyBCIC8gQzwvYj4gKFdlY2hzZWxkaWVu -c3QtUm90YXRpb24pLCBwbHVzIFNvbmRlcmdydXBwZW4gd2llIDxiPks8L2I+IChXYWNoZGllbnN0 -KSB1bmQgPGI+TDwvYj4gKFdhY2hsZWl0dW5nKS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8cD48c3Ryb25nPkvDvHJ6ZWwgdnMuIEJlemVpY2hudW5nOjwvc3Ryb25nPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPGxpPkRhcyA8Yj5Lw7xyemVsPC9iPiAoei5CLiA8Y29kZT5BPC9jb2RlPiwgPGNv -ZGU+V0Q8L2NvZGU+KSBpc3QgZGllIHRlY2huaXNjaGUgS2VubnVuZyBpbiBkZW4gRGF0ZW4gdW5k -IHdpcmQgaW4gZGVyIFBlcnNvbmVuLVplaWxlIGFuZ2V6ZWlndC4gV2VubiBkdSBlcyDDpG5kZXJz -dCwgd2VyZGVuIGF1dG9tYXRpc2NoIGFsbGUgUGVyc29uZW4gZGVyIEdydXBwZSBhdWYgZGFzIG5l -dWUgS8O8cnplbCBtaWdyaWVydCAoa2Fza2FkaWVydGVzIFVwZGF0ZSBpbiA8Y29kZT5wbGFudW5n -Lmpzb248L2NvZGU+KS48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -bGk+RGllIDxiPkJlemVpY2hudW5nPC9iPiAoei5CLiDigJ5XYWNoZGllbnN0Iiwg4oCeV2FjaGxl -aXR1bmciKSBlcnNjaGVpbnQgYWxzIFRyZW5uZXIgaW4gZGVyIE5hbWVuc2xpc3RlIGRlciBQbGFu -dW5nLiBEaWVzZSBrYW5uc3QgZHUgZnJlaSBhbnBhc3Nlbiwgb2huZSBEYXRlbiB6dSB2ZXJsaWVy -ZW4uPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0 -cm9uZz5GYXJiZW46PC9zdHJvbmc+IEhpbnRlcmdydW5kIHVuZCBTY2hyaWZ0ZmFyYmUgcHJvIEdy -dXBwZSBkaXJla3QgZWRpdGllcmJhci4gRWluZSBMaXZlLVZvcnNjaGF1IHplaWd0IGRhcyByZXN1 -bHRpZXJlbmRlIEJhZGdlLiBEaWUgRmFyYmVuIHdlcmRlbiDDvGJlcmFsbCBpbSBTeXN0ZW0gdmVy -d2VuZGV0IChQZXJzb25lbi1CYWRnZXMsIEdydXBwZW4tVHJlbm5lciBpbiBkZXIgUGVyc29uYWx2 -ZXJ3YWx0dW5nLCBHcnVwcGVuLUxhYmVsIGluIGRlciBQbGFudW5ncy1aZWlsZSkuPC9wPgogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5OZXVlIEdydXBwZSBhbmxlZ2VuOjwv -c3Ryb25nPiBCdXR0b24gPGVtPuKAnk5ldWUgRGllbnN0Z3J1cHBlIjwvZW0+IMO2ZmZuZXQgZWlu -ZSBFaW5nYWJlemVpbGUuIFBmbGljaHRmZWxkZXIgc2luZCBLw7xyemVsIHVuZCBCZXplaWNobnVu -ZzsgRmFyYmVuIGvDtm5uZW4genVuw6RjaHN0IMO8YmVybm9tbWVuIHdlcmRlbiB1bmQgc3DDpHRl -ciBhbmdlcGFzc3Qgd2VyZGVuLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxz -dHJvbmc+R3J1cHBlIGzDtnNjaGVuOjwvc3Ryb25nPiBOdXIgbcO2Z2xpY2gsIHdlbm4ga2VpbmUg -YWt0aXZlIFBlcnNvbiBtZWhyIGluIGRlciBHcnVwcGUgaXN0LiBTaW5kIG5vY2ggUGVyc29uZW4g -enVnZXdpZXNlbiwgemVpZ3QgZGVyIERpYWxvZyBkaWUgQW56YWhsIHVuZCBicmljaHQgYWIg4oCU -IGRhbm4gZXJzdCBkaWUgUGVyc29uZW4gYXVmIGVpbmUgYW5kZXJlIEdydXBwZSB1bXNldHplbiBv -ZGVyIHVtZ3J1cHBpZXJlbi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ry -b25nPlNwZWljaGVybjo8L3N0cm9uZz4gTmFjaCDDhG5kZXJ1bmdlbiBhdWYg4oCeRGllbnN0Z3J1 -cHBlbiBzcGVpY2hlcm4iIGtsaWNrZW4uIEJlaSBnZcOkbmRlcnRlbiBLw7xyemVsbiB3ZXJkZW4g -YWxsZSB2ZXJrbsO8cGZ0ZW4gUGVyc29uZW4gYXV0b21hdGlzY2ggYXVmIGRhcyBuZXVlIEvDvHJ6 -ZWwgdW1nZXNjaHJpZWJlbiAoa2VpbiBEYXRlbnZlcmx1c3QpLjwvcD4KICAgICAgICAgICAgICAg -ICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kZXRhaWxzPgogICAgICAgICAg -ICAgICAgICAgIDx0YWJsZSBjbGFzcz0iYWRtaW4tdGFiZWxsZSIgaWQ9ImdydXBwZW4tdGFiZWxs -ZSIgc3R5bGU9Im1heC13aWR0aDoxMDQwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhl -YWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo5MHB4Ij5Lw7xyemVsPC90aD4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICA8dGg+QmV6ZWljaG51bmc8L3RoPgogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NzBweCI+SGludGVyZ3J1bmQ8L3Ro -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NzBweCI+ -U2NocmlmdDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3 -aWR0aDo4MHB4Ij5Wb3JzY2hhdTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -PHRoIHN0eWxlPSJ3aWR0aDo3MHB4Ij5QZXJzb25lbjwvdGg+CiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoxMjBweDt0ZXh0LWFsaWduOmNlbnRlciIgdGl0 -bGU9Ildlbm4gZGVha3RpdmllcnQsIHdlcmRlbiBQZXJzb25lbiBkaWVzZXIgR3J1cHBlIE5JQ0hU -IGluIGRlciBQbGFudW5nc2Fuc2ljaHQsIGltIFdvY2hlbnBsYW4gdW5kIGltIFBlcnMuIFBsYW4g -YW5nZXplaWd0IOKAlCBibGVpYmVuIGFiZXIgaW4gZGVyIFBlcnNvbmFsdmVyd2FsdHVuZyBwZmxl -Z2Jhci4iPkluIFBsYW51bmcgc2ljaHRiYXI8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTMwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJX -ZW5uIGFrdGl2aWVydCwgZMO8cmZlbiBQZXJzb25lbiBkaWVzZXIgR3J1cHBlIGltIFBlcnNvbmFs -LVRhYiBhbHMgQW5zcHJlY2hwYXJ0bmVyIG1hcmtpZXJ0IHdlcmRlbiAoZ2lsdCB6dXPDpHR6bGlj -aCB6dXIgRnVua3Rpb25zLUJlZGluZ3VuZykuIE1hcmtpZXJ0ZSBQZXJzb25lbiBlcnNjaGVpbmVu -IG1pdCBNYWlsLUJ1dHRvbiBpbSBJbmZvLUZlbnN0ZXIuIj5BbnNwcmVjaHBhcnRuZXIgbcO2Z2xp -Y2g8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6 -NzBweDt0ZXh0LWFsaWduOmNlbnRlciIgdGl0bGU9IlJlaWhlbmZvbGdlIGluIGRlciBQbGFudW5n -c2Fuc2ljaHQgw6RuZGVybiI+UmVpaGVuZm9sZ2U8L3RoPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NjBweCI+PC90aD4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDx0Ym9keSBpZD0iZ3J1cHBlbi10Ym9keSI+PC90Ym9keT4KICAgICAg -ICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1h -cmdpbi10b3A6MTZweDtkaXNwbGF5OmZsZXg7Z2FwOjEwcHgiPgogICAgICAgICAgICAgICAgICAg -ICAgICA8YnV0dG9uIGlkPSJidG4tZ3J1cHBlbi1uZXUiIGNsYXNzPSJidG4gYnRuLWVyZm9sZyI+ -TmV1ZSBEaWVuc3RncnVwcGU8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRv -biBpZD0iYnRuLWdydXBwZW4tc3BlaWNoZXJuIiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVyIj5EaWVu -c3RncnVwcGVuIHNwZWljaGVybjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2Pgog -ICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6IEZlaWVydGFn -ZSAmIEZlcmllbiAoTWVyZ2UgUGhhc2UgMSDigJQgYmVpZGUgS2FsZW5kZXItQmxvY2tlciBhbiBl -aW5lbSBPcnQpIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIHZlcnN0 -ZWNrdCIgaWQ9ImFkbWluLXRhYi1mZWllcnRhZ2UiPgogICAgICAgICAgICAgICAgICAgIDxkaXYg -Y2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+S2FsZW5kZXIg -4oCUIEZlaWVydGFnZSAmYW1wOyBGZXJpZW48L2gyPgogICAgICAgICAgICAgICAgICAgIDwvZGl2 -PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIFN1Yi1UYWItTGVpc3RlOiB0cmVubnQgZGllIHp3 -ZWkgbG9naXNjaCBkaXNqdW5rdGVuCiAgICAgICAgICAgICAgICAgICAgICAgICBUaGVtZW4gdmlz -dWVsbC4gRGVmYXVsdDogRmVpZXJ0YWdlIGFrdGl2LiAtLT4KICAgICAgICAgICAgICAgICAgICA8 -bmF2IGNsYXNzPSJhZG1pbi1zdWJuYXYiIGFyaWEtbGFiZWw9IkthbGVuZGVyLVN1Yi1OYXZpZ2F0 -aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNz -PSJhZG1pbi1zdWJuYXYtYnRuIGFrdGl2IiBkYXRhLXN1YnRhYj0iZmVpZXJ0YWdlIj5GZWllcnRh -Z2U8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24i -IGNsYXNzPSJhZG1pbi1zdWJuYXYtYnRuIiBkYXRhLXN1YnRhYj0iZmVyaWVuIj5TY2h1bGZlcmll -bjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvbmF2PgoKICAgICAgICAgICAgICAgICAg -ICA8c2VjdGlvbiBjbGFzcz0iYWRtaW4tc2VrdGlvbiIgaWQ9ImFkbWluLXNla3Rpb24tZmVpZXJ0 -YWdlIiBkYXRhLXN1YnRhYi1zZWt0aW9uPSJmZWllcnRhZ2UiPgogICAgICAgICAgICAgICAgICAg -ICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1zZWt0aW9uLWtvcGYiPgogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPGgzPkZlaWVydGFnZTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -YnV0dG9uIGlkPSJidG4tZmVpZXJ0YWctbmV1IiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGciPk5ldWVy -IEZlaWVydGFnPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAg -ICAgICAgICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0iYWRtaW4taW5mbyIgZGF0YS1pbmZvLWtl -eT0iZmVpZXJ0YWdlIiBvcGVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+ -PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1IEZlaWVy -dGFnZW48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xhcHBl -bjwvc3Bhbj48L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz -PSJhZG1pbi1pbmZvLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxz -dHJvbmc+V2FzIHBhc3NpZXJ0IG1pdCBGZWllcnRhZ2VuPzwvc3Ryb25nPiBBbiBha3RpdmVuIEZl -aWVydGFnZW4gd2lyZCBkaWUgZW50c3ByZWNoZW5kZSBEYXR1bXMtU3BhbHRlIGltIFBsYW51bmdz -cmFzdGVyIGZhcmJsaWNoIGhlcnZvcmdlaG9iZW4gdW5kIGluIGRlciBBbmxhc3MtWmVpbGUgbWl0 -IGRlciBCZXplaWNobnVuZyBkZXMgRmVpZXJ0YWdzIHZlcnNlaGVuLiBEaWUgU3RhdGlzdGlrLUF1 -c3dlcnR1bmcg4oCeRmVpZXJ0YWdzLURpZW5zdGUiIGJlcsO8Y2tzaWNodGlndCBudXIgVGFnZSBh -dXMgZGllc2VyIExpc3RlLCBkZXJlbiA8ZW0+QWt0aXY8L2VtPi1Iw6RrY2hlbiBnZXNldHp0IGlz -dC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5LYXRlZ29y -aWVuOjwvc3Ryb25nPiBOZWJlbiBkZW4gZ2VzZXR6bGljaGVuIEZlaWVydGFnZW4gKFN0YW5kYXJk -LCBOUlcpIHNpbmQgasO8ZGlzY2hlLCBtdXNsaW1pc2NoZSB1bmQgdMO8cmtpc2NoZSBGZWllcnRh -Z2UgYWxzIERhdGVuYmFzaXMgYmVyZWl0cyBoaW50ZXJsZWd0IOKAlCBmw7xyIDIwMjYgYmlzIDIw -MzUuIERpZXNlIHNpbmQgcGVyIERlZmF1bHQgZGVha3RpdmllcnQ7IHBlciA8ZW0+QWt0aXY8L2Vt -Pi1Iw6RrY2hlbiBsYXNzZW4gc2llIHNpY2ggZWluemVsbiBlaW5ibGVuZGVuLiBKZWRlIEthdGVn -b3JpZSBiZWtvbW10IGluIGRlciBBbmxhc3MtWmVpbGUgZWluZSBlaWdlbmUgRmFyYmUgKGdlc2V0 -emxpY2ggPSBibGF1LCBqw7xkaXNjaCA9IGxpbGEsIG11c2xpbWlzY2ggPSBncsO8biwgdMO8cmtp -c2NoID0gcm90KS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9u -Zz5GaWx0ZXI6PC9zdHJvbmc+IMOcYmVyIGRlciBUYWJlbGxlIG5hY2ggS2F0ZWdvcmllLCBKYWhy -IG9kZXIg4oCebnVyIGFrdGl2ZSIgZmlsdGVybiDigJQgZGllIHZvbGxlIExpc3RlIHVtZmFzc3Qg -cnVuZCAzMTIgRWludHLDpGdlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -cD48c3Ryb25nPldpY2h0aWcgKEhlcnZvcmhlYnVuZyk6PC9zdHJvbmc+IERpZSBDaGVja2JveCBp -biBkZXIgU3BhbHRlIOKAnldpY2h0aWciIG1hcmtpZXJ0IGJlc29uZGVycyBoZXJ2b3J6dWhlYmVu -ZGUgRmVpZXJ0YWdlICh6LkIuIEhlaWxpZ2FiZW5kLCBTaWx2ZXN0ZXIsIFdlaWhuYWNodGVuKS4g -U29sY2hlIFRhZ2UgYmVrb21tZW4gaW0gUGxhbnVuZ3MtSGVhZGVyIGVpbmUgdmVyc3TDpHJrdGUg -RWluZsOkcmJ1bmcgKHJvdCBtaXQgZ29sZGVuZW0gUmFobWVuKSB1bmQgw7xiZXJsYWdlcm4gZGll -IEthdGVnb3JpZS1GYXJiZS4gRGllIFRhYmVsbGVuemVpbGUgaW0gQWRtaW4gZXJow6RsdCBlaW5l -IHLDtnRsaWNoZSBUw7ZudW5nLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -cD48c3Ryb25nPldlY2hzZWx3aXJrdW5nIG1pdCBTb25kZXJ0ZXJtaW5lOjwvc3Ryb25nPiBMaWVn -dCB6dXPDpHR6bGljaCBlaW4gU29uZGVydGVybWluIGFuIGVpbmVtIEZlaWVydGFnLCBibGVpYnQg -ZGVyIEZlaWVydGFncy1IaW53ZWlzIHNpY2h0YmFyLCBkaWUgWmVsbGUgaXN0IGFiZXIga2xpY2ti -YXIgdW5kIHplaWd0IEhpbndlaXMtVGV4dCBrb21iaW5pZXJ0IGFuLjwvcD4KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2RldGFpbHM+ -CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImZlaWVydGFnZS1maWx0ZXIiIGNsYXNz -PSJmZWllcnRhZ2UtZmlsdGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5L -YXRlZ29yaWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0iZmVp -ZXJ0YWdlLWZpbHRlci1rYXRlZ29yaWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8b3B0aW9uIHZhbHVlPSJhbGxlIj5BbGxlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imdlc2V0emxpY2giPkdlc2V0emxpY2gg -KE5SVyk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlv -biB2YWx1ZT0ianVlZGlzY2giPkrDvGRpc2NoPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im11c2xpbWlzY2giPk11c2xpbWlzY2g8L29w -dGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0i -dHVlcmtpc2NoIj5Uw7xya2lzY2g8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+SmFocjoKICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICA8c2VsZWN0IGlkPSJmZWllcnRhZ2UtZmlsdGVyLWphaHIiPjwvc2VsZWN0Pgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIDxsYWJlbCBzdHlsZT0ibWFyZ2luLWxlZnQ6YXV0bztkaXNwbGF5OmlubGluZS1mbGV4 -O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJmZWllcnRhZ2UtZmlsdGVyLW51ci1ha3Rp -diI+IG51ciBha3RpdmUgemVpZ2VuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVs -PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAg -PHRhYmxlIGNsYXNzPSJhZG1pbi10YWJlbGxlIiBpZD0iZmVpZXJ0YWdlLXRhYmVsbGUiPgogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPjx0cj4KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjEzMHB4Ij5EYXR1bTwvdGg+CiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJtYXgtd2lkdGg6MjYwcHgiPkJlemVpY2hu -dW5nPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRo -OjYwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJQcm8gRWludHJhZyB3w6RobGJhcjsgbGVl -ciA9IEthdGVnb3JpZS1EZWZhdWx0Ij5JY29uPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICA8dGggc3R5bGU9IndpZHRoOjE3MHB4Ij5LYXRlZ29yaWU8L3RoPgogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6ODBweDt0ZXh0LWFsaWduOmNl -bnRlciI+QWt0aXY8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHls -ZT0id2lkdGg6MTQwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPldpY2h0aWc8L3RoPgogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTYwcHgiPkFrdGlvbmVuPC90 -aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+PC90aGVhZD4KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDx0Ym9keSBpZD0iZmVpZXJ0YWdlLXRib2R5Ij48L3Rib2R5PgogICAg +YWI9Imxpc3RlbiIgaWQ9Im5hdi1saXN0ZW4iPkRpZW5zdGdyYWRlICZhbXA7IEZ1bmt0aW9uZW48 +L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xh +c3M9ImFkbWluLW5hdi1ncnVwcGUiPgogICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iYWRt +aW4tbmF2LXRpdGVsIj5PcmdhbmlzYXRpb248L2gzPgogICAgICAgICAgICAgICAgICAgIDxidXR0 +b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRhdGEtYWRtaW4tdGFiPSJncnVwcGVuIj5EaWVuc3Rn +cnVwcGVuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWRtaW4t +bmF2LWJ0biIgZGF0YS1hZG1pbi10YWI9InN0YW5kb3J0ZSI+U3RhbmRvcnRlICZhbXA7IFNjaGlj +aHRmb2xnZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWlu +LW5hdi1idG4iIGRhdGEtYWRtaW4tdGFiPSJtaWtyb3RlYW1zIj5NaWtyb3RlYW1zPC9idXR0b24+ +CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1p +bi1uYXYtZ3J1cHBlIj4KICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImFkbWluLW5hdi10 +aXRlbCI+U2NoaWNodC1LYXRhbG9nPC9oMz4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNs +YXNzPSJhZG1pbi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0ic2NoaWNodGNvZGVzIj5TY2hpY2h0 +Y29kZXMgJmFtcDsgRmFyYmVuPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAg +ICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1uYXYtZ3J1cHBlIj4KICAgICAgICAgICAgICAg +ICAgICA8aDMgY2xhc3M9ImFkbWluLW5hdi10aXRlbCI+S2FsZW5kZXI8L2gzPgogICAgICAgICAg +ICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRhdGEtYWRtaW4tdGFiPSJm +ZWllcnRhZ2UiPkZlaWVydGFnZSAmYW1wOyBGZXJpZW48L2J1dHRvbj4KICAgICAgICAgICAgICAg +ICAgICA8YnV0dG9uIGNsYXNzPSJhZG1pbi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0ic29uZGVy +dGVybWluZSI+U29uZGVydGVybWluZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+Cgog +ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tbmF2LWdydXBwZSI+CiAgICAgICAgICAg +ICAgICAgICAgPGgzIGNsYXNzPSJhZG1pbi1uYXYtdGl0ZWwiPktvbW11bmlrYXRpb248L2gzPgog +ICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRhdGEtYWRt +aW4tdGFiPSJlbWFpbHZvcmxhZ2VuIiBpZD0ibmF2LWVtYWlsdm9ybGFnZW4iPkUtTWFpbC1Wb3Js +YWdlbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5h +di1idG4iIGRhdGEtYWRtaW4tdGFiPSJtaXR0ZWlsdW5nZW4iIGlkPSJuYXYtbWl0dGVpbHVuZ2Vu +Ij5NaXR0ZWlsdW5nZW48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNz +PSJhZG1pbi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0iYmV6ZWljaG51bmdlbiIgaWQ9Im5hdi1i +ZXplaWNobnVuZ2VuIj5CZXNjaHJpZnR1bmdlbiAmYW1wOyBIaWxmZXRleHRlPC9idXR0b24+CiAg +ICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1u +YXYtZ3J1cHBlIj4KICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImFkbWluLW5hdi10aXRl +bCI+UmVjaHRlICZhbXA7IFJvbGxlbjwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBj +bGFzcz0iYWRtaW4tbmF2LWJ0biIgZGF0YS1hZG1pbi10YWI9InN1cGVydXNlciIgaWQ9Im5hdi1z +dXBlcnVzZXIiPlJlY2h0ZSAmYW1wOyBTaWNodGJhcmtlaXQ8L2J1dHRvbj4KICAgICAgICAgICAg +ICAgICAgICA8YnV0dG9uIGNsYXNzPSJhZG1pbi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0ic3Rh +bmRhcmRyZWNodGUiIGlkPSJuYXYtc3RhbmRhcmRyZWNodGUiPlN0YW5kYXJkcmVjaHRlIChVc2Vy +KTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBj +bGFzcz0iYWRtaW4tbmF2LWdydXBwZSI+CiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJh +ZG1pbi1uYXYtdGl0ZWwiPkRhcnN0ZWxsdW5nPC9oMz4KICAgICAgICAgICAgICAgICAgICA8YnV0 +dG9uIGNsYXNzPSJhZG1pbi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0iZXJzY2hlaW51bmdzYmls +ZCIgaWQ9Im5hdi1lcnNjaGVpbnVuZ3NiaWxkIj5FcnNjaGVpbnVuZ3NiaWxkPC9idXR0b24+CiAg +ICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWRtaW4tbmF2LWJ0biIgZGF0YS1hZG1p +bi10YWI9InN0YXRpc3Rpay1sYXlvdXQiIGlkPSJuYXYtc3RhdGlzdGlrLWxheW91dCI+U3RhdGlz +dGlrLUxheW91dDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFk +bWluLW5hdi1idG4iIGRhdGEtYWRtaW4tdGFiPSJzdGF0aXN0aWstYnVpbGRlciIgaWQ9Im5hdi1z +dGF0aXN0aWstYnVpbGRlciI+U3RhdGlzdGlrLUJ1aWxkZXI8L2J1dHRvbj4KICAgICAgICAgICAg +ICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLW5hdi1ncnVwcGUi +PgogICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iYWRtaW4tbmF2LXRpdGVsIj5TeXN0ZW08 +L2gzPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRh +dGEtYWRtaW4tdGFiPSJlaW5zdGVsbHVuZ2VuIj5Lb25maWd1cmF0aW9uICZhbXA7IEZ1bmt0aW9u +ZW48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhZG1pbi1uYXYt +YnRuIiBkYXRhLWFkbWluLXRhYj0iYmFja3VwcyI+QmFja3VwczwvYnV0dG9uPgogICAgICAgICAg +ICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5hdi1idG4iIGRhdGEtYWRtaW4tdGFiPSJo +aW53ZWlzZS1wcm90b2tvbGwiIGlkPSJuYXYtaGlud2Vpc2UtcHJvdG9rb2xsIj5IaW53ZWlzZS1Q +cm90b2tvbGw8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhZG1p +bi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0iaW1wb3J0IiBpZD0ibmF2LWltcG9ydCI+RXhjZWwt +SW1wb3J0PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWRtaW4t +bmF2LWJ0biIgZGF0YS1hZG1pbi10YWI9ImV4cG9ydCIgaWQ9Im5hdi1leHBvcnQiPkV4Y2VsLUV4 +cG9ydDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFkbWluLW5h +di1idG4iIGRhdGEtYWRtaW4tdGFiPSJ0ZXN0ZGF0ZW4iPlRlc3RkYXRlbjwvYnV0dG9uPgogICAg +ICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tbmF2 +LWdydXBwZSI+CiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJhZG1pbi1uYXYtdGl0ZWwi +PkFrdHVhbGlzaWVydW5nPC9oMz4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJh +ZG1pbi1uYXYtYnRuIiBkYXRhLWFkbWluLXRhYj0idXBkYXRlIiBpZD0ibmF2LXVwZGF0ZSI+VXBk +YXRlcyAmYW1wOyBTZWxic3R0ZXN0PC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAg +ICAgICAgICAgPC9hc2lkZT4KCiAgICAgICAgICAgIDwhLS0gQWRtaW4tSW5oYWx0IC0tPgogICAg +ICAgICAgICA8bWFpbiBjbGFzcz0iYWRtaW4taW5oYWx0Ij4KCiAgICAgICAgICAgICAgICA8IS0t +IFJlYWQtb25seS1CYW5uZXI6IGVyc2NoZWludCwgd2VubiBkZXIgZWluZ2Vsb2dndGUgQmVudXR6 +ZXIKICAgICAgICAgICAgICAgICAgICAgZGVuIEFkbWluLUJlcmVpY2ggbnVyIGxlc2VuZCBzZWhl +biBkYXJmIChhbGxlIFJvbGxlbgogICAgICAgICAgICAgICAgICAgICBhdXNzZXIgU3VwZXJVc2Vy +KS4gV2lyZCB2b24gYWRtaW5CYW5uZXJBa3R1YWxpc2llcmVuKCkKICAgICAgICAgICAgICAgICAg +ICAgaW4gYWRtaW4uanMgZWluLS9hdXNnZWJsZW5kZXQgdW5kIG1pdCBSb2xsZSBiZWZ1ZWxsdC4g +LS0+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJhZG1pbi1yZWFkb25seS1iYW5uZXIiIGNsYXNz +PSJhZG1pbi1iYW5uZXIgYWRtaW4tYmFubmVyLWluZm8gdmVyc3RlY2t0IiByb2xlPSJzdGF0dXMi +IGFyaWEtbGl2ZT0icG9saXRlIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYWRt +aW4tYmFubmVyLWljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIj4mIzk0MzI7PC9zcGFuPgogICAgICAg +ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWJhbm5lci10ZXh0Ij4KICAgICAgICAgICAg +ICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tYmFubmVyLXRpdGVsIj5OdXItTGVzZS1Nb2R1 +czwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1iYW5uZXIt +Ym9keSIgaWQ9ImFkbWluLXJlYWRvbmx5LWJhbm5lci10ZXh0Ij4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIER1IHNpZWhzdCBkaWVzZW4gQmVyZWljaCBudXIgbGVzZW5kLiAmQXVtbDtuZGVy +dW5nZW4gc2luZCBkZW0gU3VwZXJVc2VyIHZvcmJlaGFsdGVuLgogICAgICAgICAgICAgICAgICAg +ICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwv +ZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gRHJhZnQtUmVzdG9yZS1CYW5uZXI6IGVyc2NoZWlu +dCwgd2VubiBiZWltIFRhYi1XZWNoc2VsIGVpbgogICAgICAgICAgICAgICAgICAgICB1bmdlc2lj +aGVydGVyIEF1dG8tU2F2ZS1EcmFmdCBpbSBsb2NhbFN0b3JhZ2UgZ2VmdW5kZW4gd3VyZGUKICAg +ICAgICAgICAgICAgICAgICAgKEJyb3dzZXItQ3Jhc2gsIEY1LVJlbG9hZCwgdmVyc2VoZW50bGlj +aGVzIFNjaGxpZXNzZW4pLgogICAgICAgICAgICAgICAgICAgICBhZG1pbkRyYWZ0QmFubmVyQW5i +aWV0ZW4oKSBpbiBhZG1pbi5qcyBiZXN0dWVja3QgVGV4dCArIEJ1dHRvbnMuIC0tPgogICAgICAg +ICAgICAgICAgPGRpdiBpZD0iYWRtaW4tZHJhZnQtYmFubmVyIiBjbGFzcz0iYWRtaW4tYmFubmVy +IGFkbWluLWJhbm5lci13YXJuIHZlcnN0ZWNrdCIgcm9sZT0ic3RhdHVzIiBhcmlhLWxpdmU9InBv +bGl0ZSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFkbWluLWJhbm5lci1pY29u +IiBhcmlhLWhpZGRlbj0idHJ1ZSI+JiM5MjAxOzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8 +ZGl2IGNsYXNzPSJhZG1pbi1iYW5uZXItdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxk +aXYgY2xhc3M9ImFkbWluLWJhbm5lci10aXRlbCI+VW5nZXNpY2hlcnRlICZBdW1sO25kZXJ1bmdl +biB3aWVkZXJoZXJzdGVsbGVuPzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNs +YXNzPSJhZG1pbi1iYW5uZXItYm9keSIgaWQ9ImFkbWluLWRyYWZ0LWJhbm5lci10ZXh0Ij4KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIER1IGhhc3QgaW4gZGllc2VtIFRhYiAmQXVtbDtuZGVy +dW5nZW4sIGRpZSBub2NoIG5pY2h0IGdlc3BlaWNoZXJ0IHNpbmQuCiAgICAgICAgICAgICAgICAg +ICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4t +dG9wOjhweDtkaXNwbGF5OmZsZXg7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImFkbWluLWRyYWZ0LXJlc3RvcmUiIGNsYXNzPSJi +dG4gYnRuLXByaW1hZXIgYnRuLWtsZWluIj5XaWVkZXJoZXJzdGVsbGVuPC9idXR0b24+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImFkbWluLWRy +YWZ0LXZlcndlcmZlbiIgY2xhc3M9ImJ0biBidG4tc2VrIGJ0bi1rbGVpbiI+VmVyd2VyZmVuPC9i +dXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAg +IDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6 +IFBlcnNvbmFsIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIiBpZD0i +YWRtaW4tdGFiLXBlcnNvbmFsIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1p +bi1rb3BmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPlBlcnNvbmFsdmVyd2FsdHVuZzwv +aDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6 +MTJweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXAiPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVy +O2dhcDo2cHg7Zm9udC1zaXplOjEzcHg7Y3Vyc29yOnBvaW50ZXIiIHRpdGxlPSJVbWdlc2V0enRl +IGluIGRpZXNlciBUYWJlbGxlIGFuemVpZ2VuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJhZG1pbi1wZXJzb25hbC1maWx0ZXIiPiBV +bWdlc2V0enRlIGVpbmJsZW5kZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+ +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDth +bGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtmb250LXNpemU6MTNweDtjdXJzb3I6cG9pbnRlciIg +dGl0bGU9IlVtZ2VzZXR6dGUgYXVjaCBpbiBkZXIgUGxhbnVuZ3MtQW5zaWNodCBlaW5ibGVuZGVu +IChuaWNodCBlZGl0aWVyYmFyLCBudXIgenVyIFJlY2hlcmNoZSkiPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNoay11bWdlc2V0enRl +LWVpbmJsZW5kZW4iPiBJbiBQbGFudW5ncy1BbnNpY2h0IGVpbmJsZW5kZW4KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFi +ZWwgaWQ9InBhcGllcmtvcmItZmlsdGVyLXplaWxlIiBjbGFzcz0idmVyc3RlY2t0IiBzdHlsZT0i +ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2ZvbnQtc2l6ZToxM3B4O2N1 +cnNvcjpwb2ludGVyIiB0aXRsZT0iU29mdC1nZWzDtnNjaHRlIFBlcnNvbmVuIGltIFBhcGllcmtv +cmIgYW56ZWlnZW4gKG51ciBiZWkgYWt0aXZlbSBGZWF0dXJlKSI+CiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iYWRtaW4tcGFwaWVya29y +Yi1maWx0ZXIiPiBQYXBpZXJrb3JiIGVpbmJsZW5kZW4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4t +bWFudWVsbGUtc29ydGllcnVuZyIgY2xhc3M9ImJ0biBidG4tc2VrIiB0aXRsZT0iRsO8aHJ1bmdz +a3LDpGZ0ZSAoQeKAk0MgdW5kIFdEKSBwZXIgRHJhZyAmYW1wOyBEcm9wIGluIG5ldWUgUmVpaGVu +Zm9sZ2UgYnJpbmdlbiI+TWFudWVsbGUgU29ydGllcnVuZzwvYnV0dG9uPgogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXBlcnNvbi1uZXUiIGNsYXNzPSJidG4gYnRu +LWVyZm9sZyI+TmV1ZSBQZXJzb248L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9k +aXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBO +ZXVpbXBvcnQtQmxvY2s6IGVyc2NoZWludCwgd2VubiBQZXJzb25lbiBtaXQgaW1wb3J0TmV1QW0t +TWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgICB2b3JoYW5kZW4gc2luZCAoRXhjZWwtSW1w +b3J0ICJuZXUgYW5sZWdlbiIpLiBVc2VyIGthbm4gZGllIFBlcnNvbmVuCiAgICAgICAgICAgICAg +ICAgICAgICAgICBoaWVyIGRpcmVrdCBuYWNocGZsZWdlbiB1bmQgZWluemVsbiBhdWYgIkVybGVk +aWd0IiBzZXR6ZW4uCiAgICAgICAgICAgICAgICAgICAgICAgICBCbG9jayB2ZXJzY2h3aW5kZXQg +YXV0b21hdGlzY2gsIHNvYmFsZCBhbGxlIE1hcmtlciB3ZWcgc2luZC4gLS0+CiAgICAgICAgICAg +ICAgICAgICAgPGRpdiBpZD0icGVyc29uYWwtbmV1aW1wb3J0LWJsb2NrIiBjbGFzcz0idmVyc3Rl +Y2t0Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0iYWRtaW4taW5m +byIgZGF0YS1pbmZvLWtleT0icGVyc29uYWwiIG9wZW4+CiAgICAgICAgICAgICAgICAgICAgICAg +IDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWNoZXYiPuKWuDwvc3Bhbj5IaW53ZWlz +ZSB6dXIgUGVyc29uYWx2ZXJ3YWx0dW5nPHNwYW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1 +ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAg +ICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPHA+PHN0cm9uZz5ad2Vjazo8L3N0cm9uZz4gWmVudHJhbGUgVmVyd2FsdHVuZyBhbGxl +ciBNaXRhcmJlaXRlciwgZGllIGluIGRlciBEaWVuc3RwbGFudW5nIGVyc2NoZWluZW4uIEplZGUg +UGVyc29uIGJla29tbXQgU3RhbW1kYXRlbiAoTmFtZSwgRGllbnN0Z3JhZCwgVGVsZWZvbiwgTlct +S2VubnVuZywgRGllbnN0Z3J1cHBlLCBTdGFuZG9ydCkgc293aWUgZWluZW4gYWt0aXZlbiBvZGVy +IHVtZ2VzZXR6dGVuIFN0YXR1cy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48 +c3Ryb25nPlJhbmdmb2xnZTo8L3N0cm9uZz4gRGllIFJhbmctU3BhbHRlIHplaWd0IGRlbiByb2hl +biBQb3NpdGlvbnMtV2VydCAoei5CLiA8Y29kZT4xMTE8L2NvZGU+IOKAlCDDvGJlcm5vbW1lbiBh +dXMgZGVtIEV4Y2VsLUltcG9ydCkuIFp1bSBVbXNvcnRpZXJlbiBudXR6ZSBkZW4gQnV0dG9uIDxl +bT5NYW51ZWxsZSBTb3J0aWVydW5nPC9lbT4gb2JlbiDigJQgZG9ydCBrw7ZubmVuIEbDvGhydW5n +c2tyw6RmdGUgKEHigJNDIHVuZCBXRCkgcGVyIERyYWcgJmFtcDsgRHJvcCBuZXUgYW5nZW9yZG5l +dCB3ZXJkZW4uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5EaWVu +c3RncmFkOjwvc3Ryb25nPiBPcHRpb25hbCDigJQgei4gQi4gUEhLLCBQT0ssIFBLLiBXaXJkIGlu +IGRlciBOYW1lbnNzcGFsdGUgYWxzIFByw6RmaXggdm9yIGRlbSBOYWNobmFtZW4gYW5nZXplaWd0 +LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RGllbnN0Z3J1cHBl +IChBL0IvQy9XRC9XTCk6PC9zdHJvbmc+IEJlc3RpbW10IGRpZSBSb3RhdGlvbiBhbiBkZW4gU3Rh +bmRvcnRlbi4gQS9CL0Mgcm90aWVyZW4gaW4gQUJDLS9CQ0EtL0NBQi1TY2hpY2h0Zm9sZ2UgZHVy +Y2ggRnLDvGgvU3DDpHQvTmFjaHQuIFdEIChXYWNoZGllbnN0KSB1bmQgV0wgKFdhY2hsZWl0dW5n +KSBzaW5kIGZlc3RlIFNvbmRlcmdydXBwZW4gb2huZSBSb3RhdGlvbi4gS8O8cnplbCB1bmQgQmV6 +ZWljaG51bmdlbiBsYXNzZW4gc2ljaCBpbSBUYWIgPGI+RGllbnN0Z3J1cHBlbjwvYj4gYW5wYXNz +ZW4g4oCUIFVtYmVuZW5udW5nIGthc2thZGllcnQgYXV0b21hdGlzY2ggYXVmIGFsbGUgUGVyc29u +ZW4uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5OVy1LZW5udW5n +Ojwvc3Ryb25nPiBEaWUgTmV0endlcmstS2VubnVuZyAoei5CLiA8Y29kZT5ET01BSU5cbWF4Lm11 +c3Rlcm1hbm48L2NvZGU+KSB3aXJkIGF1dG9tYXRpc2NoIGRlbSBhbmdlbWVsZGV0ZW4gV2luZG93 +cy1CZW51dHplciB6dWdlb3JkbmV0LiBPaG5lIEtlbm51bmcgZXJrZW5udCBkYXMgU3lzdGVtIGRp +ZSBQZXJzb24gbmljaHQg4oCUIEZ1bmt0aW9uZW4gd2llIOKAnkZyZW1kLcOEbmRlcnVuZyBXYXJu +dW5nIiBvZGVyIHBlcnPDtm5saWNoZXIgUGxhbiBmdW5rdGlvbmllcmVuIGRhbm4gbmljaHQuPC9w +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5FLU1haWw6PC9zdHJvbmc+ +IE9wdGlvbmFsLiBXaXJkIHZlcndlbmRldCwgd2VubiBkaWUgQmVuYWNocmljaHRpZ3VuZ3NmdW5r +dGlvbiBha3RpdmllcnQgaXN0IChUYWIgPGI+RWluc3RlbGx1bmdlbjwvYj4pLjwvcD4KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+VW1nZXNldHp0Ojwvc3Ryb25nPiBQZXJz +b25lbiBtaXQgU3RhdHVzIOKAnlVtZ2VzZXR6dCIgd2VyZGVuIGF1cyBkZXIgbGF1ZmVuZGVuIFBs +YW51bmcgZW50ZmVybnQsIGlocmUgSGlzdG9yaWUgYmxlaWJ0IGFiZXIgZXJoYWx0ZW4gKHp1ciBS +ZWNoZXJjaGUpLiBFaW50csOkZ2Uga8O2bm5lbiB3ZWl0ZXJoaW4gYW5nZXplaWd0IHdlcmRlbiwg +c2luZCBhYmVyIG5pY2h0IG1laHIgZWRpdGllcmJhci4gRGllIENoZWNrYm94IG9iZW4gcmVjaHRz +IGJsZW5kZXQgc2llIGJlaSBCZWRhcmYgZWluLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIDxwPjxzdHJvbmc+TMO2c2NoZW4gdnMuIFVtc2V0emVuOjwvc3Ryb25nPiBOdXIgYXVzbmFo +bXN3ZWlzZSBsw7ZzY2hlbiDigJQgdmVybG9yZW5lIEhpc3RvcmllLiBJbSBSZWdlbGZhbGwg4oCe +VW1zZXR6ZW4iIChkZWFrdGl2aWVyZW4pIGJldm9yenVnZW4uPC9wPgogICAgICAgICAgICAgICAg +ICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2RldGFpbHM+CiAgICAgICAgICAg +ICAgICAgICAgPHRhYmxlIGlkPSJwZXJzb25hbC10YWJlbGxlIiBjbGFzcz0iYWRtaW4tdGFiZWxs +ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+TmFtZTwvdGg+ +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlZvcm5hbWU8L3RoPgogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTIwcHgiIHRpdGxlPSJT +dGFtbS1GdW5rdGlvbiAoREdML0RHTGluL1dERi9XREZpbi8zLiBNYW5uLzMuIEZyYXUvV2FjaGxl +aXR1bmcvR3J1cHBlbmbDvGhydW5nKS4gQmVzdGltbXQgZGllIFZlcmFudHdvcnR1bmdzLVJlaWhl +bmZvbGdlIGluIGRlciBTY2hpY2h0LiI+RnVua3Rpb248L3RoPgogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6ODVweCIgdGl0bGU9IkRpZW5zdGdyYWQgKGbD +vHIgU3VwZXJVc2VyIHBlciBLbGljayBlZGl0aWVyYmFyKSI+RGllbnN0Z3JhZDwvdGg+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo2NXB4IiB0aXRsZT0i +RGllbnN0cmFuZyDigJQgcm9oZSBQb3NpdGlvbiAoYXVzIEV4Y2VsLUltcG9ydCkuIFVtc29ydGll +cmVuIHZpYSDigJ5NYW51ZWxsZSBTb3J0aWVydW5nIiBvYmVuLiI+RGllbnN0cmFuZzwvdGg+CiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo1MHB4IiB0aXRs +ZT0iT3JnYW5pc2F0aW9uc2VpbmhlaXQgKFN0YW5kb3J0LUt1ZXJ6ZWwgYXVzIGRlbSBUYWIg4oCe +U3RhbmRvcnRlIiDigJQgei5CLiBLQSwgSEEsIEJPKS4iPk9FPC90aD4KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjYwcHgiIHRpdGxlPSJUZWxlZm9uLUR1 +cmNod2FobCAoaW50ZXJuKS4iPlRlbC48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIDx0aCBzdHlsZT0id2lkdGg6MTE1cHgiIHRpdGxlPSJOVy1LZW5udW5nIOKAlCBpLmQuUi4g +OCBaZWljaGVuLCBsYW5nZSBET01BSU4tUHJhZWZpeGUgd2VyZGVuIGdnZi4gYWJnZXNjaG5pdHRl +biI+TlctS2VubnVuZzwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0 +eWxlPSJ3aWR0aDo0OHB4IiB0aXRsZT0iSGV1dGlnZSBTY2hpY2h0cm90YXRpb24gKEZydWVoZGll +bnN0IC8gU3BhZXRkaWVuc3QgLyBOYWNodGRpZW5zdCkuIFdpcmQgYXVzIGRlciBTdGFuZG9ydC1T +Y2hpY2h0Zm9sZ2UgdW5kIGRlciBEaWVuc3RncnVwcGUgZGVyIFBlcnNvbiBhYmdlbGVpdGV0LiBI +b3ZlciB6ZWlndCBkZW4gbmFlY2hzdGVuIFdlY2hzZWx0YWcuIj5Sb3RhPC90aD4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjkwcHgiPkUtTWFpbDwvdGg+ +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo5NXB4Ij5H +ZWJ1cnRzdGFnPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9 +IndpZHRoOjcwcHgiIHRpdGxlPSJRdWFsaWZpa2F0aW9uIGFscyBEaWVuc3RncnVwcGVuLUxlaXRl +ciAoREdMKSBiencuIOKAnjMuIE1hbm4vRnJhdSIgZGVyIFZlcmtlaHJzaW5zcGVrdGlvbiAzLiBN +YXJraWVydCBkaWUgUGVyc29uIGFscyB1ZWJlcmJlc2V0enVuZ3MtZmFlaGlnIGZ1ZXIgbGVlcmUg +U2NoaWNodGVuIGluIGlocmVyIERpZW5zdGdydXBwZS4iPlZJMyBER0w8L3RoPgogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6OTBweCIgdGl0bGU9IkFuc3By +ZWNocGFydG5lciBpbSBJbmZvLUZlbnN0ZXIg4oCUIG51ciBmw7xyIExlaXR1bmdzLUZ1bmt0aW9u +ZW4gYWt0aXZpZXJiYXIgKEZ1bmt0aW9uZW4gbWl0IOKAnkluIFBsYW51bmcgc2ljaHRiYXIgPSBu +ZWluIikiPkFuc3ByZWNoLcKtcGFydG5lcjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo2NHB4IiB0aXRsZT0iRGllc2UgUGVyc29uIGVpbnplbG4g +YXVzIGRlciBQbGFudW5nc2Fuc2ljaHQgLyBXb2NoZW5wbGFuIC8gUGVycy4gUGxhbiBhdXNibGVu +ZGVuIChncsO8biA9IHNpY2h0YmFyLCByb3QgPSBhdXNnZWJsZW5kZXQpLiBTdXBlclVzZXItb25s +eS4iPkluIFBsYW51bmc8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBz +dHlsZT0id2lkdGg6ODBweCI+U3RhdHVzPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICA8dGggc3R5bGU9IndpZHRoOjIxMHB4Ij5Ba3Rpb25lbjwvdGg+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAg +ICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9InBlcnNvbmFsLXRib2R5Ij48L3Rib2R5Pgog +ICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAg +ICAgICAgICAgICA8IS0tIFRhYjogRmVpZXJ0YWdlIC0tPgogICAgICAgICAgICAgICAgPCEtLSBU +YWI6IERpZW5zdGdydXBwZW4gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi10 +YWIgdmVyc3RlY2t0IiBpZD0iYWRtaW4tdGFiLWdydXBwZW4iPgogICAgICAgICAgICAgICAgICAg +IDxkaXYgY2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+RGll +bnN0Z3J1cHBlbjwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAg +ICAgICAgPGRldGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9ImdydXBwZW4i +IG9wZW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1p +bi1pbmZvLWNoZXYiPuKWuDwvc3Bhbj5IaW53ZWlzZSB6dSBEaWVuc3RncnVwcGVuPHNwYW4gY2xh +c3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9zdW1t +YXJ5PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHki +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5XYXMgc2luZCBEaWVuc3Rn +cnVwcGVuPzwvc3Ryb25nPiBEaWVuc3RncnVwcGVuIGLDvG5kZWxuIE1pdGFyYmVpdGVyIG1pdCBk +ZW1zZWxiZW4gUm90YXRpb25zcmh5dGhtdXMuIEJlaSBkZXIgVkkzIHNpbmQgZGFzIGRpZSBrbGFz +c2lzY2hlbiA8Yj5BIC8gQiAvIEM8L2I+IChXZWNoc2VsZGllbnN0LVJvdGF0aW9uKSwgcGx1cyBT +b25kZXJncnVwcGVuIHdpZSA8Yj5LPC9iPiAoV2FjaGRpZW5zdCkgdW5kIDxiPkw8L2I+IChXYWNo +bGVpdHVuZykuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5Lw7xy +emVsIHZzLiBCZXplaWNobnVuZzo8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5EYXMgPGI+ +S8O8cnplbDwvYj4gKHouQi4gPGNvZGU+QTwvY29kZT4sIDxjb2RlPldEPC9jb2RlPikgaXN0IGRp +ZSB0ZWNobmlzY2hlIEtlbm51bmcgaW4gZGVuIERhdGVuIHVuZCB3aXJkIGluIGRlciBQZXJzb25l +bi1aZWlsZSBhbmdlemVpZ3QuIFdlbm4gZHUgZXMgw6RuZGVyc3QsIHdlcmRlbiBhdXRvbWF0aXNj +aCBhbGxlIFBlcnNvbmVuIGRlciBHcnVwcGUgYXVmIGRhcyBuZXVlIEvDvHJ6ZWwgbWlncmllcnQg +KGthc2thZGllcnRlcyBVcGRhdGUgaW4gPGNvZGU+cGxhbnVuZy5qc29uPC9jb2RlPikuPC9saT4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPkRpZSA8Yj5CZXplaWNobnVu +ZzwvYj4gKHouQi4g4oCeV2FjaGRpZW5zdCIsIOKAnldhY2hsZWl0dW5nIikgZXJzY2hlaW50IGFs +cyBUcmVubmVyIGluIGRlciBOYW1lbnNsaXN0ZSBkZXIgUGxhbnVuZy4gRGllc2Uga2FubnN0IGR1 +IGZyZWkgYW5wYXNzZW4sIG9obmUgRGF0ZW4genUgdmVybGllcmVuLjwvbGk+CiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwv +cD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RmFyYmVuOjwvc3Ryb25n +PiBIaW50ZXJncnVuZCB1bmQgU2NocmlmdGZhcmJlIHBybyBHcnVwcGUgZGlyZWt0IGVkaXRpZXJi +YXIuIEVpbmUgTGl2ZS1Wb3JzY2hhdSB6ZWlndCBkYXMgcmVzdWx0aWVyZW5kZSBCYWRnZS4gRGll +IEZhcmJlbiB3ZXJkZW4gw7xiZXJhbGwgaW0gU3lzdGVtIHZlcndlbmRldCAoUGVyc29uZW4tQmFk +Z2VzLCBHcnVwcGVuLVRyZW5uZXIgaW4gZGVyIFBlcnNvbmFsdmVyd2FsdHVuZywgR3J1cHBlbi1M +YWJlbCBpbiBkZXIgUGxhbnVuZ3MtWmVpbGUpLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIDxwPjxzdHJvbmc+TmV1ZSBHcnVwcGUgYW5sZWdlbjo8L3N0cm9uZz4gQnV0dG9uIDxlbT7i +gJ5OZXVlIERpZW5zdGdydXBwZSI8L2VtPiDDtmZmbmV0IGVpbmUgRWluZ2FiZXplaWxlLiBQZmxp +Y2h0ZmVsZGVyIHNpbmQgS8O8cnplbCB1bmQgQmV6ZWljaG51bmc7IEZhcmJlbiBrw7ZubmVuIHp1 +bsOkY2hzdCDDvGJlcm5vbW1lbiB3ZXJkZW4gdW5kIHNww6R0ZXIgYW5nZXBhc3N0IHdlcmRlbi48 +L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkdydXBwZSBsw7ZzY2hl +bjo8L3N0cm9uZz4gTnVyIG3DtmdsaWNoLCB3ZW5uIGtlaW5lIGFrdGl2ZSBQZXJzb24gbWVociBp +biBkZXIgR3J1cHBlIGlzdC4gU2luZCBub2NoIFBlcnNvbmVuIHp1Z2V3aWVzZW4sIHplaWd0IGRl +ciBEaWFsb2cgZGllIEFuemFobCB1bmQgYnJpY2h0IGFiIOKAlCBkYW5uIGVyc3QgZGllIFBlcnNv +bmVuIGF1ZiBlaW5lIGFuZGVyZSBHcnVwcGUgdW1zZXR6ZW4gb2RlciB1bWdydXBwaWVyZW4uPC9w +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5TcGVpY2hlcm46PC9zdHJv +bmc+IE5hY2ggw4RuZGVydW5nZW4gYXVmIOKAnkRpZW5zdGdydXBwZW4gc3BlaWNoZXJuIiBrbGlj +a2VuLiBCZWkgZ2XDpG5kZXJ0ZW4gS8O8cnplbG4gd2VyZGVuIGFsbGUgdmVya27DvHBmdGVuIFBl +cnNvbmVuIGF1dG9tYXRpc2NoIGF1ZiBkYXMgbmV1ZSBLw7xyemVsIHVtZ2VzY2hyaWViZW4gKGtl +aW4gRGF0ZW52ZXJsdXN0KS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAg +ICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xh +c3M9ImFkbWluLXRhYmVsbGUiIGlkPSJncnVwcGVuLXRhYmVsbGUiIHN0eWxlPSJtYXgtd2lkdGg6 +MTA0MHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHls +ZT0id2lkdGg6OTBweCI+S8O8cnplbDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgPHRoPkJlemVpY2hudW5nPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +dGggc3R5bGU9IndpZHRoOjcwcHgiPkhpbnRlcmdydW5kPC90aD4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjcwcHgiPlNjaHJpZnQ8L3RoPgogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6ODBweCI+Vm9yc2NoYXU8 +L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NzBw +eCI+UGVyc29uZW48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHls +ZT0id2lkdGg6MTIwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJXZW5uIGRlYWt0aXZpZXJ0 +LCB3ZXJkZW4gUGVyc29uZW4gZGllc2VyIEdydXBwZSBOSUNIVCBpbiBkZXIgUGxhbnVuZ3NhbnNp +Y2h0LCBpbSBXb2NoZW5wbGFuIHVuZCBpbSBQZXJzLiBQbGFuIGFuZ2V6ZWlndCDigJQgYmxlaWJl +biBhYmVyIGluIGRlciBQZXJzb25hbHZlcndhbHR1bmcgcGZsZWdiYXIuIj5JbiBQbGFudW5nIHNp +Y2h0YmFyPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9Indp +ZHRoOjEzMHB4O3RleHQtYWxpZ246Y2VudGVyIiB0aXRsZT0iV2VubiBha3RpdmllcnQsIGTDvHJm +ZW4gUGVyc29uZW4gZGllc2VyIEdydXBwZSBpbSBQZXJzb25hbC1UYWIgYWxzIEFuc3ByZWNocGFy +dG5lciBtYXJraWVydCB3ZXJkZW4gKGdpbHQgenVzw6R0emxpY2ggenVyIEZ1bmt0aW9ucy1CZWRp +bmd1bmcpLiBNYXJraWVydGUgUGVyc29uZW4gZXJzY2hlaW5lbiBtaXQgTWFpbC1CdXR0b24gaW0g +SW5mby1GZW5zdGVyLiI+QW5zcHJlY2hwYXJ0bmVyIG3DtmdsaWNoPC90aD4KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjcwcHg7dGV4dC1hbGlnbjpjZW50 +ZXIiIHRpdGxlPSJSZWloZW5mb2xnZSBpbiBkZXIgUGxhbnVuZ3NhbnNpY2h0IMOkbmRlcm4iPlJl +aWhlbmZvbGdlPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9 +IndpZHRoOjYwcHgiPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAg +ICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJv +ZHkgaWQ9ImdydXBwZW4tdGJvZHkiPjwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJs +ZT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjE2cHg7ZGlzcGxh +eTpmbGV4O2dhcDoxMHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRu +LWdydXBwZW4tbmV1IiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGciPk5ldWUgRGllbnN0Z3J1cHBlPC9i +dXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1ncnVwcGVuLXNw +ZWljaGVybiIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciI+RGllbnN0Z3J1cHBlbiBzcGVpY2hlcm48 +L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2 +PgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBGZWllcnRhZ2UgJiBGZXJpZW4gKE1lcmdlIFBo +YXNlIDEg4oCUIGJlaWRlIEthbGVuZGVyLUJsb2NrZXIgYW4gZWluZW0gT3J0KSAtLT4KICAgICAg +ICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWIt +ZmVpZXJ0YWdlIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1rb3BmIj4K +ICAgICAgICAgICAgICAgICAgICAgICAgPGgyPkthbGVuZGVyIOKAlCBGZWllcnRhZ2UgJmFtcDsg +RmVyaWVuPC9oMj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAg +ICAgPCEtLSBTdWItVGFiLUxlaXN0ZTogdHJlbm50IGRpZSB6d2VpIGxvZ2lzY2ggZGlzanVua3Rl +bgogICAgICAgICAgICAgICAgICAgICAgICAgVGhlbWVuIHZpc3VlbGwuIERlZmF1bHQ6IEZlaWVy +dGFnZSBha3Rpdi4gLS0+CiAgICAgICAgICAgICAgICAgICAgPG5hdiBjbGFzcz0iYWRtaW4tc3Vi +bmF2IiBhcmlhLWxhYmVsPSJLYWxlbmRlci1TdWItTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAg +ICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRtaW4tc3VibmF2LWJ0biBh +a3RpdiIgZGF0YS1zdWJ0YWI9ImZlaWVydGFnZSI+RmVpZXJ0YWdlPC9idXR0b24+CiAgICAgICAg +ICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRtaW4tc3VibmF2 +LWJ0biIgZGF0YS1zdWJ0YWI9ImZlcmllbiI+U2NodWxmZXJpZW48L2J1dHRvbj4KICAgICAgICAg +ICAgICAgICAgICA8L25hdj4KCiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImFk +bWluLXNla3Rpb24iIGlkPSJhZG1pbi1zZWt0aW9uLWZlaWVydGFnZSIgZGF0YS1zdWJ0YWItc2Vr +dGlvbj0iZmVpZXJ0YWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRt +aW4tc2VrdGlvbi1rb3BmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5GZWllcnRh +Z2U8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWZlaWVy +dGFnLW5ldSIgY2xhc3M9ImJ0biBidG4tZXJmb2xnIj5OZXVlciBGZWllcnRhZzwvYnV0dG9uPgog +ICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRl +dGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9ImZlaWVydGFnZSIgb3Blbj4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1p +bmZvLWNoZXYiPuKWuDwvc3Bhbj5IaW53ZWlzZSB6dSBGZWllcnRhZ2VuPHNwYW4gY2xhc3M9ImFk +bWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9zdW1tYXJ5Pgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4taW5mby1ib2R5Ij4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPldhcyBwYXNzaWVydCBt +aXQgRmVpZXJ0YWdlbj88L3N0cm9uZz4gQW4gYWt0aXZlbiBGZWllcnRhZ2VuIHdpcmQgZGllIGVu +dHNwcmVjaGVuZGUgRGF0dW1zLVNwYWx0ZSBpbSBQbGFudW5nc3Jhc3RlciBmYXJibGljaCBoZXJ2 +b3JnZWhvYmVuIHVuZCBpbiBkZXIgQW5sYXNzLVplaWxlIG1pdCBkZXIgQmV6ZWljaG51bmcgZGVz +IEZlaWVydGFncyB2ZXJzZWhlbi4gRGllIFN0YXRpc3Rpay1BdXN3ZXJ0dW5nIOKAnkZlaWVydGFn +cy1EaWVuc3RlIiBiZXLDvGNrc2ljaHRpZ3QgbnVyIFRhZ2UgYXVzIGRpZXNlciBMaXN0ZSwgZGVy +ZW4gPGVtPkFrdGl2PC9lbT4tSMOka2NoZW4gZ2VzZXR6dCBpc3QuPC9wPgogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+S2F0ZWdvcmllbjo8L3N0cm9uZz4gTmViZW4g +ZGVuIGdlc2V0emxpY2hlbiBGZWllcnRhZ2VuIChTdGFuZGFyZCwgTlJXKSBzaW5kIGrDvGRpc2No +ZSwgbXVzbGltaXNjaGUgdW5kIHTDvHJraXNjaGUgRmVpZXJ0YWdlIGFscyBEYXRlbmJhc2lzIGJl +cmVpdHMgaGludGVybGVndCDigJQgZsO8ciAyMDI2IGJpcyAyMDM1LiBEaWVzZSBzaW5kIHBlciBE +ZWZhdWx0IGRlYWt0aXZpZXJ0OyBwZXIgPGVtPkFrdGl2PC9lbT4tSMOka2NoZW4gbGFzc2VuIHNp +ZSBzaWNoIGVpbnplbG4gZWluYmxlbmRlbi4gSmVkZSBLYXRlZ29yaWUgYmVrb21tdCBpbiBkZXIg +QW5sYXNzLVplaWxlIGVpbmUgZWlnZW5lIEZhcmJlIChnZXNldHpsaWNoID0gYmxhdSwgasO8ZGlz +Y2ggPSBsaWxhLCBtdXNsaW1pc2NoID0gZ3LDvG4sIHTDvHJraXNjaCA9IHJvdCkuPC9wPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RmlsdGVyOjwvc3Ryb25nPiDD +nGJlciBkZXIgVGFiZWxsZSBuYWNoIEthdGVnb3JpZSwgSmFociBvZGVyIOKAnm51ciBha3RpdmUi +IGZpbHRlcm4g4oCUIGRpZSB2b2xsZSBMaXN0ZSB1bWZhc3N0IHJ1bmQgMzEyIEVpbnRyw6RnZS48 +L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5XaWNodGlnIChI +ZXJ2b3JoZWJ1bmcpOjwvc3Ryb25nPiBEaWUgQ2hlY2tib3ggaW4gZGVyIFNwYWx0ZSDigJ5XaWNo +dGlnIiBtYXJraWVydCBiZXNvbmRlcnMgaGVydm9yenVoZWJlbmRlIEZlaWVydGFnZSAoei5CLiBI +ZWlsaWdhYmVuZCwgU2lsdmVzdGVyLCBXZWlobmFjaHRlbikuIFNvbGNoZSBUYWdlIGJla29tbWVu +IGltIFBsYW51bmdzLUhlYWRlciBlaW5lIHZlcnN0w6Rya3RlIEVpbmbDpHJidW5nIChyb3QgbWl0 +IGdvbGRlbmVtIFJhaG1lbikgdW5kIMO8YmVybGFnZXJuIGRpZSBLYXRlZ29yaWUtRmFyYmUuIERp +ZSBUYWJlbGxlbnplaWxlIGltIEFkbWluIGVyaMOkbHQgZWluZSByw7Z0bGljaGUgVMO2bnVuZy48 +L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5XZWNoc2Vsd2ly +a3VuZyBtaXQgU29uZGVydGVybWluZTo8L3N0cm9uZz4gTGllZ3QgenVzw6R0emxpY2ggZWluIFNv +bmRlcnRlcm1pbiBhbiBlaW5lbSBGZWllcnRhZywgYmxlaWJ0IGRlciBGZWllcnRhZ3MtSGlud2Vp +cyBzaWNodGJhciwgZGllIFplbGxlIGlzdCBhYmVyIGtsaWNrYmFyIHVuZCB6ZWlndCBIaW53ZWlz +LVRleHQga29tYmluaWVydCBhbi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rp +dj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXRhaWxzPgogICAgICAgICAgICAgICAgICAg +ICAgICA8ZGl2IGlkPSJmZWllcnRhZ2UtZmlsdGVyIiBjbGFzcz0iZmVpZXJ0YWdlLWZpbHRlciI+ +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+S2F0ZWdvcmllOgogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9ImZlaWVydGFnZS1maWx0ZXIta2F0ZWdv +cmllIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0i +YWxsZSI+QWxsZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +b3B0aW9uIHZhbHVlPSJnZXNldHpsaWNoIj5HZXNldHpsaWNoIChOUlcpPC9vcHRpb24+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imp1ZWRpc2NoIj5K +w7xkaXNjaDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0 +aW9uIHZhbHVlPSJtdXNsaW1pc2NoIj5NdXNsaW1pc2NoPC9vcHRpb24+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InR1ZXJraXNjaCI+VMO8cmtpc2No +PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgPGxhYmVsPkphaHI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBp +ZD0iZmVpZXJ0YWdlLWZpbHRlci1qYWhyIj48L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9 +Im1hcmdpbi1sZWZ0OmF1dG87ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7 +Z2FwOjZweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNo +ZWNrYm94IiBpZD0iZmVpZXJ0YWdlLWZpbHRlci1udXItYWt0aXYiPiBudXIgYWt0aXZlIHplaWdl +bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAg +ICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iYWRtaW4t +dGFiZWxsZSIgaWQ9ImZlaWVydGFnZS10YWJlbGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIDx0aGVhZD48dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxl +PSJ3aWR0aDoxMzBweCI+RGF0dW08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IDx0aCBzdHlsZT0ibWF4LXdpZHRoOjI2MHB4Ij5CZXplaWNobnVuZzwvdGg+CiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo2MHB4O3RleHQtYWxpZ246Y2Vu +dGVyIiB0aXRsZT0iUHJvIEVpbnRyYWcgd8OkaGxiYXI7IGxlZXIgPSBLYXRlZ29yaWUtRGVmYXVs +dCI+SWNvbjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3 +aWR0aDoxNzBweCI+S2F0ZWdvcmllPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICA8dGggc3R5bGU9IndpZHRoOjgwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPkFrdGl2PC90aD4KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjE0MHB4O3RleHQt +YWxpZ246Y2VudGVyIj5XaWNodGlnPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICA8dGggc3R5bGU9IndpZHRoOjE2MHB4Ij5Ba3Rpb25lbjwvdGg+CiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICA8L3RyPjwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJv +ZHkgaWQ9ImZlaWVydGFnZS10Ym9keSI+PC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAg +PC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWZlaWVydGFn +ZS1zcGVpY2hlcm4iIGNsYXNzPSJidG4gYnRuLXByaW1hZXIiIHN0eWxlPSJtYXJnaW4tdG9wOjEy +cHgiPkZlaWVydGFnZSBzcGVpY2hlcm48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L3Nl +Y3Rpb24+CgogICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJhZG1pbi1zZWt0aW9u +IHZlcnN0ZWNrdCIgaWQ9ImFkbWluLXNla3Rpb24tZmVyaWVuIiBkYXRhLXN1YnRhYi1zZWt0aW9u +PSJmZXJpZW4iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1zZWt0 +aW9uLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPlNjaHVsZmVyaWVuPC9o +Mz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1mZXJpZW4tbmV1 +IiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGciPk5ldWVyIEZlcmllbnplaXRyYXVtPC9idXR0b24+CiAg +ICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGV0 +YWlscyBjbGFzcz0iYWRtaW4taW5mbyIgZGF0YS1pbmZvLWtleT0iZmVyaWVuIiBvcGVuPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9ImFkbWluLWluZm8t +Y2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1IEZlcmllbjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZv +LWJhZGdlIj5BdWZrbGFwcGVuIC8gWnVrbGFwcGVuPC9zcGFuPjwvc3VtbWFyeT4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWluZm8tYm9keSI+CiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5XYXJ1bSBGZXJpZW4gZXJmYXNzZW4/ +PC9zdHJvbmc+IE5SVy1TY2h1bGZlcmllbiB3ZXJkZW4gaW0gV29jaGVucGxhbiBtaXQgZGVtIFN5 +bWJvbCDwn4+W77iPIHVuZCBkZXIgQmV6ZWljaG51bmcgbWFya2llcnQ7IGluIGRlciBQbGFudW5n +c2Fuc2ljaHQgbGVndCBzaWNoIGVpbmUgZHVyY2hnZWhlbmRlIGdyw7xuZSBCYXIgw7xiZXIgZGVu +IFplaXRyYXVtLiBEYXMgaGlsZnQgYmVpIGRlciBVcmxhdWJzdmVyZ2FiZSB1bmQgQmVzZXR6dW5n +c3BsYW51bmcsIGJlc29uZGVycyBiZWkgUGVyc29uYWwgbWl0IHNjaHVscGZsaWNodGlnZW4gS2lu +ZGVybi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5aZWl0 +cmF1bS1FaW50csOkZ2U6PC9zdHJvbmc+IEZlcmllbiB3ZXJkZW4gbWl0IDxiPlZvbjwvYj4tIHVu +ZCA8Yj5CaXM8L2I+LURhdHVtIGVyZmFzc3QgKGlua2x1c2l2ZSBiZWlkZXIgVGFnZSkuIEJlaXNw +aWVsOiBPc3RlcmZlcmllbiAzMC4wMy7igJMxMS4wNC4gRGllIDxiPkJlemVpY2hudW5nPC9iPiB3 +aXJkIGltIFRvb2x0aXAgdW5kIGluIGRlciBXb2NoZW5wbGFuLU1hcmtpZXJ1bmcgYW5nZXplaWd0 +LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlBmbGVnZTo8 +L3N0cm9uZz4gRWlubWFsIHBybyBKYWhyIGFrdHVhbGlzaWVyZW4uIERpZSBvZmZpemllbGxlbiBO +UlctRmVyaWVudGVybWluZSBzaW5kIGJlaW0gU2NodWxtaW5pc3Rlcml1bSBOUlcgenUgZmluZGVu +LiDDnGJlcmxhcHBlbmRlIEVpbnRyw6RnZSB3ZXJkZW4gdm9tIFN5c3RlbSBha3plcHRpZXJ0OyBQ +cmlvcml0w6R0OiBGZWllcnRhZyA+IEZlcmllbiA+IFdvY2hlbmVuZGUgPiBOb3JtYWwuPC9wPgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAg +IDwvZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJhZG1pbi10 +YWJlbGxlIiBpZD0iZmVyaWVuLXRhYmVsbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg +PHRoZWFkPjx0cj48dGg+Vm9uPC90aD48dGg+QmlzPC90aD48dGg+QmV6ZWljaG51bmc8L3RoPjx0 +aCBzdHlsZT0id2lkdGg6ODBweCI+QWt0aW9uZW48L3RoPjwvdHI+PC90aGVhZD4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDx0Ym9keSBpZD0iZmVyaWVuLXRib2R5Ij48L3Rib2R5PgogICAg ICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0 -dG9uIGlkPSJidG4tZmVpZXJ0YWdlLXNwZWljaGVybiIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciIg -c3R5bGU9Im1hcmdpbi10b3A6MTJweCI+RmVpZXJ0YWdlIHNwZWljaGVybjwvYnV0dG9uPgogICAg -ICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24g -Y2xhc3M9ImFkbWluLXNla3Rpb24gdmVyc3RlY2t0IiBpZD0iYWRtaW4tc2VrdGlvbi1mZXJpZW4i -IGRhdGEtc3VidGFiLXNla3Rpb249ImZlcmllbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxk -aXYgY2xhc3M9ImFkbWluLXNla3Rpb24ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8aDM+U2NodWxmZXJpZW48L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRv -biBpZD0iYnRuLWZlcmllbi1uZXUiIGNsYXNzPSJidG4gYnRuLWVyZm9sZyI+TmV1ZXIgRmVyaWVu -emVpdHJhdW08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5 -PSJmZXJpZW4iIG9wZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeT48c3Bh -biBjbGFzcz0iYWRtaW4taW5mby1jaGV2Ij7ilrg8L3NwYW4+SGlud2Vpc2UgenUgRmVyaWVuPHNw -YW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+ -PC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4t -aW5mby1ib2R5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPldh -cnVtIEZlcmllbiBlcmZhc3Nlbj88L3N0cm9uZz4gTlJXLVNjaHVsZmVyaWVuIHdlcmRlbiBpbSBX -b2NoZW5wbGFuIG1pdCBkZW0gU3ltYm9sIPCfj5bvuI8gdW5kIGRlciBCZXplaWNobnVuZyBtYXJr -aWVydDsgaW4gZGVyIFBsYW51bmdzYW5zaWNodCBsZWd0IHNpY2ggZWluZSBkdXJjaGdlaGVuZGUg -Z3LDvG5lIEJhciDDvGJlciBkZW4gWmVpdHJhdW0uIERhcyBoaWxmdCBiZWkgZGVyIFVybGF1YnN2 -ZXJnYWJlIHVuZCBCZXNldHp1bmdzcGxhbnVuZywgYmVzb25kZXJzIGJlaSBQZXJzb25hbCBtaXQg -c2NodWxwZmxpY2h0aWdlbiBLaW5kZXJuLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8cD48c3Ryb25nPlplaXRyYXVtLUVpbnRyw6RnZTo8L3N0cm9uZz4gRmVyaWVuIHdlcmRl -biBtaXQgPGI+Vm9uPC9iPi0gdW5kIDxiPkJpczwvYj4tRGF0dW0gZXJmYXNzdCAoaW5rbHVzaXZl -IGJlaWRlciBUYWdlKS4gQmVpc3BpZWw6IE9zdGVyZmVyaWVuIDMwLjAzLuKAkzExLjA0LiBEaWUg -PGI+QmV6ZWljaG51bmc8L2I+IHdpcmQgaW0gVG9vbHRpcCB1bmQgaW4gZGVyIFdvY2hlbnBsYW4t -TWFya2llcnVuZyBhbmdlemVpZ3QuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IDxwPjxzdHJvbmc+UGZsZWdlOjwvc3Ryb25nPiBFaW5tYWwgcHJvIEphaHIgYWt0dWFsaXNpZXJl -bi4gRGllIG9mZml6aWVsbGVuIE5SVy1GZXJpZW50ZXJtaW5lIHNpbmQgYmVpbSBTY2h1bG1pbmlz -dGVyaXVtIE5SVyB6dSBmaW5kZW4uIMOcYmVybGFwcGVuZGUgRWludHLDpGdlIHdlcmRlbiB2b20g -U3lzdGVtIGFremVwdGllcnQ7IFByaW9yaXTDpHQ6IEZlaWVydGFnID4gRmVyaWVuID4gV29jaGVu -ZW5kZSA+IE5vcm1hbC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAg -ICAgICAgICAgICAgICAgICAgICAgPC9kZXRhaWxzPgogICAgICAgICAgICAgICAgICAgICAgICA8 -dGFibGUgY2xhc3M9ImFkbWluLXRhYmVsbGUiIGlkPSJmZXJpZW4tdGFiZWxsZSI+CiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+PHRyPjx0aD5Wb248L3RoPjx0aD5CaXM8L3RoPjx0 -aD5CZXplaWNobnVuZzwvdGg+PHRoIHN0eWxlPSJ3aWR0aDo4MHB4Ij5Ba3Rpb25lbjwvdGg+PC90 -cj48L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJmZXJpZW4t -dGJvZHkiPjwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1mZXJpZW4tc3BlaWNoZXJuIiBjbGFzcz0i -YnRuIGJ0bi1wcmltYWVyIiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4Ij5GZXJpZW4gc3BlaWNoZXJu -PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgogICAgICAgICAgICAgICAg -PC9kaXY+CgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBTb25kZXJ0ZXJtaW5lIC0tPgogICAg -ICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIHZlcnN0ZWNrdCIgaWQ9ImFkbWluLXRh -Yi1zb25kZXJ0ZXJtaW5lIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1r -b3BmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPlNvbmRlcnRlcm1pbmUgJmFtcDsgSGlu -d2Vpc2U8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc29uZGVy -dGVybWluLW5ldSIgY2xhc3M9ImJ0biBidG4tZXJmb2xnIj5OZXVlciBIaW53ZWlzPC9idXR0b24+ -CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkZXRhaWxz -IGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5PSJzb25kZXJ0ZXJtaW5lIiBvcGVuPgog -ICAgICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1j -aGV2Ij7ilrg8L3NwYW4+SGlud2Vpc2UgenUgU29uZGVydGVybWluZW48c3BhbiBjbGFzcz0iYWRt -aW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xhcHBlbjwvc3Bhbj48L3N1bW1hcnk+CiAg -ICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWluZm8tYm9keSI+CiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPldhcyBpc3QgZGFzPzwvc3Ryb25nPiBT -b25kZXJ0ZXJtaW5lIHNpbmQgSGlud2Vpc2Ugb2RlciBXYXJudW5nZW4sIGRpZSBhbiBlaW5lbSBi -ZXN0aW1tdGVuIFRhZyAob2RlciBaZWl0cmF1bSkgZsO8ciBhbGxlIE51dHplciBzaWNodGJhciB3 -ZXJkZW4g4oCUIHouQi4gVmVyYW5zdGFsdHVuZ2VuLCBlcmjDtmh0ZXIgUGVyc29uYWxiZWRhcmYs -IHdpY2h0aWdlIEZyaXN0ZW4sIFNwZXJydGVybWluZSwgRmVpZXJuIG9kZXIgRXJpbm5lcnVuZ2Vu -LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+V2llIHNlaGVuIGRp -ZSBOdXR6ZXIgZGFzPzwvc3Ryb25nPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1 -bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+SW0gUGxhbnVuZ3MtSGVh -ZGVyPC9iPiBlcnNjaGVpbnQgaW4gZGVyIEhpbndlaXMtWmVpbGUgKHVudGVyIGRlbSBXb2NoZW50 -YWcpIGRhcyBnZXfDpGhsdGUgSWNvbiBvZGVyIGRlciBGYWxsYmFjayAoPGNvZGU+4oS5PC9jb2Rl -PiBmw7xyIEhpbndlaXMsIDxjb2RlPiEhITwvY29kZT4gZsO8ciBXYXJudW5nKS4gSG92ZXIgemVp -Z3QgZGVuIFRpdGVsIGFscyBUb29sdGlwLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPGxpPjxiPktsaWNrIGF1ZiBkaWUgWmVsbGU8L2I+IMO2ZmZuZXQgZWluIEFuc2ljaHRz -LU1vZGFsIG1pdCBJY29uLCBUaXRlbCwgZm9ybWF0aWVydGVtIFRleHQgdW5kIERhdHVtLiBTdXBl -clVzZXIga8O2bm5lbiBkaXJla3QgYmVhcmJlaXRlbiBvZGVyIG5ldWUgSGlud2Vpc2UgZsO8ciBq -ZWRlcyBEYXR1bSBhbmxlZ2VuLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -PGxpPjxiPkJlaW0gUGxhbmVuL1VtcGxhbmVuIGVpbmVyIFNjaGljaHQ8L2I+IGFuIGVpbmVtIFRh -ZyBtaXQgSGlud2VpcyBlcnNjaGVpbnQg4oCUIGplIG5hY2ggV2Fybm1vZHVzIOKAlCBlaW4gV2Fy -bi1Nb2RhbCwgZGFzIHZvciBkZXIgRWluZ2FiZSBiZXN0w6R0aWd0IHdlcmRlbiBtdXNzLjwvbGk+ -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPHA+PHN0cm9uZz5GZWxkZXIgaW0gRGV0YWlsOjwvc3Ryb25nPjwvcD4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -bGk+PGI+RGF0dW0gKFZvbik8L2I+IOKAlCBQZmxpY2h0ZmVsZC4gU3RhcnQgZGVzIEfDvGx0aWdr -ZWl0c2JlcmVpY2hzLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxi -PkRhdHVtIChCaXMpPC9iPiDigJQgb3B0aW9uYWwuIExlZXIgbGFzc2VuID0gZ2lsdCBudXIgZsO8 -ciBkZW4gU3RhcnQtVGFnLiBHZXNldHp0ID0gWmVpdHJhdW0gKFZvbiBiaXMgQmlzIGlua2x1c2l2 -ZSkuIEplZGVyIFRhZyBpbSBaZWl0cmF1bSB6ZWlndCBkZW4gSGlud2Vpcy48L2xpPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5UaXRlbDwvYj4g4oCUIGt1cnplIEJlemVp -Y2hudW5nIChtYXguIDEwMCBaZWljaGVuKSwgZXJzY2hlaW50IGltIFRvb2x0aXAgdW5kIGFscyDD -nGJlcnNjaHJpZnQgaW0gTW9kYWwuIElzdCBrZWluIFRpdGVsIGdlc2V0enQsIHdpcmQgZGVyIEFu -ZmFuZyBkZXMgVGV4dHMgdmVyd2VuZGV0LjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPGxpPjxiPlRleHQ8L2I+IOKAlCBhdXNmw7xocmxpY2hlciBJbmhhbHQgbWl0IG1pbmlt -YWxlbSBSaWNoLVRleHQtRWRpdG9yLiBVbnRlcnN0w7x0enQgPGI+ZmV0dDwvYj4sIDxpPmt1cnNp -djwvaT4sIDx1PnVudGVyc3RyaWNoZW48L3U+LCBBdWZ6w6RobHVuZ2VuICjigKIgLyAxLikgdW5k -IEVudGZlcm5lbiBkZXIgRm9ybWF0aWVydW5nLiBFaW5mw7xnZW4gYXVzIGFuZGVyZW4gUXVlbGxl -biAoV29yZCwgTWFpbCkgZnVua3Rpb25pZXJ0IOKAlCBGb3JtYXRpZXJ1bmcgd2lyZCBhdWYgZGFz -IFp1bMOkc3NpZ2UgYmVyZWluaWd0LjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPGxpPjxiPkljb248L2I+IOKAlCBFbW9qaSBhdXMgZGVtIFBpY2tlciAoNSBHcnVwcGVuKSBv -ZGVyIOKAnmtlaW5zIi4gRXJzZXR6dCBpbSBIZWFkZXItQmFkZ2UgZGFzIGdlbmVyaXNjaGUgU3lt -Ym9sLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPlR5cDwvYj4g -4oCUIDxpPkhpbndlaXM8L2k+IChuZXV0cmFsLCBibGF1KSBvZGVyIDxpPldhcm51bmc8L2k+IChy -b3Qtb3JhbmdlLCBmw7xyIHdpY2h0aWdlIFRoZW1lbikuPC9saT4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICA8bGk+PGI+V2Fybm1vZHVzPC9iPiDigJQgc3RldWVydCwgd2FubiBkYXMg -V2Fybi1Nb2RhbCBiZWltIFBsYW5lbiBlcnNjaGVpbnQ6CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IDxsaT48Yj5JbW1lcjwvYj4g4oCUIGJlaSBqZWRlciBQbGFudW5nIGltIFplaXRyYXVtIGVyc2No -ZWludCBkYXMgTW9kYWwgZXJuZXV0LjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICA8bGk+PGI+RWlubWFsaWcgcHJvIFVzZXI8L2I+IOKAlCBlcnNjaGVpbnQgbnVy -IGJlaW0gZXJzdGVuIEtsaWNrIHBybyBOdXR6ZXIgdW5kIFRlcm1pbiAoU3BlaWNoZXJ1bmcgbG9r -YWwgaW0gQnJvd3NlciwgcHJvIFRlcm1pbi1JRCkuPC9saT4KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDxsaT48Yj5BdXM8L2I+IOKAlCBudXIgYWxzIEhlYWRlci1JY29u -IHNpY2h0YmFyLCBrZWluIE1vZGFsIGJlaW0gUGxhbmVuLjwvbGk+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICA8cD48c3Ryb25nPlRpcHA6PC9zdHJvbmc+IEbDvHIgd2llZGVya2VocmVuZGUg -R3Jvw592ZXJhbnN0YWx0dW5nZW4gZWluZmFjaCBtaXQgWmVpdHJhdW0gYW5sZWdlbiAoei5CLiBL -YXJuZXZhbHN3b2NoZSBNb250YWfigJNGcmVpdGFnKS4gRGVyIEhpbndlaXMgZXJzY2hlaW50IGRh -bm4gYXVmIGFsbGVuIFRhZ2VuOyBkYXMgV2Fybi1Nb2RhbCBlcnNjaGVpbnQgaW0gTW9kdXMg4oCe -RWlubWFsaWciIG51ciBlaW5tYWwgcHJvIE51dHplciB1bmQgVGVybWluLCBuaWNodCBmw7xyIGpl -ZGVuIFRhZyBuZXUuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAg -ICAgICAgICAgICA8L2RldGFpbHM+CgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0i -YWRtaW4tdGFiZWxsZSIgaWQ9InNvbmRlcnRlcm1pbmUtdGFiZWxsZSI+CiAgICAgICAgICAgICAg -ICAgICAgICAgIDx0aGVhZD48dHI+PHRoIHN0eWxlPSJ3aWR0aDo1MnB4Ij5JY29uPC90aD48dGgg -c3R5bGU9IndpZHRoOjE4MHB4Ij5EYXR1bSAvIFplaXRyYXVtPC90aD48dGg+VGl0ZWw8L3RoPjx0 -aCBzdHlsZT0id2lkdGg6MTEwcHgiPlR5cDwvdGg+PHRoIHN0eWxlPSJ3aWR0aDoxNjBweCI+V2Fy -bm1vZHVzPC90aD48dGggc3R5bGU9IndpZHRoOjE3MHB4Ij5Ba3Rpb25lbjwvdGg+PC90cj48L3Ro -ZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9InNvbmRlcnRlcm1pbmUtdGJv -ZHkiPjwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAg -IDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBTY2hpY2h0Y29kZXMgJiBGYXJiY29k -aWVydW5nIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIHZlcnN0ZWNr -dCIgaWQ9ImFkbWluLXRhYi1zY2hpY2h0Y29kZXMiPgogICAgICAgICAgICAgICAgICAgIDxkaXYg -Y2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+U2NoaWNodGNv -ZGVzICZhbXA7IEZhcmJjb2RpZXJ1bmc8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0 -dG9uIGlkPSJidG4tc2NoaWNodGNvZGUtbmV1IiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGciPk5ldWVy -IFNjaGljaHRjb2RlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg -ICAgICAgICAgICAgPGRldGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9InNj -aGljaHRjb2RlcyIgb3Blbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4g -Y2xhc3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1IFNjaGljaHRjb2Rl -cyAmYW1wOyBGYXJiY29kaWVydW5nPHNwYW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1Zmts +dG9uIGlkPSJidG4tZmVyaWVuLXNwZWljaGVybiIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciIgc3R5 +bGU9Im1hcmdpbi10b3A6MTJweCI+RmVyaWVuIHNwZWljaGVybjwvYnV0dG9uPgogICAgICAgICAg +ICAgICAgICAgIDwvc2VjdGlvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKCiAgICAgICAgICAg +ICAgICA8IS0tIFRhYjogU29uZGVydGVybWluZSAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xh +c3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItc29uZGVydGVybWluZSI+CiAg +ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29wZiI+CiAgICAgICAgICAgICAg +ICAgICAgICAgIDxoMj5Tb25kZXJ0ZXJtaW5lICZhbXA7IEhpbndlaXNlPC9oMj4KICAgICAgICAg +ICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXNvbmRlcnRlcm1pbi1uZXUiIGNsYXNzPSJi +dG4gYnRuLWVyZm9sZyI+TmV1ZXIgSGlud2VpczwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAg +IDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0iYWRtaW4taW5mbyIg +ZGF0YS1pbmZvLWtleT0ic29uZGVydGVybWluZSIgb3Blbj4KICAgICAgICAgICAgICAgICAgICAg +ICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndl +aXNlIHp1IFNvbmRlcnRlcm1pbmVuPHNwYW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1Zmts YXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAg ICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPHA+PHN0cm9uZz5XYXMgaXN0IGVpbiBTY2hpY2h0Y29kZT88L3N0cm9uZz4gRWluIFNjaGlj -aHRjb2RlIGlzdCBlaW4gS8O8cnplbCwgZGFzIGVpbmVuIGJlc3RpbW10ZW4gRGllbnN0LCBlaW5l -IEFid2VzZW5oZWl0IG9kZXIgZWluZW4gYmVzb25kZXJlbiBTdGF0dXMgZWluZXMgTWl0YXJiZWl0 -ZXJzIGFuIGVpbmVtIFRhZyBiZXNjaHJlaWJ0LiBKZWRlciBDb2RlIGhhdCBlaW5lIDxiPkZhcmJj -b2RpZXJ1bmc8L2I+IChIaW50ZXJncnVuZCArIFNjaHJpZnRmYXJiZSksIGRpZSBpbSBQbGFudW5n -c3Jhc3RlciBkaXJla3QgYWJsZXNiYXIgaXN0LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDxwPjxzdHJvbmc+U3BhbHRlbiBpbiBkZXIgw5xiZXJzaWNodDo8L3N0cm9uZz48L3A+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPGxpPjxiPkZhcmJmZWxkPC9iPiDigJQgVm9yc2NoYXUgZGVyIGhpbnRlcmxlZ3RlbiBI -aW50ZXJncnVuZGZhcmJlLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxp -PjxiPkNvZGU8L2I+IOKAlCBkZXIgdGVjaG5pc2NoZSBTY2hsw7xzc2VsIGluIGRlciBEYXRlbmhh -bHR1bmcgKHouQi4gPGNvZGU+Ri1ER0w8L2NvZGU+LCA8Y29kZT5rcjwvY29kZT4sIDxjb2RlPlVy -bDwvY29kZT4pLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPkvD -vHJ6ZWw8L2I+IOKAlCBkaWUgS3VyemZvcm0sIGRpZSBpbSBQbGFudW5nc3Jhc3RlciBpbiBkZXIg -WmVsbGUgYW5nZXplaWd0IHdpcmQgKHouQi4gPGNvZGU+RjwvY29kZT4sIDxjb2RlPmtyPC9jb2Rl -PikuIEthbm4gbWl0IGRlbSBDb2RlIGlkZW50aXNjaCBzZWluLjwvbGk+CiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPGxpPjxiPkJlemVpY2hudW5nPC9iPiDigJQgZGVyIExhbmduYW1l -IHp1ciBFcmzDpHV0ZXJ1bmcgKHouQi4g4oCeRnLDvGhkaWVuc3QgREdMIikuPC9saT4KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -cD48c3Ryb25nPkdydXBwaWVydW5nOjwvc3Ryb25nPiBNaXQgZGVtIEF1c3dhaGxtZW7DvCBvYmVu -IGthbm5zdCBkdSB6d2lzY2hlbiB2ZXJzY2hpZWRlbmVuIERhcnN0ZWxsdW5nZW4gd2VjaHNlbG46 -PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIDxsaT48Yj5OYWNoIFNjaGljaHR0eXA8L2I+IChTdGFuZGFyZCkg4oCUIMO8 -YmVyc2ljaHRsaWNoIGdydXBwaWVydCBuYWNoIEZyw7xoLS9TcMOkdC0vTmFjaHRkaWVuc3QsIEZy -ZWksIFVybGF1YiwgS3JhbmtoZWl0L0F1c2ZhbGwsIEZvcnRiaWxkdW5nLCBEaWVuc3RlL0VpbnPD -pHR6ZSwgU29uZGVyZm9ybWVuLiBEaWUgWnVvcmRudW5nIGVyZm9sZ3QgYXV0b21hdGlzY2ggYW5o -YW5kIGRlcyBDb2RlLU11c3RlcnMuPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8bGk+PGI+QWxwaGFiZXRpc2NoIChDb2RlKTwvYj4g4oCUIGFsbGUgQ29kZXMgaW4gZWluZXIg -TGlzdGUgbmFjaCBLw7xyemVsIHNvcnRpZXJ0LjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPGxpPjxiPkFscGhhYmV0aXNjaCAoQmV6ZWljaG51bmcpPC9iPiDigJQgYWxsZSBD -b2RlcyBuYWNoIExhbmduYW1lIHNvcnRpZXJ0IChoaWxmcmVpY2ggd2VubiBtYW4gbnVyIGRlbiBO -YW1lbiBlcmlubmVydCwgbmljaHQgZGFzIEvDvHJ6ZWwpLjwvbGk+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgPGxpPjxiPktlaW5lIEdydXBwaWVydW5nPC9iPiDigJQgdW5zb3J0aWVy -dGUgT3JpZ2luYWxyZWloZW5mb2xnZSB3aWUgaW4gZGVyIERhdGVpLjwvbGk+CiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0 -cm9uZz5QZmxlZ2UgaW0gVUk6PC9zdHJvbmc+IE1pdCA8Yj7igJ5OZXVlciBTY2hpY2h0Y29kZSI8 -L2I+IGxlZ3N0IGR1IGVpbmVuIG5ldWVuIENvZGUgYW4uIEF1ZiBqZWRlIEthcnRlIGtsaWNrc3Qg -ZHUgZGFzIDxiPkJlYXJiZWl0ZW4tU3ltYm9sICjinI4pPC9iPiwgdW0gS8O8cnplbCwgQmV6ZWlj -aG51bmcsIEhpbnRlcmdydW5kLSB1bmQgU2NocmlmdGZhcmJlIHp1IMOkbmRlcm4uIEVpbmUgTGl2 -ZS1Wb3JzY2hhdSB6ZWlndCBkaXJla3QgZGFzIEVyZ2VibmlzLiBHZWzDtnNjaHQgd2lyZCDDvGJl -ciBkZW4gTMO2c2NoZW4tQnV0dG9uIGltIEVkaXQtRGlhbG9nIOKAlCBiZXN0ZWhlbmRlIEVpbnRy -w6RnZSBpbiBkZXIgUGxhbnVuZyBtaXQgZGllc2VtIENvZGUgYmxlaWJlbiBlcmhhbHRlbiwgd2Vy -ZGVuIGFiZXIgb2huZSBGYXJiZSBkYXJnZXN0ZWxsdC48L3A+CiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICA8cD48c3Ryb25nPkNvZGUgLyB0ZWNobmlzY2hlciBTY2hsw7xzc2VsOjwvc3Ryb25n -PiBEZXIgQ29kZSBpc3QgZGVyIElkZW50aWZpZXIgaW4gZGVyIERhdGVuaGFsdHVuZyB1bmQgbWl0 -IGFsbGVuIFBsYW51bmdzLUVpbnRyw6RnZW4gdmVya27DvHBmdC4gQmVpbSBOZXVhbmxlZ2VuIGZy -ZWkgd8OkaGxiYXIsIGJlaW0gc3DDpHRlcmVuIEJlYXJiZWl0ZW4gc2NocmVpYmdlc2Now7x0enQg -4oCUIGVpbmUgw4RuZGVydW5nIHfDvHJkZSBhbGxlIGJlc3RlaGVuZGVuIEVpbnRyw6RnZSBpbmtv -bnNpc3RlbnQgbWFjaGVuLiBXZW5uIGRlciBDb2RlIHVtYmVuYW5udCB3ZXJkZW4gbXVzczogbmV1 -IGFubGVnZW4sIGFsdGUgRWludHLDpGdlIG1hbnVlbGwgw6RuZGVybiwgYWx0ZW4gQ29kZSBsw7Zz -Y2hlbi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlRpcHA6PC9z -dHJvbmc+IEZhcmJmYW1pbGllbiBrb25zaXN0ZW50IGVpbnNldHplbjogcm90ID0gRnLDvGhkaWVu -c3QsIGJsYXUgPSBTcMOkdGRpZW5zdCwgZ3LDvG4gPSBOYWNodGRpZW5zdCwgZ3JhdSA9IEZyZWkv -SE8sIHJvc8OpID0gS3JhbmtoZWl0LCBsaWxhID0gTGVocmdhbmcuIFNvIGVya2VubnQgZGFzIEF1 -Z2Ugb2huZSBMZXNlbiBkaWUgU2NoaWNodC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwv -ZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICA8 -ZGl2IGlkPSJzY2hpY2h0Y29kZS12b3JzY2hhdSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rp -dj4KCiAgICAgICAgICAgICAgICA8IS0tIFRhYjogTWlrcm90ZWFtcyDigJQgUGVyc29uZW4tR3J1 -cHBlbiBwcm8gU3RhbmRvcnQrRGllbnN0Z3J1cHBlIC0tPgogICAgICAgICAgICAgICAgPGRpdiBj -bGFzcz0iYWRtaW4tdGFiIHZlcnN0ZWNrdCIgaWQ9ImFkbWluLXRhYi1taWtyb3RlYW1zIj4KICAg -ICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1rb3BmIj4KICAgICAgICAgICAgICAg -ICAgICAgICAgPGgyPk1pa3JvdGVhbXM8L2gyPgogICAgICAgICAgICAgICAgICAgIDwvZGl2Pgog -ICAgICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8t -a2V5PSJtaWtyb3RlYW1zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4g -Y2xhc3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPldvenUgTWlrcm90ZWFtcz88c3BhbiBj -bGFzcz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xhcHBlbjwvc3Bhbj48L3N1 -bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWluZm8tYm9k -eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPldhcyBzaW5kIE1pa3Jv -dGVhbXM/PC9zdHJvbmc+IEVpbmUgTWlrcm90ZWFtLURlZmluaXRpb24gZmFzc3QgZGllIFBlcnNv -bmVuIHp1c2FtbWVuLCBkaWUgYW4gZWluZW0gU3RhbmRvcnQgZ2VtZWluc2FtIGVpbmUgRGllbnN0 -Z3J1cHBlIGJpbGRlbiAoei5CLiDigJ5LYW1lbi1BIiA9IGRpZSBER0wtVmVyYW50d29ydGxpY2hl -biBkZXIgR3J1cHBlIEEgYW0gU3RhbmRvcnQgS2FtZW4pLiBEaWUgU3RhdGlzdGlrIChIZWF0bWFw -ICsgVGFnZXMtQW50ZWlsZSBwcm8gVGVhbSkgd2VydGV0IGRhbWl0IGF1cywgd2llIG9mdCBkaWUg -ZWluemVsbmVuIFRlYW1zIGdlbWVpbnNhbSBpbSBEaWVuc3Qgc2luZC48L3A+CiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlBmbGVnZTo8L3N0cm9uZz4gUHJvIEVpbnRyYWcg -TmFtZSwgU3RhbmRvcnQtS8O8cnplbCAoMiBCdWNoc3RhYmVuIGF1cyBkZXIgU3RhbmRvcnRlLUxp -c3RlLCB6LkIuIEtBL0hBL0JPKSwgRGllbnN0Z3J1cHBlbi1Lw7xyemVsIChBL0IvQy9XRCkgdW5k -IGRpZSB6dWdld2llc2VuZW4gUGVyc29uZW4uIFJlaWhlbmZvbGdlIGluIGRlciBUYWJlbGxlIHdp -cmt0IHNpY2ggYXVmIGRpZSBTdGF0aXN0aWstRGFyc3RlbGx1bmcgYXVzLjwvcD4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RGVmYXVsdC1SZWloZW5mb2xnZSBuYWNoIFN0 -YW5kb3J0Ojwvc3Ryb25nPiBIYXVwdHdhY2hlbiBvYmVuIChLQSwgSEEpLCBkYW5uIGRpZSBhbmRl -cmVuLiBEaWUgSUQgaXN0IHRlY2huaXNjaCB1bmQgc29sbHRlIHNwcmVjaGVuZCBibGVpYmVuICh6 -LkIuIDxjb2RlPnRfS0FfQTwvY29kZT4pLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9k -aXY+CiAgICAgICAgICAgICAgICAgICAgPC9kZXRhaWxzPgoKICAgICAgICAgICAgICAgICAgICA8 -c2VjdGlvbiBjbGFzcz0iYWRtaW4tc2VrdGlvbiIgaWQ9ImFkbWluLXNla3Rpb24tbWlrcm90ZWFt -cyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXNla3Rpb24ta29w -ZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+TWlrcm90ZWFtLUxpc3RlPC9oMz4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1taWtyb3RlYW0tbmV1 -IiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGciPk5ldWVzIE1pa3JvdGVhbTwvYnV0dG9uPgogICAgICAg -ICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNs -YXNzPSJhZG1pbi10YWJlbGxlIiBpZD0ibWlrcm90ZWFtcy10YWJlbGxlIj4KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6 -NTBweCI+UG9zPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0 -eWxlPSJ3aWR0aDoxMzBweCI+SUQ8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8dGg+TmFtZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0 -aCBzdHlsZT0id2lkdGg6OTBweCIgdGl0bGU9IlN0YW5kb3J0LUvDvHJ6ZWwgYXVzIGRlciBTdGFu -ZG9ydGUtTGlzdGUgKEtBL0hBL0JPLy4uLikiPlN0YW5kb3J0PC90aD4KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo5MHB4IiB0aXRsZT0iRGllbnN0 -Z3J1cHBlbi1Lw7xyemVsIChBL0IvQy9XRC8uLi4pIj5HcnVwcGU8L3RoPgogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjkwcHgiIHRpdGxlPSJBbnph -aGwgenVnZXdpZXNlbmUgUGVyc29uZW4iPlBlcnNvbmVuPC90aD4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoyMDBweCI+QWt0aW9uZW48L3RoPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJt -aWtyb3RlYW1zLXRib2R5Ij48L3Rib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxl -PgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tbWlrcm90ZWFtcy1zcGVp -Y2hlcm4iIGNsYXNzPSJidG4gYnRuLXByaW1hZXIiIHN0eWxlPSJtYXJnaW4tdG9wOjEycHgiPk1p -a3JvdGVhbXMgc3BlaWNoZXJuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9u -PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6IFN0YW5k -b3J0ZSAmIFNjaGljaHRmb2xnZSAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWlu -LXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItc3RhbmRvcnRlIj4KICAgICAgICAgICAgICAg -ICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1rb3BmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgy -PlN0YW5kb3J0ZSAmYW1wOyBTY2hpY2h0Zm9sZ2U8L2gyPgogICAgICAgICAgICAgICAgICAgICAg -ICA8YnV0dG9uIGlkPSJidG4tc3RhbmRvcnQtbmV1IiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGciPk5l -dWVyIFN0YW5kb3J0PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg -ICAgICAgICAgICAgPGRldGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9InN0 -YW5kb3J0ZSIgb3Blbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xh -c3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1IFN0YW5kb3J0ZW4gJmFt -cDsgU2NoaWNodGZvbGdlPHNwYW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4g -LyBadWtsYXBwZW48L3NwYW4+PC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2 -IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+ -PHN0cm9uZz5TdGFuZG9ydGU8L3N0cm9uZz4gc2luZCBkaWUgQXJiZWl0c29ydGUgZGVyIFZJMyAo -QXJuc2JlcmcsIEJvY2h1bSwgRG9ydG11bmQg4oCmKS4gSmVkZXIgU3RhbmRvcnQgaGF0IGVpbmUg -ZWlnZW5lIFNjaGljaHRyb3RhdGlvbiBmw7xyIGRpZSBEaWVuc3RncnVwcGVuIEEvQi9DLCBkaWUg -aW0gSGVhZGVyIGRlciBQbGFudW5nIGFscyDigJ5TY2hpY2h0Zm9sZ2UiLVplaWxlIGFuZ2V6ZWln -dCB3aXJkIChzb2Zlcm4gZGllIEFuemVpZ2UgaW0gVGFiIDxiPkZ1bmt0aW9uZW48L2I+IGFrdGl2 -aWVydCBpc3QpLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+Um90 -YXRpb25zLU11c3Rlcjo8L3N0cm9uZz48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPkFCQzwvYj4gPSBBLUZy -w7xoIC8gQi1TcMOkdCAvIEMtTmFjaHQ8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDxsaT48Yj5CQ0E8L2I+ID0gQi1GcsO8aCAvIEMtU3DDpHQgLyBBLU5hY2h0PC9saT4KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+Q0FCPC9iPiA9IEMtRnLDvGggLyBB -LVNww6R0IC8gQi1OYWNodDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxp -PjxiPlBvb2w8L2I+ID0gaW5kaXZpZHVlbGxlIEVpbnRlaWx1bmcsIGtlaW5lIGZlc3RlIFJvdGF0 -aW9uIChmw7xyIGZsZXhpYmxlIEVpbnNhdHpwb29scyk8L2xpPgogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+Umh5 -dGhtdXMgcGZsZWdlbjo8L3N0cm9uZz4gRGVyIGtvbmtyZXRlIFp5a2x1cyAoei5CLiB3w7ZjaGVu -dGxpY2ggd2VjaHNlbG5kIG9kZXIgMy1UYWdlLVJoeXRobXVzKSB3aXJkIMO8YmVyIGRlbiBSaHl0 -aG11cy1HZW5lcmF0b3IgcHJvIFN0YW5kb3J0IGVpbmdlc3RlbGx0LiBEZXIgR2VuZXJhdG9yIHNj -aHJlaWJ0IGbDvHIgamVkZXMgRGF0dW0gZWluZSBTY2hpY2h0Zm9sZ2UgaW4gZGllIEpTT04g4oCU -IGRpZSBBbnplaWdlIGltIEhlYWRlciB6aWVodCBkYW5uIGbDvHIgamVkZW4gVGFnIGRlbiBoaW50 -ZXJsZWd0ZW4gV2VydC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25n -PlNwYWx0ZW46PC9zdHJvbmc+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5OYW1lPC9iPiDigJQgdm9sbGVy -IFN0YW5kb3J0LU5hbWUgKHouQi4g4oCeQXJuc2JlcmciKS48L2xpPgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDxsaT48Yj5Lw7xyemVsPC9iPiDigJQgS3VyemZvcm0gZsO8ciBkaWUg -T0UtWnVvcmRudW5nIGluIGRlciBQZXJzb25hbC1MaXN0ZSAoei5CLiDigJ5BUiIpLjwvbGk+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPlBvb2w8L2I+IOKAlCBDaGVja2Jv -eDsgc2NoYWx0ZXQgZGllIGZlc3RlIFJvdGF0aW9uIGF1cy48L2xpPgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDxsaT48Yj5TY2hpY2h0Zm9sZ2UgKDE0IFRhZ2UpPC9iPiDigJQgVm9y -c2NoYXUgZGVyIG7DpGNoc3RlbiAxNCBUYWdlLCBmYXJibGljaCBjb2RpZXJ0LjwvbGk+CiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPkFrdGlvbmVuPC9iPiDigJQgUmh5dGht -dXMtR2VuZXJhdG9yIMO2ZmZuZW4gb2RlciBTdGFuZG9ydCBsw7ZzY2hlbi48L2xpPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxw -PjxzdHJvbmc+SGlud2Vpczo8L3N0cm9uZz4gRGllIFJlaWhlbmZvbGdlIGRlciBTdGFuZG9ydGUg -aW4gZGVyIFRhYmVsbGUgYmVzdGltbXQgYXVjaCBkaWUgUmVpaGVuZm9sZ2UgZGVyIFplaWxlbiBp -bSBIZWFkZXIgKG9iZW4gPSBlcnN0ZSBaZWlsZSkuPC9wPgogICAgICAgICAgICAgICAgICAgICAg -ICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2RldGFpbHM+CiAgICAgICAgICAgICAgICAg -ICAgPHRhYmxlIGNsYXNzPSJhZG1pbi10YWJlbGxlIiBpZD0ic3RhbmRvcnRlLXRhYmVsbGUiPgog -ICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPgogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NjBweCI+S8O8cnpl -bDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo3 -MHB4Ij5Qb29sPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+U2NoaWNo -dGZvbGdlIChlcnN0ZSAxNCBUYWdlIGFiIGhldXRlKTwvdGg+CiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoxNjBweCI+QWt0aW9uZW48L3RoPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVh -ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJzdGFuZG9ydGUtdGJvZHkiPjwv -dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8 -YnV0dG9uIGlkPSJidG4tc3RhbmRvcnRlLXNwZWljaGVybiIgY2xhc3M9ImJ0biBidG4tcHJpbWFl -ciIgc3R5bGU9Im1hcmdpbi10b3A6MTZweCI+U3RhbmRvcnRlIHNwZWljaGVybjwvYnV0dG9uPgog -ICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6IEVyc2NoZWlu -dW5nc2JpbGQg4oCUIE1hcmtpZXJ1bmdzLUVkaXRvciBtaXQgTGl2ZS1Wb3JzY2hhdSAtLT4KICAg -ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10 -YWItZXJzY2hlaW51bmdzYmlsZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRt -aW4ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5FcnNjaGVpbnVuZ3NiaWxkPC9o -Mj4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo2cHggMCAwIDA7Zm9u -dC1zaXplOjEycHg7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCkiPlZpc3VlbGxlIE1hcmtpZXJ1bmdl -biBpbSBQbGFudGFmZWwtS29wZiB1bmQgYmVpbSBMaXZlLVN5bmMgaW5kaXZpZHVlbGwgYW5wYXNz -ZW4uIMOEbmRlcnVuZ2VuIHNpbmQgc29mb3J0IHNpY2h0YmFyOyBzaWUgd2VyZGVuIGVyc3QgYmVp -bSBLbGljayBhdWYg4oCeU3BlaWNoZXJuIiBwZXJzaXN0aWVydC48L3A+CiAgICAgICAgICAgICAg -ICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iZXJzY2hlaW51bmdzYmls -ZC1pbmhhbHQiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAg -PCEtLSBUYWI6IFN0YXRpc3Rpay1MYXlvdXQgKFNVLW9ubHkpIOKAlCBSZWloZW5mb2xnZS9CcmVp -dGUvU2ljaHRiYXJrZWl0CiAgICAgICAgICAgICAgICAgICAgIGFsbGVyIFN0YXRpc3Rpay1LYWNo -ZWxuIGltIHZpc3VlbGxlbiA2LVNwYWx0ZW4tUmFzdGVyLiAtLT4KICAgICAgICAgICAgICAgIDxk -aXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItc3RhdGlzdGlrLWxh -eW91dCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29wZiI+CiAgICAg -ICAgICAgICAgICAgICAgICAgIDxoMj5TdGF0aXN0aWstTGF5b3V0PC9oMj4KICAgICAgICAgICAg -ICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo2cHggMCAwIDA7Zm9udC1zaXplOjEycHg7Y29s -b3I6dmFyKC0tdGV4dC1tdXRlZCkiPkJyZWl0ZSAoMToxIHZvbGwgwrcgMToyIGhhbGIgwrcgMToz -IGRyaXR0ZWwpIHVuZCBSZWloZW5mb2xnZSBkZXIgU3RhdGlzdGlrLUthY2hlbG4gZsO8ciA8c3Ry -b25nPmFsbGU8L3N0cm9uZz4gZmVzdGxlZ2VuLiBLbGljayBhdWYgZWluZSBLYWNoZWwgd2VjaHNl -bHQgZGllIEJyZWl0ZSwgWmllaGVuIMOkbmRlcnQgZGllIFJlaWhlbmZvbGdlLCBkYXMgQXVnZSBz -Y2hhbHRldCBzaWUgc2ljaHRiYXIvdW5zaWNodGJhci4gU2Nod2VyZSBQYW5lbHMgKEhlYXRtYXBz -LCBEZXRhaWxhbmFseXNlKSBibGVpYmVuIGF1ZiB2b2xsZXIgQnJlaXRlLjwvcD4KICAgICAgICAg -ICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzdGF0aXN0aWst -bGF5b3V0LWluaGFsdCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAg -ICAgICA8IS0tIFRhYjogU3RhdGlzdGlrLUJ1aWxkZXIg4oCUIG1laHJkaW1lbnNpb25hbGVyIE5v -Q29kZS1adXNhbW1lbmJhdQogICAgICAgICAgICAgICAgICAgICBlaWdlbmVyIEF1c3dlcnR1bmdl -biAoRmlsdGVyIC0+IERpbWVuc2lvbmVuIC0+IEtlbm56YWhsIC0+CiAgICAgICAgICAgICAgICAg -ICAgIERpYWdyYW1tdHlwKSBtaXQgTGl2ZS1GbHVzc2RpYWdyYW1tLCBUZXN0ZW4tVm9yc2NoYXUg -dW5kCiAgICAgICAgICAgICAgICAgICAgIFNwZWljaGVybiBhbHMgS2FjaGVsLiAtLT4KICAgICAg -ICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWIt -c3RhdGlzdGlrLWJ1aWxkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWlu -LWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+U3RhdGlzdGlrLUJ1aWxkZXI8L2gy -PgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjZweCAwIDAgMDtmb250 -LXNpemU6MTJweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKSI+RWlnZW5lIEF1c3dlcnR1bmdlbiB6 -dXNhbW1lbmtsaWNrZW46IERhdGVuIGZpbHRlcm4sIERpbWVuc2lvbmVuIHfDpGhsZW4sIEtlbm56 -YWhsICsgRGlhZ3JhbW10eXAgYmVzdGltbWVuLiBEYXMgRmx1c3NkaWFncmFtbSB6ZWlndCBkaWUg -TG9naWsgbGl2ZSwg4oCeVGVzdGVuIiBiYXV0IGRpZSBTdGF0aXN0aWsgc29mb3J0LiDigJ5BbHMg -S2FjaGVsIHNwZWljaGVybiIgbWFjaHQgc2llIGbDvHIgYWxsZSBpbSBTdGF0aXN0aWstVGFiIHNp -Y2h0YmFyIChBbm9yZG51bmcgaW0gU3RhdGlzdGlrLUxheW91dCkuPC9wPgogICAgICAgICAgICAg -ICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InN0YXRpc3Rpay1idWls -ZGVyLWluaGFsdCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAg -ICA8IS0tIFRhYjogS29uZmlndXJhdGlvbiArIEZ1bmt0aW9uZW4gKHBlciBTdWItTmF2IHVtc2No -YWx0YmFyKSAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVj -a3QiIGlkPSJhZG1pbi10YWItZWluc3RlbGx1bmdlbiI+CiAgICAgICAgICAgICAgICAgICAgPGRp -diBjbGFzcz0iYWRtaW4ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5Lb25maWd1 -cmF0aW9uICZhbXA7IEZ1bmt0aW9uZW48L2gyPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoK -ICAgICAgICAgICAgICAgICAgICA8bmF2IGNsYXNzPSJhZG1pbi1zdWJuYXYiIGFyaWEtbGFiZWw9 -IlN5c3RlbS1Lb25maWd1cmF0aW9uLVN1Yi1OYXZpZ2F0aW9uIj4KICAgICAgICAgICAgICAgICAg -ICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJhZG1pbi1zdWJuYXYtYnRuIGFrdGl2 -IiBkYXRhLXN1YnRhYj0iZWluc3RlbGx1bmdlbiI+R2xvYmFsZSBFaW5zdGVsbHVuZ2VuPC9idXR0 -b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0i -YWRtaW4tc3VibmF2LWJ0biIgZGF0YS1zdWJ0YWI9ImZlYXR1cmVzIj5GdW5rdGlvbmVuIGVpbi0v -YXVzYmxlbmRlbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvbmF2PgoKICAgICAgICAg -ICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYWRtaW4tc2VrdGlvbiIgaWQ9ImFkbWluLXNla3Rp -b24tZWluc3RlbGx1bmdlbiIgZGF0YS1zdWJ0YWItc2VrdGlvbj0iZWluc3RlbGx1bmdlbiI+CiAg -ICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXNla3Rpb24ta29wZiI+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+R2xvYmFsZSBFaW5zdGVsbHVuZ2VuPC9oMz4K -ICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxk -ZXRhaWxzIGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5PSJlaW5zdGVsbHVuZ2VuIiBv -cGVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9ImFk -bWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1IGRlbiBnbG9iYWxlbiBFaW5zdGVs -bHVuZ2VuPHNwYW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBw -ZW48L3NwYW4+PC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFz -cz0iYWRtaW4taW5mby1ib2R5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48 -c3Ryb25nPlBsYW51bmdzamFocjo8L3N0cm9uZz4gRGFzIEphaHIsIGbDvHIgZGFzIGRpZSBQbGFu -dW5nIGFrdHVlbGwgZ2VwZmxlZ3Qgd2lyZC4gQmVlaW5mbHVzc3QgZGllIEdlYnVydHN0YWctQW56 -ZWlnZSAocmVjaG5ldCBBbHRlciBiYXNpZXJlbmQgYXVmIGRpZXNlbSBKYWhyKSB1bmQgZGllIFZv -cnNjaGzDpGdlIGJlaW0gQW5sZWdlbiB2b24gRmVpZXJ0YWdlbi9GZXJpZW4uIFp1bSBKYWhyZXN3 -ZWNoc2VsIGhpZXIgYWt0dWFsaXNpZXJlbi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPHA+PHN0cm9uZz5JbmZvdGV4dDo8L3N0cm9uZz4gS3VyemVyIEhpbndlaXN0ZXh0ICh6 -LkIuIOKAnlJlaWhlbmZvbGdlIGF1ZiBXdW5zY2ggZGVyIEbDvHN0IGFuZ2VwYXNzdC4gL1dpdCIp -LCBkZXIgaW0gSW5mb3JtYXRpb25zZmVuc3RlciBvYmVuIHByb21pbmVudCBlcnNjaGVpbnQuIEd1 -dCBnZWVpZ25ldCBmw7xyIGt1cnplIOKAnkJyZWFraW5nIE5ld3MiIGFuIGRpZSBOdXR6ZXIuPC9w -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+U3VwcG9ydGluZm86 -PC9zdHJvbmc+IEFuc3ByZWNocGFydG5lciBiZWkgZmFjaGxpY2hlbiBvZGVyIHRlY2huaXNjaGVu -IEZyYWdlbi4gRXJzY2hlaW50IGltIEluZm9ybWF0aW9uc2ZlbnN0ZXIgZGFydW50ZXIuIEhpZXIg -VGVsZWZvbm51bW1lcm4sIE1haWxhZHJlc3NlbiB1bmQgZGllIGZhY2hsaWNoZSBWZXJhbnR3b3J0 -dW5nIGFuZ2ViZW4uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJv -bmc+U2NobGllw59pbmZvOjwvc3Ryb25nPiBIaW53ZWlzIHp1bSBBdXRvLVNodXRkb3duLVZlcmhh -bHRlbiwgZGVyIGltIEluZm9ybWF0aW9uc2ZlbnN0ZXIgYW5nZXplaWd0IHdpcmQuIFBsYXR6aGFs -dGVyIDxjb2RlPnttaW51dGVufTwvY29kZT4gd2lyZCBhdXRvbWF0aXNjaCBlcnNldHp0LjwvcD4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlNwZWljaGVybjo8L3N0 -cm9uZz4gw4RuZGVydW5nZW4gd2VyZGVuIG51ciBkdXJjaCBkZW4gU3BlaWNoZXJuLUJ1dHRvbiDD -vGJlcm5vbW1lbi4gRWluIFJlbG9hZCBkZXIgU2VpdGUgaXN0IGRhbmFjaCBuaWNodCBuw7Z0aWcu -PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAg -ICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWlu -c3RlbGx1bmdlbi1mb3JtIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9 -ImZvcm0tZ3J1cHBlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9y -PSJlaW5zLWphaHIiPlBsYW51bmdzamFocjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMnB4O2FsaWduLWl0ZW1zOmNl -bnRlcjtmbGV4LXdyYXA6d3JhcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJlaW5zLWphaHIiIGNsYXNzPSJmb3JtLWlucHV0IiBt -aW49IjIwMjAiIG1heD0iMjA5OSIgc3R5bGU9IndpZHRoOjEyMHB4Ij4KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWphaHJlc3dlY2hzZWwiIGNsYXNz -PSJidG4gYnRuLXNlayIgdHlwZT0iYnV0dG9uIiB0aXRsZT0iV2VjaHNlbHQgZGFzIFBsYW51bmdz -amFociBhdWYgZGFzIGxpbmtzIGVpbmdlc3RlbGx0ZSBKYWhyIOKAlCB2b3Igb2RlciB6dXLDvGNr -LiBCZXN0w6R0aWd1bmcgKyBSZWxvYWQsIGtlaW4gRGF0ZW52ZXJsdXN0LiI+QXVmIGVpbmdlc3Rl -bGx0ZXMgSmFociB3ZWNoc2VsbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBzdHlsZT0i -ZGlzcGxheTpibG9jaztjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4tdG9wOjZweCI+R2V3 -w7xuc2NodGVzIEphaHIgbGlua3MgZWluc3RlbGxlbiB1bmQgYXVmIOKAnkF1ZiBlaW5nZXN0ZWxs -dGVzIEphaHIgd2VjaHNlbG4iIGtsaWNrZW4g4oCUIGRpZSBBbnNpY2h0IHNwcmluZ3QgYXVmIGRh -cyBnZXfDpGhsdGUgSmFociAoPGI+dm9yIG9kZXIgenVyw7xjazwvYj4pIHVuZCB3aXJkIG5ldSBn -ZWxhZGVuLiBEYXMgYmxvw59lIMOEbmRlcm4gZGVzIEZlbGRlcyBzcGVpY2hlcnQgbm9jaCBuaWNo -dHM7IGVyc3QgZGVyIEJ1dHRvbiB3ZWNoc2VsdC4gRGllIFBsYW51bmdzYW5zaWNodCB6ZWlndCB6 -dXPDpHR6bGljaCBkZW4gSmFudWFyIGRlcyBGb2xnZWphaHJlcyBhbHMgVm9ycGxhbnVuZ3NiZXJl -aWNoOyBiZXJlaXRzIGRvcnQgZ2VwbGFudGUgRGllbnN0ZSBibGVpYmVuIHVudGVyIGlocmVtIERh -dHVtIGVyaGFsdGVuLiBLZWluIERhdGVudmVybHVzdC48L3NtYWxsPgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz -PSJmb3JtLWdydXBwZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZv -cj0iZWlucy1wYXBpZXJrb3JiLXRhZ2UiPlBhcGllcmtvcmItQXVmYmV3YWhydW5nIChUYWdlKTwv -bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJl -ciIgaWQ9ImVpbnMtcGFwaWVya29yYi10YWdlIiBjbGFzcz0iZm9ybS1pbnB1dCIgbWluPSIwIiBt -YXg9IjM2NSIgc3R5bGU9IndpZHRoOjEyMHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8c21hbGwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7 -bWFyZ2luLXRvcDo0cHgiPldpZSB2aWVsZSBUYWdlIHNvZnQtZ2Vsw7ZzY2h0ZSBQZXJzb25lbiBp -bSBQYXBpZXJrb3JiIHZlcmJsZWliZW4sIGJldm9yIHNpZSBiZWltIG7DpGNoc3RlbiBMw7ZzY2gt -Vm9yZ2FuZyBlbmRnw7xsdGlnIGVudGZlcm50IHdlcmRlbi4gPGNvZGU+MDwvY29kZT4gPSBzb2Zv -cnQgYmVpbSBuw6RjaHN0ZW4gTMO2c2NoLVZvcmdhbmcgYXVmcsOkdW1lbi48L3NtYWxsPgogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8ZGl2IGNsYXNzPSJmb3JtLWdydXBwZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPGxhYmVsIGZvcj0iZWlucy1lbWFpbC1kb21haW4iPkUtTWFpbCBBdXRvLVN1ZmZpeCBEb21h -aW48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0 -ZXh0IiBpZD0iZWlucy1lbWFpbC1kb21haW4iIGNsYXNzPSJmb3JtLWlucHV0IiBwbGFjZWhvbGRl -cj0iQHBvbGl6ZWkubnJ3LmRlIiBzdHlsZT0id2lkdGg6MjQwcHgiPgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDxzbWFsbCBzdHlsZT0iZGlzcGxheTpibG9jaztjb2xvcjp2YXIoLS10 -ZXh0LW11dGVkKTttYXJnaW4tdG9wOjRweCI+RGllc2UgRG9tYWluIHdpcmQgYXV0b21hdGlzY2gg -YW5nZWjDpG5ndCwgd2VubiBiZWltIEJlYXJiZWl0ZW4gZWluZXIgUGVyc29uZW4tRS1NYWlsIG51 -ciBkZXIgbG9rYWxlIFRlaWwgZWluZ2VnZWJlbiB3aXJkICh6LiBCLiA8ZW0+TXVlbGxlcjwvZW0+ -IOKGkiA8ZW0+TXVlbGxlckBwb2xpemVpLm5ydy5kZTwvZW0+KS4gV2lya3QgbnVyLCB3ZW5uIGRh -cyBGZWF0dXJlIDxlbT7igJ5FLU1haWw6IEF1dG8tU3VmZml4IjwvZW0+IGFrdGl2IGlzdC48L3Nt -YWxsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdydXBwZSI+CiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPGxhYmVsIGZvcj0iZWlucy1hdmF0YXItZ3JvZXNzZSI+UHJvZmlsYmlsZC1a -aWVsZ3LDtsOfZSAoUGl4ZWwsIHF1YWRyYXRpc2NoKTwvbGFiZWw+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9ImVpbnMtYXZhdGFyLWdyb2Vz -c2UiIGNsYXNzPSJmb3JtLWlucHV0IiBtaW49IjEwMCIgbWF4PSI2MDAiIHN0ZXA9IjIwIiBzdHls -ZT0id2lkdGg6MTIwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBz -dHlsZT0iZGlzcGxheTpibG9jaztjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4tdG9wOjRw -eCI+QmVpbSBVcGxvYWQgd2lyZCBkYXMgaG9jaGdlbGFkZW5lIEJpbGQgYXVmIGRpZXNlIEthbnRl -bmzDpG5nZSBoZXJ1bnRlcmdlcmVjaG5ldCB1bmQgYWxzIEpQRUcgZ2VzcGVpY2hlcnQuIEdyw7bD -n2VyID0gc2Now6RyZmVyLCBhYmVyIG1laHIgU3BlaWNoZXIgcHJvIEJpbGQuIFN0YW5kYXJkOiA8 -Y29kZT4yMDA8L2NvZGU+ICh+MTDigJMyNSZuYnNwO0tCIHBybyBEYXRlaSkuIFdlcnRlIHp3aXNj -aGVuIDEwMCB1bmQgNjAwIGVybGF1YnQuPC9zbWFsbD4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgPHA+PHN0cm9uZz5XYXMgaXN0IGRhcz88L3N0cm9uZz4gU29uZGVydGVybWluZSBzaW5kIEhp +bndlaXNlIG9kZXIgV2FybnVuZ2VuLCBkaWUgYW4gZWluZW0gYmVzdGltbXRlbiBUYWcgKG9kZXIg +WmVpdHJhdW0pIGbDvHIgYWxsZSBOdXR6ZXIgc2ljaHRiYXIgd2VyZGVuIOKAlCB6LkIuIFZlcmFu +c3RhbHR1bmdlbiwgZXJow7ZodGVyIFBlcnNvbmFsYmVkYXJmLCB3aWNodGlnZSBGcmlzdGVuLCBT +cGVycnRlcm1pbmUsIEZlaWVybiBvZGVyIEVyaW5uZXJ1bmdlbi48L3A+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8cD48c3Ryb25nPldpZSBzZWhlbiBkaWUgTnV0emVyIGRhcz88L3N0cm9u +Zz48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgPGxpPjxiPkltIFBsYW51bmdzLUhlYWRlcjwvYj4gZXJzY2hlaW50IGlu +IGRlciBIaW53ZWlzLVplaWxlICh1bnRlciBkZW0gV29jaGVudGFnKSBkYXMgZ2V3w6RobHRlIElj +b24gb2RlciBkZXIgRmFsbGJhY2sgKDxjb2RlPuKEuTwvY29kZT4gZsO8ciBIaW53ZWlzLCA8Y29k +ZT4hISE8L2NvZGU+IGbDvHIgV2FybnVuZykuIEhvdmVyIHplaWd0IGRlbiBUaXRlbCBhbHMgVG9v +bHRpcC48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5LbGljayBh +dWYgZGllIFplbGxlPC9iPiDDtmZmbmV0IGVpbiBBbnNpY2h0cy1Nb2RhbCBtaXQgSWNvbiwgVGl0 +ZWwsIGZvcm1hdGllcnRlbSBUZXh0IHVuZCBEYXR1bS4gU3VwZXJVc2VyIGvDtm5uZW4gZGlyZWt0 +IGJlYXJiZWl0ZW4gb2RlciBuZXVlIEhpbndlaXNlIGbDvHIgamVkZXMgRGF0dW0gYW5sZWdlbi48 +L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5CZWltIFBsYW5lbi9V +bXBsYW5lbiBlaW5lciBTY2hpY2h0PC9iPiBhbiBlaW5lbSBUYWcgbWl0IEhpbndlaXMgZXJzY2hl +aW50IOKAlCBqZSBuYWNoIFdhcm5tb2R1cyDigJQgZWluIFdhcm4tTW9kYWwsIGRhcyB2b3IgZGVy +IEVpbmdhYmUgYmVzdMOkdGlndCB3ZXJkZW4gbXVzcy48L2xpPgogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RmVs +ZGVyIGltIERldGFpbDo8L3N0cm9uZz48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPkRhdHVtIChWb24pPC9i +PiDigJQgUGZsaWNodGZlbGQuIFN0YXJ0IGRlcyBHw7xsdGlna2VpdHNiZXJlaWNocy48L2xpPgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5EYXR1bSAoQmlzKTwvYj4g4oCU +IG9wdGlvbmFsLiBMZWVyIGxhc3NlbiA9IGdpbHQgbnVyIGbDvHIgZGVuIFN0YXJ0LVRhZy4gR2Vz +ZXR6dCA9IFplaXRyYXVtIChWb24gYmlzIEJpcyBpbmtsdXNpdmUpLiBKZWRlciBUYWcgaW0gWmVp +dHJhdW0gemVpZ3QgZGVuIEhpbndlaXMuPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICA8bGk+PGI+VGl0ZWw8L2I+IOKAlCBrdXJ6ZSBCZXplaWNobnVuZyAobWF4LiAxMDAgWmVp +Y2hlbiksIGVyc2NoZWludCBpbSBUb29sdGlwIHVuZCBhbHMgw5xiZXJzY2hyaWZ0IGltIE1vZGFs +LiBJc3Qga2VpbiBUaXRlbCBnZXNldHp0LCB3aXJkIGRlciBBbmZhbmcgZGVzIFRleHRzIHZlcndl +bmRldC48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5UZXh0PC9i +PiDigJQgYXVzZsO8aHJsaWNoZXIgSW5oYWx0IG1pdCBtaW5pbWFsZW0gUmljaC1UZXh0LUVkaXRv +ci4gVW50ZXJzdMO8dHp0IDxiPmZldHQ8L2I+LCA8aT5rdXJzaXY8L2k+LCA8dT51bnRlcnN0cmlj +aGVuPC91PiwgQXVmesOkaGx1bmdlbiAo4oCiIC8gMS4pIHVuZCBFbnRmZXJuZW4gZGVyIEZvcm1h +dGllcnVuZy4gRWluZsO8Z2VuIGF1cyBhbmRlcmVuIFF1ZWxsZW4gKFdvcmQsIE1haWwpIGZ1bmt0 +aW9uaWVydCDigJQgRm9ybWF0aWVydW5nIHdpcmQgYXVmIGRhcyBadWzDpHNzaWdlIGJlcmVpbmln +dC48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5JY29uPC9iPiDi +gJQgRW1vamkgYXVzIGRlbSBQaWNrZXIgKDUgR3J1cHBlbikgb2RlciDigJ5rZWlucyIuIEVyc2V0 +enQgaW0gSGVhZGVyLUJhZGdlIGRhcyBnZW5lcmlzY2hlIFN5bWJvbC48L2xpPgogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5UeXA8L2I+IOKAlCA8aT5IaW53ZWlzPC9pPiAo +bmV1dHJhbCwgYmxhdSkgb2RlciA8aT5XYXJudW5nPC9pPiAocm90LW9yYW5nZSwgZsO8ciB3aWNo +dGlnZSBUaGVtZW4pLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxi +Pldhcm5tb2R1czwvYj4g4oCUIHN0ZXVlcnQsIHdhbm4gZGFzIFdhcm4tTW9kYWwgYmVpbSBQbGFu +ZW4gZXJzY2hlaW50OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+SW1tZXI8L2I+IOKA +lCBiZWkgamVkZXIgUGxhbnVuZyBpbSBaZWl0cmF1bSBlcnNjaGVpbnQgZGFzIE1vZGFsIGVybmV1 +dC48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPkVp +bm1hbGlnIHBybyBVc2VyPC9iPiDigJQgZXJzY2hlaW50IG51ciBiZWltIGVyc3RlbiBLbGljayBw +cm8gTnV0emVyIHVuZCBUZXJtaW4gKFNwZWljaGVydW5nIGxva2FsIGltIEJyb3dzZXIsIHBybyBU +ZXJtaW4tSUQpLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +bGk+PGI+QXVzPC9iPiDigJQgbnVyIGFscyBIZWFkZXItSWNvbiBzaWNodGJhciwga2VpbiBNb2Rh +bCBiZWltIFBsYW5lbi48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9u +Zz5UaXBwOjwvc3Ryb25nPiBGw7xyIHdpZWRlcmtlaHJlbmRlIEdyb8OfdmVyYW5zdGFsdHVuZ2Vu +IGVpbmZhY2ggbWl0IFplaXRyYXVtIGFubGVnZW4gKHouQi4gS2FybmV2YWxzd29jaGUgTW9udGFn +4oCTRnJlaXRhZykuIERlciBIaW53ZWlzIGVyc2NoZWludCBkYW5uIGF1ZiBhbGxlbiBUYWdlbjsg +ZGFzIFdhcm4tTW9kYWwgZXJzY2hlaW50IGltIE1vZHVzIOKAnkVpbm1hbGlnIiBudXIgZWlubWFs +IHBybyBOdXR6ZXIgdW5kIFRlcm1pbiwgbmljaHQgZsO8ciBqZWRlbiBUYWcgbmV1LjwvcD4KICAg +ICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kZXRhaWxz +PgoKICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImFkbWluLXRhYmVsbGUiIGlkPSJz +b25kZXJ0ZXJtaW5lLXRhYmVsbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+PHRy +Pjx0aCBzdHlsZT0id2lkdGg6NTJweCI+SWNvbjwvdGg+PHRoIHN0eWxlPSJ3aWR0aDoxODBweCI+ +RGF0dW0gLyBaZWl0cmF1bTwvdGg+PHRoPlRpdGVsPC90aD48dGggc3R5bGU9IndpZHRoOjExMHB4 +Ij5UeXA8L3RoPjx0aCBzdHlsZT0id2lkdGg6MTYwcHgiPldhcm5tb2R1czwvdGg+PHRoIHN0eWxl +PSJ3aWR0aDoxNzBweCI+QWt0aW9uZW48L3RoPjwvdHI+PC90aGVhZD4KICAgICAgICAgICAgICAg +ICAgICAgICAgPHRib2R5IGlkPSJzb25kZXJ0ZXJtaW5lLXRib2R5Ij48L3Rib2R5PgogICAgICAg +ICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAg +ICAgICA8IS0tIFRhYjogU2NoaWNodGNvZGVzICYgRmFyYmNvZGllcnVuZyAtLT4KICAgICAgICAg +ICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItc2No +aWNodGNvZGVzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1rb3BmIj4K +ICAgICAgICAgICAgICAgICAgICAgICAgPGgyPlNjaGljaHRjb2RlcyAmYW1wOyBGYXJiY29kaWVy +dW5nPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXNjaGljaHRj +b2RlLW5ldSIgY2xhc3M9ImJ0biBidG4tZXJmb2xnIj5OZXVlciBTY2hpY2h0Y29kZTwvYnV0dG9u +PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkZXRhaWxz +IGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5PSJzY2hpY2h0Y29kZXMiIG9wZW4+CiAg +ICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWNo +ZXYiPuKWuDwvc3Bhbj5IaW53ZWlzZSB6dSBTY2hpY2h0Y29kZXMgJmFtcDsgRmFyYmNvZGllcnVu +ZzxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWJhZGdlIj5BdWZrbGFwcGVuIC8gWnVrbGFwcGVuPC9z +cGFuPjwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4t +aW5mby1ib2R5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+V2FzIGlz +dCBlaW4gU2NoaWNodGNvZGU/PC9zdHJvbmc+IEVpbiBTY2hpY2h0Y29kZSBpc3QgZWluIEvDvHJ6 +ZWwsIGRhcyBlaW5lbiBiZXN0aW1tdGVuIERpZW5zdCwgZWluZSBBYndlc2VuaGVpdCBvZGVyIGVp +bmVuIGJlc29uZGVyZW4gU3RhdHVzIGVpbmVzIE1pdGFyYmVpdGVycyBhbiBlaW5lbSBUYWcgYmVz +Y2hyZWlidC4gSmVkZXIgQ29kZSBoYXQgZWluZSA8Yj5GYXJiY29kaWVydW5nPC9iPiAoSGludGVy +Z3J1bmQgKyBTY2hyaWZ0ZmFyYmUpLCBkaWUgaW0gUGxhbnVuZ3NyYXN0ZXIgZGlyZWt0IGFibGVz +YmFyIGlzdC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlNwYWx0 +ZW4gaW4gZGVyIMOcYmVyc2ljaHQ6PC9zdHJvbmc+PC9wPgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5GYXJiZmVs +ZDwvYj4g4oCUIFZvcnNjaGF1IGRlciBoaW50ZXJsZWd0ZW4gSGludGVyZ3J1bmRmYXJiZS48L2xp +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5Db2RlPC9iPiDigJQgZGVy +IHRlY2huaXNjaGUgU2NobMO8c3NlbCBpbiBkZXIgRGF0ZW5oYWx0dW5nICh6LkIuIDxjb2RlPkYt +REdMPC9jb2RlPiwgPGNvZGU+a3I8L2NvZGU+LCA8Y29kZT5Vcmw8L2NvZGU+KS48L2xpPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5Lw7xyemVsPC9iPiDigJQgZGllIEt1 +cnpmb3JtLCBkaWUgaW0gUGxhbnVuZ3NyYXN0ZXIgaW4gZGVyIFplbGxlIGFuZ2V6ZWlndCB3aXJk +ICh6LkIuIDxjb2RlPkY8L2NvZGU+LCA8Y29kZT5rcjwvY29kZT4pLiBLYW5uIG1pdCBkZW0gQ29k +ZSBpZGVudGlzY2ggc2Vpbi48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxs +aT48Yj5CZXplaWNobnVuZzwvYj4g4oCUIGRlciBMYW5nbmFtZSB6dXIgRXJsw6R1dGVydW5nICh6 +LkIuIOKAnkZyw7xoZGllbnN0IERHTCIpLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5HcnVwcGllcnVu +Zzo8L3N0cm9uZz4gTWl0IGRlbSBBdXN3YWhsbWVuw7wgb2JlbiBrYW5uc3QgZHUgendpc2NoZW4g +dmVyc2NoaWVkZW5lbiBEYXJzdGVsbHVuZ2VuIHdlY2hzZWxuOjwvcD4KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+ +TmFjaCBTY2hpY2h0dHlwPC9iPiAoU3RhbmRhcmQpIOKAlCDDvGJlcnNpY2h0bGljaCBncnVwcGll +cnQgbmFjaCBGcsO8aC0vU3DDpHQtL05hY2h0ZGllbnN0LCBGcmVpLCBVcmxhdWIsIEtyYW5raGVp +dC9BdXNmYWxsLCBGb3J0YmlsZHVuZywgRGllbnN0ZS9FaW5zw6R0emUsIFNvbmRlcmZvcm1lbi4g +RGllIFp1b3JkbnVuZyBlcmZvbGd0IGF1dG9tYXRpc2NoIGFuaGFuZCBkZXMgQ29kZS1NdXN0ZXJz +LjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPkFscGhhYmV0aXNj +aCAoQ29kZSk8L2I+IOKAlCBhbGxlIENvZGVzIGluIGVpbmVyIExpc3RlIG5hY2ggS8O8cnplbCBz +b3J0aWVydC48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5BbHBo +YWJldGlzY2ggKEJlemVpY2hudW5nKTwvYj4g4oCUIGFsbGUgQ29kZXMgbmFjaCBMYW5nbmFtZSBz +b3J0aWVydCAoaGlsZnJlaWNoIHdlbm4gbWFuIG51ciBkZW4gTmFtZW4gZXJpbm5lcnQsIG5pY2h0 +IGRhcyBLw7xyemVsKS48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48 +Yj5LZWluZSBHcnVwcGllcnVuZzwvYj4g4oCUIHVuc29ydGllcnRlIE9yaWdpbmFscmVpaGVuZm9s +Z2Ugd2llIGluIGRlciBEYXRlaS48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91 +bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+UGZsZWdlIGltIFVJOjwv +c3Ryb25nPiBNaXQgPGI+4oCeTmV1ZXIgU2NoaWNodGNvZGUiPC9iPiBsZWdzdCBkdSBlaW5lbiBu +ZXVlbiBDb2RlIGFuLiBBdWYgamVkZSBLYXJ0ZSBrbGlja3N0IGR1IGRhcyA8Yj5CZWFyYmVpdGVu +LVN5bWJvbCAo4pyOKTwvYj4sIHVtIEvDvHJ6ZWwsIEJlemVpY2hudW5nLCBIaW50ZXJncnVuZC0g +dW5kIFNjaHJpZnRmYXJiZSB6dSDDpG5kZXJuLiBFaW5lIExpdmUtVm9yc2NoYXUgemVpZ3QgZGly +ZWt0IGRhcyBFcmdlYm5pcy4gR2Vsw7ZzY2h0IHdpcmQgw7xiZXIgZGVuIEzDtnNjaGVuLUJ1dHRv +biBpbSBFZGl0LURpYWxvZyDigJQgYmVzdGVoZW5kZSBFaW50csOkZ2UgaW4gZGVyIFBsYW51bmcg +bWl0IGRpZXNlbSBDb2RlIGJsZWliZW4gZXJoYWx0ZW4sIHdlcmRlbiBhYmVyIG9obmUgRmFyYmUg +ZGFyZ2VzdGVsbHQuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5D +b2RlIC8gdGVjaG5pc2NoZXIgU2NobMO8c3NlbDo8L3N0cm9uZz4gRGVyIENvZGUgaXN0IGRlciBJ +ZGVudGlmaWVyIGluIGRlciBEYXRlbmhhbHR1bmcgdW5kIG1pdCBhbGxlbiBQbGFudW5ncy1FaW50 +csOkZ2VuIHZlcmtuw7xwZnQuIEJlaW0gTmV1YW5sZWdlbiBmcmVpIHfDpGhsYmFyLCBiZWltIHNw +w6R0ZXJlbiBCZWFyYmVpdGVuIHNjaHJlaWJnZXNjaMO8dHp0IOKAlCBlaW5lIMOEbmRlcnVuZyB3 +w7xyZGUgYWxsZSBiZXN0ZWhlbmRlbiBFaW50csOkZ2UgaW5rb25zaXN0ZW50IG1hY2hlbi4gV2Vu +biBkZXIgQ29kZSB1bWJlbmFubnQgd2VyZGVuIG11c3M6IG5ldSBhbmxlZ2VuLCBhbHRlIEVpbnRy +w6RnZSBtYW51ZWxsIMOkbmRlcm4sIGFsdGVuIENvZGUgbMO2c2NoZW4uPC9wPgogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5UaXBwOjwvc3Ryb25nPiBGYXJiZmFtaWxpZW4g +a29uc2lzdGVudCBlaW5zZXR6ZW46IHJvdCA9IEZyw7xoZGllbnN0LCBibGF1ID0gU3DDpHRkaWVu +c3QsIGdyw7xuID0gTmFjaHRkaWVuc3QsIGdyYXUgPSBGcmVpL0hPLCByb3PDqSA9IEtyYW5raGVp +dCwgbGlsYSA9IExlaHJnYW5nLiBTbyBlcmtlbm50IGRhcyBBdWdlIG9obmUgTGVzZW4gZGllIFNj +aGljaHQuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAg +ICAgICA8L2RldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ic2NoaWNodGNvZGUt +dm9yc2NoYXUiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAg +PCEtLSBUYWI6IE1pa3JvdGVhbXMg4oCUIFBlcnNvbmVuLUdydXBwZW4gcHJvIFN0YW5kb3J0K0Rp +ZW5zdGdydXBwZSAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJz +dGVja3QiIGlkPSJhZG1pbi10YWItbWlrcm90ZWFtcyI+CiAgICAgICAgICAgICAgICAgICAgPGRp +diBjbGFzcz0iYWRtaW4ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5NaWtyb3Rl +YW1zPC9oMj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8 +ZGV0YWlscyBjbGFzcz0iYWRtaW4taW5mbyIgZGF0YS1pbmZvLWtleT0ibWlrcm90ZWFtcyI+CiAg +ICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWNo +ZXYiPuKWuDwvc3Bhbj5Xb3p1IE1pa3JvdGVhbXM/PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tYmFk +Z2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9zdW1tYXJ5PgogICAgICAgICAgICAg +ICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHkiPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPHA+PHN0cm9uZz5XYXMgc2luZCBNaWtyb3RlYW1zPzwvc3Ryb25nPiBFaW5l +IE1pa3JvdGVhbS1EZWZpbml0aW9uIGZhc3N0IGRpZSBQZXJzb25lbiB6dXNhbW1lbiwgZGllIGFu +IGVpbmVtIFN0YW5kb3J0IGdlbWVpbnNhbSBlaW5lIERpZW5zdGdydXBwZSBiaWxkZW4gKHouQi4g +4oCeS2FtZW4tQSIgPSBkaWUgREdMLVZlcmFudHdvcnRsaWNoZW4gZGVyIEdydXBwZSBBIGFtIFN0 +YW5kb3J0IEthbWVuKS4gRGllIFN0YXRpc3RpayAoSGVhdG1hcCArIFRhZ2VzLUFudGVpbGUgcHJv +IFRlYW0pIHdlcnRldCBkYW1pdCBhdXMsIHdpZSBvZnQgZGllIGVpbnplbG5lbiBUZWFtcyBnZW1l +aW5zYW0gaW0gRGllbnN0IHNpbmQuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+ +PHN0cm9uZz5QZmxlZ2U6PC9zdHJvbmc+IFBybyBFaW50cmFnIE5hbWUsIFN0YW5kb3J0LUvDvHJ6 +ZWwgKDIgQnVjaHN0YWJlbiBhdXMgZGVyIFN0YW5kb3J0ZS1MaXN0ZSwgei5CLiBLQS9IQS9CTyks +IERpZW5zdGdydXBwZW4tS8O8cnplbCAoQS9CL0MvV0QpIHVuZCBkaWUgenVnZXdpZXNlbmVuIFBl +cnNvbmVuLiBSZWloZW5mb2xnZSBpbiBkZXIgVGFiZWxsZSB3aXJrdCBzaWNoIGF1ZiBkaWUgU3Rh +dGlzdGlrLURhcnN0ZWxsdW5nIGF1cy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +cD48c3Ryb25nPkRlZmF1bHQtUmVpaGVuZm9sZ2UgbmFjaCBTdGFuZG9ydDo8L3N0cm9uZz4gSGF1 +cHR3YWNoZW4gb2JlbiAoS0EsIEhBKSwgZGFubiBkaWUgYW5kZXJlbi4gRGllIElEIGlzdCB0ZWNo +bmlzY2ggdW5kIHNvbGx0ZSBzcHJlY2hlbmQgYmxlaWJlbiAoei5CLiA8Y29kZT50X0tBX0E8L2Nv +ZGU+KS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAg +ICAgIDwvZGV0YWlscz4KCiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImFkbWlu +LXNla3Rpb24iIGlkPSJhZG1pbi1zZWt0aW9uLW1pa3JvdGVhbXMiPgogICAgICAgICAgICAgICAg +ICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1zZWt0aW9uLWtvcGYiPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPGgzPk1pa3JvdGVhbS1MaXN0ZTwvaDM+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8YnV0dG9uIGlkPSJidG4tbWlrcm90ZWFtLW5ldSIgY2xhc3M9ImJ0biBidG4tZXJm +b2xnIj5OZXVlcyBNaWtyb3RlYW08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9k +aXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iYWRtaW4tdGFiZWxsZSIg +aWQ9Im1pa3JvdGVhbXMtdGFiZWxsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhl +YWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjUwcHgiPlBvczwvdGg+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTMwcHgiPklE +PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjkwcHgi +IHRpdGxlPSJTdGFuZG9ydC1Lw7xyemVsIGF1cyBkZXIgU3RhbmRvcnRlLUxpc3RlIChLQS9IQS9C +Ty8uLi4pIj5TdGFuZG9ydDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IDx0aCBzdHlsZT0id2lkdGg6OTBweCIgdGl0bGU9IkRpZW5zdGdydXBwZW4tS8O8cnplbCAoQS9C +L0MvV0QvLi4uKSI+R3J1cHBlPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgPHRoIHN0eWxlPSJ3aWR0aDo5MHB4IiB0aXRsZT0iQW56YWhsIHp1Z2V3aWVzZW5lIFBlcnNv +bmVuIj5QZXJzb25lbjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0 +aCBzdHlsZT0id2lkdGg6MjAwcHgiPkFrdGlvbmVuPC90aD4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBpZD0ibWlrcm90ZWFtcy10Ym9keSI+PC90 +Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAg +ICAgICAgPGJ1dHRvbiBpZD0iYnRuLW1pa3JvdGVhbXMtc3BlaWNoZXJuIiBjbGFzcz0iYnRuIGJ0 +bi1wcmltYWVyIiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4Ij5NaWtyb3RlYW1zIHNwZWljaGVybjwv +YnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KICAgICAgICAgICAgICAgIDwv +ZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBTdGFuZG9ydGUgJiBTY2hpY2h0Zm9sZ2Ug +LS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi10YWIgdmVyc3RlY2t0IiBpZD0i +YWRtaW4tdGFiLXN0YW5kb3J0ZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRt +aW4ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5TdGFuZG9ydGUgJmFtcDsgU2No +aWNodGZvbGdlPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXN0 +YW5kb3J0LW5ldSIgY2xhc3M9ImJ0biBidG4tZXJmb2xnIj5OZXVlciBTdGFuZG9ydDwvYnV0dG9u +PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkZXRhaWxz +IGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5PSJzdGFuZG9ydGUiIG9wZW4+CiAgICAg +ICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWNoZXYi +PuKWuDwvc3Bhbj5IaW53ZWlzZSB6dSBTdGFuZG9ydGVuICZhbXA7IFNjaGljaHRmb2xnZTxzcGFu +IGNsYXNzPSJhZG1pbi1pbmZvLWJhZGdlIj5BdWZrbGFwcGVuIC8gWnVrbGFwcGVuPC9zcGFuPjwv +c3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4taW5mby1i +b2R5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+U3RhbmRvcnRlPC9z +dHJvbmc+IHNpbmQgZGllIEFyYmVpdHNvcnRlIGRlciBWSTMgKEFybnNiZXJnLCBCb2NodW0sIERv +cnRtdW5kIOKApikuIEplZGVyIFN0YW5kb3J0IGhhdCBlaW5lIGVpZ2VuZSBTY2hpY2h0cm90YXRp +b24gZsO8ciBkaWUgRGllbnN0Z3J1cHBlbiBBL0IvQywgZGllIGltIEhlYWRlciBkZXIgUGxhbnVu +ZyBhbHMg4oCeU2NoaWNodGZvbGdlIi1aZWlsZSBhbmdlemVpZ3Qgd2lyZCAoc29mZXJuIGRpZSBB +bnplaWdlIGltIFRhYiA8Yj5GdW5rdGlvbmVuPC9iPiBha3RpdmllcnQgaXN0KS48L3A+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlJvdGF0aW9ucy1NdXN0ZXI6PC9zdHJv +bmc+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDxsaT48Yj5BQkM8L2I+ID0gQS1GcsO8aCAvIEItU3DDpHQgLyBDLU5h +Y2h0PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+QkNBPC9iPiA9 +IEItRnLDvGggLyBDLVNww6R0IC8gQS1OYWNodDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgPGxpPjxiPkNBQjwvYj4gPSBDLUZyw7xoIC8gQS1TcMOkdCAvIEItTmFjaHQ8L2xp +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5Qb29sPC9iPiA9IGluZGl2 +aWR1ZWxsZSBFaW50ZWlsdW5nLCBrZWluZSBmZXN0ZSBSb3RhdGlvbiAoZsO8ciBmbGV4aWJsZSBF +aW5zYXR6cG9vbHMpPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlJoeXRobXVzIHBmbGVnZW46PC9zdHJv +bmc+IERlciBrb25rcmV0ZSBaeWtsdXMgKHouQi4gd8O2Y2hlbnRsaWNoIHdlY2hzZWxuZCBvZGVy +IDMtVGFnZS1SaHl0aG11cykgd2lyZCDDvGJlciBkZW4gUmh5dGhtdXMtR2VuZXJhdG9yIHBybyBT +dGFuZG9ydCBlaW5nZXN0ZWxsdC4gRGVyIEdlbmVyYXRvciBzY2hyZWlidCBmw7xyIGplZGVzIERh +dHVtIGVpbmUgU2NoaWNodGZvbGdlIGluIGRpZSBKU09OIOKAlCBkaWUgQW56ZWlnZSBpbSBIZWFk +ZXIgemllaHQgZGFubiBmw7xyIGplZGVuIFRhZyBkZW4gaGludGVybGVndGVuIFdlcnQuPC9wPgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5TcGFsdGVuOjwvc3Ryb25nPjwv +cD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICA8bGk+PGI+TmFtZTwvYj4g4oCUIHZvbGxlciBTdGFuZG9ydC1OYW1lICh6LkIu +IOKAnkFybnNiZXJnIikuPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+ +PGI+S8O8cnplbDwvYj4g4oCUIEt1cnpmb3JtIGbDvHIgZGllIE9FLVp1b3JkbnVuZyBpbiBkZXIg +UGVyc29uYWwtTGlzdGUgKHouQi4g4oCeQVIiKS48L2xpPgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIDxsaT48Yj5Qb29sPC9iPiDigJQgQ2hlY2tib3g7IHNjaGFsdGV0IGRpZSBmZXN0 +ZSBSb3RhdGlvbiBhdXMuPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+ +PGI+U2NoaWNodGZvbGdlICgxNCBUYWdlKTwvYj4g4oCUIFZvcnNjaGF1IGRlciBuw6RjaHN0ZW4g +MTQgVGFnZSwgZmFyYmxpY2ggY29kaWVydC48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIDxsaT48Yj5Ba3Rpb25lbjwvYj4g4oCUIFJoeXRobXVzLUdlbmVyYXRvciDDtmZmbmVu +IG9kZXIgU3RhbmRvcnQgbMO2c2NoZW4uPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkhpbndlaXM6PC9z +dHJvbmc+IERpZSBSZWloZW5mb2xnZSBkZXIgU3RhbmRvcnRlIGluIGRlciBUYWJlbGxlIGJlc3Rp +bW10IGF1Y2ggZGllIFJlaWhlbmZvbGdlIGRlciBaZWlsZW4gaW0gSGVhZGVyIChvYmVuID0gZXJz +dGUgWmVpbGUpLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAg +ICAgICAgICAgPC9kZXRhaWxzPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iYWRt +aW4tdGFiZWxsZSIgaWQ9InN0YW5kb3J0ZS10YWJlbGxlIj4KICAgICAgICAgICAgICAgICAgICAg +ICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8dGggc3R5bGU9IndpZHRoOjYwcHgiPkvDvHJ6ZWw8L3RoPgogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NzBweCI+UG9vbDwvdGg+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlNjaGljaHRmb2xnZSAoZXJzdGUgMTQgVGFn +ZSBhYiBoZXV0ZSk8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHls +ZT0id2lkdGg6MTYwcHgiPkFrdGlvbmVuPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAg +ICAgICAgIDx0Ym9keSBpZD0ic3RhbmRvcnRlLXRib2R5Ij48L3Rib2R5PgogICAgICAgICAgICAg +ICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXN0YW5k +b3J0ZS1zcGVpY2hlcm4iIGNsYXNzPSJidG4gYnRuLXByaW1hZXIiIHN0eWxlPSJtYXJnaW4tdG9w +OjE2cHgiPlN0YW5kb3J0ZSBzcGVpY2hlcm48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2 +PgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBFcnNjaGVpbnVuZ3NiaWxkIOKAlCBNYXJraWVy +dW5ncy1FZGl0b3IgbWl0IExpdmUtVm9yc2NoYXUgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNs +YXNzPSJhZG1pbi10YWIgdmVyc3RlY2t0IiBpZD0iYWRtaW4tdGFiLWVyc2NoZWludW5nc2JpbGQi +PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAg +ICAgICAgICAgICAgICA8aDI+RXJzY2hlaW51bmdzYmlsZDwvaDI+CiAgICAgICAgICAgICAgICAg +ICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NnB4IDAgMCAwO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZh +cigtLXRleHQtbXV0ZWQpIj5WaXN1ZWxsZSBNYXJraWVydW5nZW4gaW0gUGxhbnRhZmVsLUtvcGYg +dW5kIGJlaW0gTGl2ZS1TeW5jIGluZGl2aWR1ZWxsIGFucGFzc2VuLiDDhG5kZXJ1bmdlbiBzaW5k +IHNvZm9ydCBzaWNodGJhcjsgc2llIHdlcmRlbiBlcnN0IGJlaW0gS2xpY2sgYXVmIOKAnlNwZWlj +aGVybiIgcGVyc2lzdGllcnQuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAg +ICAgICAgICAgICAgIDxkaXYgaWQ9ImVyc2NoZWludW5nc2JpbGQtaW5oYWx0Ij48L2Rpdj4KICAg +ICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBTdGF0aXN0aWst +TGF5b3V0IChTVS1vbmx5KSDigJQgUmVpaGVuZm9sZ2UvQnJlaXRlL1NpY2h0YmFya2VpdAogICAg +ICAgICAgICAgICAgICAgICBhbGxlciBTdGF0aXN0aWstS2FjaGVsbiBpbSB2aXN1ZWxsZW4gNi1T +cGFsdGVuLVJhc3Rlci4gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi10YWIg +dmVyc3RlY2t0IiBpZD0iYWRtaW4tdGFiLXN0YXRpc3Rpay1sYXlvdXQiPgogICAgICAgICAgICAg +ICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICA8 +aDI+U3RhdGlzdGlrLUxheW91dDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxl +PSJtYXJnaW46NnB4IDAgMCAwO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQp +Ij5CcmVpdGUgKDE6MSB2b2xsIMK3IDE6MiBoYWxiIMK3IDE6MyBkcml0dGVsKSB1bmQgUmVpaGVu +Zm9sZ2UgZGVyIFN0YXRpc3Rpay1LYWNoZWxuIGbDvHIgPHN0cm9uZz5hbGxlPC9zdHJvbmc+IGZl +c3RsZWdlbi4gS2xpY2sgYXVmIGVpbmUgS2FjaGVsIHdlY2hzZWx0IGRpZSBCcmVpdGUsIFppZWhl +biDDpG5kZXJ0IGRpZSBSZWloZW5mb2xnZSwgZGFzIEF1Z2Ugc2NoYWx0ZXQgc2llIHNpY2h0YmFy +L3Vuc2ljaHRiYXIuIFNjaHdlcmUgUGFuZWxzIChIZWF0bWFwcywgRGV0YWlsYW5hbHlzZSkgYmxl +aWJlbiBhdWYgdm9sbGVyIEJyZWl0ZS48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAg +ICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ic3RhdGlzdGlrLWxheW91dC1pbmhhbHQiPjwvZGl2 +PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6IFN0YXRp +c3Rpay1CdWlsZGVyIOKAlCBtZWhyZGltZW5zaW9uYWxlciBOb0NvZGUtWnVzYW1tZW5iYXUKICAg +ICAgICAgICAgICAgICAgICAgZWlnZW5lciBBdXN3ZXJ0dW5nZW4gKEZpbHRlciAtPiBEaW1lbnNp +b25lbiAtPiBLZW5uemFobCAtPgogICAgICAgICAgICAgICAgICAgICBEaWFncmFtbXR5cCkgbWl0 +IExpdmUtRmx1c3NkaWFncmFtbSwgVGVzdGVuLVZvcnNjaGF1IHVuZAogICAgICAgICAgICAgICAg +ICAgICBTcGVpY2hlcm4gYWxzIEthY2hlbC4gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz +PSJhZG1pbi10YWIgdmVyc3RlY2t0IiBpZD0iYWRtaW4tdGFiLXN0YXRpc3Rpay1idWlsZGVyIj4K +ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1rb3BmIj4KICAgICAgICAgICAg +ICAgICAgICAgICAgPGgyPlN0YXRpc3Rpay1CdWlsZGVyPC9oMj4KICAgICAgICAgICAgICAgICAg +ICAgICAgPHAgc3R5bGU9Im1hcmdpbjo2cHggMCAwIDA7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFy +KC0tdGV4dC1tdXRlZCkiPkVpZ2VuZSBBdXN3ZXJ0dW5nZW4genVzYW1tZW5rbGlja2VuOiBEYXRl +biBmaWx0ZXJuLCBEaW1lbnNpb25lbiB3w6RobGVuLCBLZW5uemFobCArIERpYWdyYW1tdHlwIGJl +c3RpbW1lbi4gRGFzIEZsdXNzZGlhZ3JhbW0gemVpZ3QgZGllIExvZ2lrIGxpdmUsIOKAnlRlc3Rl +biIgYmF1dCBkaWUgU3RhdGlzdGlrIHNvZm9ydC4g4oCeQWxzIEthY2hlbCBzcGVpY2hlcm4iIG1h +Y2h0IHNpZSBmw7xyIGFsbGUgaW0gU3RhdGlzdGlrLVRhYiBzaWNodGJhciAoQW5vcmRudW5nIGlt +IFN0YXRpc3Rpay1MYXlvdXQpLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAg +ICAgICAgICAgICAgICA8ZGl2IGlkPSJzdGF0aXN0aWstYnVpbGRlci1pbmhhbHQiPjwvZGl2Pgog +ICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6IEtvbmZpZ3Vy +YXRpb24gKyBGdW5rdGlvbmVuIChwZXIgU3ViLU5hdiB1bXNjaGFsdGJhcikgLS0+CiAgICAgICAg +ICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi10YWIgdmVyc3RlY2t0IiBpZD0iYWRtaW4tdGFiLWVp +bnN0ZWxsdW5nZW4iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWtvcGYi +PgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+S29uZmlndXJhdGlvbiAmYW1wOyBGdW5rdGlv +bmVuPC9oMj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAg +PG5hdiBjbGFzcz0iYWRtaW4tc3VibmF2IiBhcmlhLWxhYmVsPSJTeXN0ZW0tS29uZmlndXJhdGlv +bi1TdWItTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0i +YnV0dG9uIiBjbGFzcz0iYWRtaW4tc3VibmF2LWJ0biBha3RpdiIgZGF0YS1zdWJ0YWI9ImVpbnN0 +ZWxsdW5nZW4iPkdsb2JhbGUgRWluc3RlbGx1bmdlbjwvYnV0dG9uPgogICAgICAgICAgICAgICAg +ICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkbWluLXN1Ym5hdi1idG4iIGRh +dGEtc3VidGFiPSJmZWF0dXJlcyI+RnVua3Rpb25lbiBlaW4tL2F1c2JsZW5kZW48L2J1dHRvbj4K +ICAgICAgICAgICAgICAgICAgICA8L25hdj4KCiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24g +Y2xhc3M9ImFkbWluLXNla3Rpb24iIGlkPSJhZG1pbi1zZWt0aW9uLWVpbnN0ZWxsdW5nZW4iIGRh +dGEtc3VidGFiLXNla3Rpb249ImVpbnN0ZWxsdW5nZW4iPgogICAgICAgICAgICAgICAgICAgICAg +ICA8ZGl2IGNsYXNzPSJhZG1pbi1zZWt0aW9uLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPGgzPkdsb2JhbGUgRWluc3RlbGx1bmdlbjwvaDM+CiAgICAgICAgICAgICAgICAgICAg +ICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0iYWRtaW4t +aW5mbyIgZGF0YS1pbmZvLWtleT0iZWluc3RlbGx1bmdlbiIgb3Blbj4KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWNoZXYiPuKWuDwv +c3Bhbj5IaW53ZWlzZSB6dSBkZW4gZ2xvYmFsZW4gRWluc3RlbGx1bmdlbjxzcGFuIGNsYXNzPSJh +ZG1pbi1pbmZvLWJhZGdlIj5BdWZrbGFwcGVuIC8gWnVrbGFwcGVuPC9zcGFuPjwvc3VtbWFyeT4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWluZm8tYm9keSI+ +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5QbGFudW5nc2phaHI6 +PC9zdHJvbmc+IERhcyBKYWhyLCBmw7xyIGRhcyBkaWUgUGxhbnVuZyBha3R1ZWxsIGdlcGZsZWd0 +IHdpcmQuIEJlZWluZmx1c3N0IGRpZSBHZWJ1cnRzdGFnLUFuemVpZ2UgKHJlY2huZXQgQWx0ZXIg +YmFzaWVyZW5kIGF1ZiBkaWVzZW0gSmFocikgdW5kIGRpZSBWb3JzY2hsw6RnZSBiZWltIEFubGVn +ZW4gdm9uIEZlaWVydGFnZW4vRmVyaWVuLiBadW0gSmFocmVzd2VjaHNlbCBoaWVyIGFrdHVhbGlz +aWVyZW4uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+SW5m +b3RleHQ6PC9zdHJvbmc+IEt1cnplciBIaW53ZWlzdGV4dCAoei5CLiDigJ5SZWloZW5mb2xnZSBh +dWYgV3Vuc2NoIGRlciBGw7xzdCBhbmdlcGFzc3QuIC9XaXQiKSwgZGVyIGltIEluZm9ybWF0aW9u +c2ZlbnN0ZXIgb2JlbiBwcm9taW5lbnQgZXJzY2hlaW50LiBHdXQgZ2VlaWduZXQgZsO8ciBrdXJ6 +ZSDigJ5CcmVha2luZyBOZXdzIiBhbiBkaWUgTnV0emVyLjwvcD4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8cD48c3Ryb25nPlN1cHBvcnRpbmZvOjwvc3Ryb25nPiBBbnNwcmVjaHBh +cnRuZXIgYmVpIGZhY2hsaWNoZW4gb2RlciB0ZWNobmlzY2hlbiBGcmFnZW4uIEVyc2NoZWludCBp +bSBJbmZvcm1hdGlvbnNmZW5zdGVyIGRhcnVudGVyLiBIaWVyIFRlbGVmb25udW1tZXJuLCBNYWls +YWRyZXNzZW4gdW5kIGRpZSBmYWNobGljaGUgVmVyYW50d29ydHVuZyBhbmdlYmVuLjwvcD4KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlNjaGxpZcOfaW5mbzo8L3N0 +cm9uZz4gSGlud2VpcyB6dW0gQXV0by1TaHV0ZG93bi1WZXJoYWx0ZW4sIGRlciBpbSBJbmZvcm1h +dGlvbnNmZW5zdGVyIGFuZ2V6ZWlndCB3aXJkLiBQbGF0emhhbHRlciA8Y29kZT57bWludXRlbn08 +L2NvZGU+IHdpcmQgYXV0b21hdGlzY2ggZXJzZXR6dC48L3A+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPHA+PHN0cm9uZz5TcGVpY2hlcm46PC9zdHJvbmc+IMOEbmRlcnVuZ2VuIHdl +cmRlbiBudXIgZHVyY2ggZGVuIFNwZWljaGVybi1CdXR0b24gw7xiZXJub21tZW4uIEVpbiBSZWxv +YWQgZGVyIFNlaXRlIGlzdCBkYW5hY2ggbmljaHQgbsO2dGlnLjwvcD4KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2RldGFpbHM+CiAg +ICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVpbnN0ZWxsdW5nZW4tZm9ybSI+CiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdydXBwZSI+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iZWlucy1qYWhyIj5QbGFudW5n +c2phaHI8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9 +ImRpc3BsYXk6ZmxleDtnYXA6MTJweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXAi +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVy +IiBpZD0iZWlucy1qYWhyIiBjbGFzcz0iZm9ybS1pbnB1dCIgbWluPSIyMDIwIiBtYXg9IjIwOTki +IHN0eWxlPSJ3aWR0aDoxMjBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IDxidXR0b24gaWQ9ImJ0bi1qYWhyZXN3ZWNoc2VsIiBjbGFzcz0iYnRuIGJ0bi1zZWsiIHR5cGU9 +ImJ1dHRvbiIgdGl0bGU9IldlY2hzZWx0IGRhcyBQbGFudW5nc2phaHIgYXVmIGRhcyBsaW5rcyBl +aW5nZXN0ZWxsdGUgSmFociDigJQgdm9yIG9kZXIgenVyw7xjay4gQmVzdMOkdGlndW5nICsgUmVs +b2FkLCBrZWluIERhdGVudmVybHVzdC4iPkF1ZiBlaW5nZXN0ZWxsdGVzIEphaHIgd2VjaHNlbG48 +L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Y29sb3I6 +dmFyKC0tdGV4dC1tdXRlZCk7bWFyZ2luLXRvcDo2cHgiPkdld8O8bnNjaHRlcyBKYWhyIGxpbmtz +IGVpbnN0ZWxsZW4gdW5kIGF1ZiDigJ5BdWYgZWluZ2VzdGVsbHRlcyBKYWhyIHdlY2hzZWxuIiBr +bGlja2VuIOKAlCBkaWUgQW5zaWNodCBzcHJpbmd0IGF1ZiBkYXMgZ2V3w6RobHRlIEphaHIgKDxi +PnZvciBvZGVyIHp1csO8Y2s8L2I+KSB1bmQgd2lyZCBuZXUgZ2VsYWRlbi4gRGFzIGJsb8OfZSDD +hG5kZXJuIGRlcyBGZWxkZXMgc3BlaWNoZXJ0IG5vY2ggbmljaHRzOyBlcnN0IGRlciBCdXR0b24g +d2VjaHNlbHQuIERpZSBQbGFudW5nc2Fuc2ljaHQgemVpZ3QgenVzw6R0emxpY2ggZGVuIEphbnVh +ciBkZXMgRm9sZ2VqYWhyZXMgYWxzIFZvcnBsYW51bmdzYmVyZWljaDsgYmVyZWl0cyBkb3J0IGdl +cGxhbnRlIERpZW5zdGUgYmxlaWJlbiB1bnRlciBpaHJlbSBEYXR1bSBlcmhhbHRlbi4gS2VpbiBE +YXRlbnZlcmx1c3QuPC9zbWFsbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncnVwcGUiPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImVpbnMtcGFwaWVya29yYi10 +YWdlIj5QYXBpZXJrb3JiLUF1ZmJld2FocnVuZyAoVGFnZSk8L2xhYmVsPgogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJlaW5zLXBhcGllcmtv +cmItdGFnZSIgY2xhc3M9ImZvcm0taW5wdXQiIG1pbj0iMCIgbWF4PSIzNjUiIHN0eWxlPSJ3aWR0 +aDoxMjBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIHN0eWxlPSJk +aXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO21hcmdpbi10b3A6NHB4Ij5XaWUg +dmllbGUgVGFnZSBzb2Z0LWdlbMO2c2NodGUgUGVyc29uZW4gaW0gUGFwaWVya29yYiB2ZXJibGVp +YmVuLCBiZXZvciBzaWUgYmVpbSBuw6RjaHN0ZW4gTMO2c2NoLVZvcmdhbmcgZW5kZ8O8bHRpZyBl +bnRmZXJudCB3ZXJkZW4uIDxjb2RlPjA8L2NvZGU+ID0gc29mb3J0IGJlaW0gbsOkY2hzdGVuIEzD +tnNjaC1Wb3JnYW5nIGF1ZnLDpHVtZW4uPC9zbWFsbD4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1n cnVwcGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImVpbnMt -ZWRpdG9yLXRyaWdnZXIiPlNjaGljaHQtRWRpdG9yIMO2ZmZuZW4gbWl0PC9sYWJlbD4KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJlaW5zLWVkaXRvci10cmlnZ2Vy -IiBjbGFzcz0iZm9ybS1pbnB1dCIgc3R5bGU9IndpZHRoOjI0MHB4Ij4KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icmVjaHRzIj5SZWNodHNrbGljayAo -U3RhbmRhcmQpPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxv -cHRpb24gdmFsdWU9ImxpbmtzIj5MaW5rc2tsaWNrPC9vcHRpb24+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im1pdHRlIj5NYXVzcmFkLUtsaWNrIChN -aXR0ZSk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlv -biB2YWx1ZT0iZG9wcGVsIj5Eb3BwZWxrbGljazwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxz -bWFsbCBzdHlsZT0iZGlzcGxheTpibG9jaztjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4t -dG9wOjRweCI+TGVndCBmZXN0LCB3ZWxjaGUgTWF1cy1Ba3Rpb24gaW4gZGVyIFBsYW50YWZlbCBk -YXMgRHJvcGRvd24genVyIFNjaGljaHRhdXN3YWhsIMO2ZmZuZXQuIEVpbiBlaW5mYWNoZXIgPHN0 -cm9uZz5MaW5rc2tsaWNrIG1hcmtpZXJ0PC9zdHJvbmc+IGRpZSBaZWxsZSBpbW1lciBudXIgKGF1 -w59lciDigJ5MaW5rc2tsaWNrIiBpc3QgaGllciBnZXfDpGhsdCkuIFdpcmt0IGbDvHIgYWxsZSBO -dXR6ZXI7IGdyZWlmdCBuYWNoIGRlbSBuw6RjaHN0ZW4gTmV1bGFkZW4gZGVyIFNlaXRlLjwvc21h -bGw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3J1cHBlIiBzdHlsZT0icGFkZGluZzoxMnB4IDE0 -cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1jYXJkKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRl -ci1saWdodCk7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDxzdHJvbmc+SW5mby0vU3VwcG9ydHRleHRlIHVuZCBCZWRpZW51bmdzLUhpbndlaXNlPC9z -dHJvbmc+IHdlcmRlbiBpbSBUYWIgPGVtPuKAnkJlc2NocmlmdHVuZ2VuICZhbXA7IFRleHRlIjwv -ZW0+IGdlcGZsZWd0IChtaXQgRm9ybWF0aWVydW5ncy1FZGl0b3IpLgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlk -PSJidG4tZWluc3RlbGx1bmdlbi1zcGVpY2hlcm4iIGNsYXNzPSJidG4gYnRuLXByaW1hZXIiIHN0 -eWxlPSJtYXJnaW4tdG9wOjEycHgiPkVpbnN0ZWxsdW5nZW4gc3BlaWNoZXJuPC9idXR0b24+CiAg -ICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvc2VjdGlv -bj4KCiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImFkbWluLXNla3Rpb24gdmVy -c3RlY2t0IiBpZD0iYWRtaW4tc2VrdGlvbi1mZWF0dXJlcyIgZGF0YS1zdWJ0YWItc2VrdGlvbj0i -ZmVhdHVyZXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1zZWt0 -aW9uLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkZ1bmt0aW9uZW4gZWlu -LS9hdXNibGVuZGVuPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5 -PSJmZWF0dXJlcyIgb3Blbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5Pjxz -cGFuIGNsYXNzPSJhZG1pbi1pbmZvLWNoZXYiPuKWuDwvc3Bhbj5IaW53ZWlzZSB6dSBkZW4gRnVu -a3Rpb25lbjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWJhZGdlIj5BdWZrbGFwcGVuIC8gWnVrbGFw -cGVuPC9zcGFuPjwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xh -c3M9ImFkbWluLWluZm8tYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+ -PHN0cm9uZz5ad2Vjazo8L3N0cm9uZz4gSGllciBrw7ZubmVuIGVpbnplbG5lLCBrb21wbGV4ZXJl -IEZ1bmt0aW9uZW4gZGVyIEFud2VuZHVuZyBlaW4tIG9kZXIgYXVzZ2VzY2hhbHRldCB3ZXJkZW4u -IERhcyBoaWxmdCwgZGllIFVJIGplIG5hY2ggQW53ZW5kdW5nc2JlZGFyZiB6dSBlbnRzY2hsYWNr -ZW4g4oCUIHdhcyBuaWNodCBnZWJyYXVjaHQgd2lyZCwgd2lyZCBhdXNnZWJsZW5kZXQuPC9wPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+VmVyZsO8Z2JhcmUgU2No -YWx0ZXI6PC9zdHJvbmc+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPlNjaGljaHRmb2xnZW4t -QW56ZWlnZTwvYj4g4oCUIHplaWd0IGltIEhlYWRlciBwcm8gU3RhbmRvcnQgZGllIEFCQy9CQ0Ev -Q0FCLVJvdGF0aW9uLiBXZXIgZGllIFJvdGF0aW9uIG5pY2h0IGFrdGl2IHBmbGVndCwga2FubiBk -YXMgYXVzYmxlbmRlbi48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -bGk+PGI+U3TDpHJrZS1BbnplaWdlPC9iPiDigJQgRnxTfE4tQmVzZXR6dW5nc3phaGwgcHJvIFRh -ZyBpbSBIZWFkZXIuIEtlcm4tRmVhdHVyZSBmw7xyIGRpZSBCZXNldHp1bmdzcGxhbnVuZy48L2xp -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+UnVoZXplaXQtUHLD -vGZ1bmc8L2I+IOKAlCB3YXJudCBiZWkgJmx0OyAxMWggUnVoZXplaXQgendpc2NoZW4gendlaSBT -Y2hpY2h0ZW4gZGVyc2VsYmVuIFBlcnNvbi4gQXVzIEFyYlpHLVNpY2h0IHdpY2h0aWcuPC9saT4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPkZyZW1kLcOEbmRlcnVu -ZyBXYXJudW5nPC9iPiDigJQgQmVzdMOkdGlndW5nLCB3ZW5uIG1hbiBkaWUgU2NoaWNodCBlaW5l -ciBhbmRlcmVuIFBlcnNvbiDDpG5kZXJ0LiBTY2jDvHR6dCB2b3IgdmVyc2VoZW50bGljaGVuIMOE -bmRlcnVuZ2VuLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48 -Yj5GYWlybmVzcy1BbnplaWdlPC9iPiDigJQgemVpZ3QgcHJvIFBlcnNvbiBkYXMgVmVyaMOkbHRu -aXMgdm9uIFdvY2hlbmVuZC0vRmVpZXJ0YWdzZGllbnN0ZW4gaW4gZGVyIFN0YXRpc3Rpay1BdXN3 -ZXJ0dW5nLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5N -dXN0ZXItQW5hbHlzZTwvYj4g4oCUIGVya2VubnQgQXVmZsOkbGxpZ2tlaXRlbiAoei5CLiB3aWVk -ZXJob2x0ZSBGcsO8aC1uYWNoLU5hY2h0LUZvbGdlbiwgdW5nbGVpY2hlIFZlcnRlaWx1bmcpLjwv -bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5BYndlc2VuaGVp -dHMtS2FjaGVsbjwvYj4g4oCUIHplaWd0IHBybyBQZXJzb24gZWluZSBrb21wYWt0ZSBBYndlc2Vu -aGVpdHMtw5xiZXJzaWNodCAoS3JhbmsvVXJsYXViL0xHL0FaQSkuPC9saT4KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPkRldGFpbC1UYWJlbGxlPC9iPiDigJQgYXVz -a2xhcHBiYXJlIFN0YXRpc3Rpay1UYWJlbGxlIG1pdCBhbGxlbiBFaW56ZWx3ZXJ0ZW4uPC9saT4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIDxwPjxzdHJvbmc+U29mb3J0LVdpcmt1bmc6PC9zdHJvbmc+IMOEbmRlcnVu -Z2VuIHdlcmRlbiBzb2ZvcnQgZ2VzcGVpY2hlcnQgdW5kIGdyZWlmZW4gZGlyZWt0IChvaG5lIFNl -aXRlbi1SZWxvYWQpIOKAlCBkZXIgZW50c3ByZWNoZW5kZSBCZXJlaWNoIGVyc2NoZWludC92ZXJz -Y2h3aW5kZXQgdW1nZWhlbmQuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ -CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICAg -ICAgPGRpdiBpZD0iZmVhdHVyZXMtaW5oYWx0Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8 -L3NlY3Rpb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCgoKICAgICAgICAgICAgICAgIDwhLS0g -VGFiOiBCYWNrdXBzIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIHZl -cnN0ZWNrdCIgaWQ9ImFkbWluLXRhYi1iYWNrdXBzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2 -IGNsYXNzPSJhZG1pbi1rb3BmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPkJhY2t1cHMg -JmFtcDsgV2llZGVyaGVyc3RlbGx1bmc8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0 -dG9uIGlkPSJidG4tYmFja3VwLW5ldSIgY2xhc3M9ImJ0biBidG4tZXJmb2xnIj5OZXVlcyBCYWNr -dXAgamV0enQgZXJzdGVsbGVuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAg +ZW1haWwtZG9tYWluIj5FLU1haWwgQXV0by1TdWZmaXggRG9tYWluPC9sYWJlbD4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImVpbnMtZW1haWwt +ZG9tYWluIiBjbGFzcz0iZm9ybS1pbnB1dCIgcGxhY2Vob2xkZXI9IkBwb2xpemVpLm5ydy5kZSIg +c3R5bGU9IndpZHRoOjI0MHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21h +bGwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7bWFyZ2luLXRv +cDo0cHgiPkRpZXNlIERvbWFpbiB3aXJkIGF1dG9tYXRpc2NoIGFuZ2Vow6RuZ3QsIHdlbm4gYmVp +bSBCZWFyYmVpdGVuIGVpbmVyIFBlcnNvbmVuLUUtTWFpbCBudXIgZGVyIGxva2FsZSBUZWlsIGVp +bmdlZ2ViZW4gd2lyZCAoei4gQi4gPGVtPk11ZWxsZXI8L2VtPiDihpIgPGVtPk11ZWxsZXJAcG9s +aXplaS5ucncuZGU8L2VtPikuIFdpcmt0IG51ciwgd2VubiBkYXMgRmVhdHVyZSA8ZW0+4oCeRS1N +YWlsOiBBdXRvLVN1ZmZpeCI8L2VtPiBha3RpdiBpc3QuPC9zbWFsbD4KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFz +cz0iZm9ybS1ncnVwcGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBm +b3I9ImVpbnMtYXZhdGFyLWdyb2Vzc2UiPlByb2ZpbGJpbGQtWmllbGdyw7bDn2UgKFBpeGVsLCBx +dWFkcmF0aXNjaCk8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1 +dCB0eXBlPSJudW1iZXIiIGlkPSJlaW5zLWF2YXRhci1ncm9lc3NlIiBjbGFzcz0iZm9ybS1pbnB1 +dCIgbWluPSIxMDAiIG1heD0iNjAwIiBzdGVwPSIyMCIgc3R5bGU9IndpZHRoOjEyMHB4Ij4KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7 +Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7bWFyZ2luLXRvcDo0cHgiPkJlaW0gVXBsb2FkIHdpcmQg +ZGFzIGhvY2hnZWxhZGVuZSBCaWxkIGF1ZiBkaWVzZSBLYW50ZW5sw6RuZ2UgaGVydW50ZXJnZXJl +Y2huZXQgdW5kIGFscyBKUEVHIGdlc3BlaWNoZXJ0LiBHcsO2w59lciA9IHNjaMOkcmZlciwgYWJl +ciBtZWhyIFNwZWljaGVyIHBybyBCaWxkLiBTdGFuZGFyZDogPGNvZGU+MjAwPC9jb2RlPiAofjEw +4oCTMjUmbmJzcDtLQiBwcm8gRGF0ZWkpLiBXZXJ0ZSB6d2lzY2hlbiAxMDAgdW5kIDYwMCBlcmxh +dWJ0Ljwvc21hbGw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3J1cHBlIj4KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJlaW5zLWVkaXRvci10cmlnZ2VyIj5TY2hp +Y2h0LUVkaXRvciDDtmZmbmVuIG1pdDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPHNlbGVjdCBpZD0iZWlucy1lZGl0b3ItdHJpZ2dlciIgY2xhc3M9ImZvcm0taW5wdXQi +IHN0eWxlPSJ3aWR0aDoyNDBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IDxvcHRpb24gdmFsdWU9InJlY2h0cyI+UmVjaHRza2xpY2sgKFN0YW5kYXJkKTwvb3B0aW9uPgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsaW5rcyI+ +TGlua3NrbGljazwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +b3B0aW9uIHZhbHVlPSJtaXR0ZSI+TWF1c3JhZC1LbGljayAoTWl0dGUpPC9vcHRpb24+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRvcHBlbCI+RG9w +cGVsa2xpY2s8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVj +dD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgc3R5bGU9ImRpc3BsYXk6 +YmxvY2s7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7bWFyZ2luLXRvcDo0cHgiPkxlZ3QgZmVzdCwg +d2VsY2hlIE1hdXMtQWt0aW9uIGluIGRlciBQbGFudGFmZWwgZGFzIERyb3Bkb3duIHp1ciBTY2hp +Y2h0YXVzd2FobCDDtmZmbmV0LiBFaW4gZWluZmFjaGVyIDxzdHJvbmc+TGlua3NrbGljayBtYXJr +aWVydDwvc3Ryb25nPiBkaWUgWmVsbGUgaW1tZXIgbnVyIChhdcOfZXIg4oCeTGlua3NrbGljayIg +aXN0IGhpZXIgZ2V3w6RobHQpLiBXaXJrdCBmw7xyIGFsbGUgTnV0emVyOyBncmVpZnQgbmFjaCBk +ZW0gbsOkY2hzdGVuIE5ldWxhZGVuIGRlciBTZWl0ZS48L3NtYWxsPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz +PSJmb3JtLWdydXBwZSIgc3R5bGU9InBhZGRpbmc6MTJweCAxNHB4O2JhY2tncm91bmQ6dmFyKC0t +YmctY2FyZCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpO2JvcmRlci1yYWRp +dXM6NnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkluZm8tL1N1 +cHBvcnR0ZXh0ZSB1bmQgQmVkaWVudW5ncy1IaW53ZWlzZTwvc3Ryb25nPiB3ZXJkZW4gaW0gVGFi +IDxlbT7igJ5CZXNjaHJpZnR1bmdlbiAmYW1wOyBUZXh0ZSI8L2VtPiBnZXBmbGVndCAobWl0IEZv +cm1hdGllcnVuZ3MtRWRpdG9yKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWVpbnN0ZWxsdW5nZW4t +c3BlaWNoZXJuIiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVyIiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4 +Ij5FaW5zdGVsbHVuZ2VuIHNwZWljaGVybjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAg +ICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgICAgICAgICAg +ICAgIDxzZWN0aW9uIGNsYXNzPSJhZG1pbi1zZWt0aW9uIHZlcnN0ZWNrdCIgaWQ9ImFkbWluLXNl +a3Rpb24tZmVhdHVyZXMiIGRhdGEtc3VidGFiLXNla3Rpb249ImZlYXR1cmVzIj4KICAgICAgICAg +ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tc2VrdGlvbi1rb3BmIj4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDxoMz5GdW5rdGlvbmVuIGVpbi0vYXVzYmxlbmRlbjwvaDM+CiAg +ICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGV0 +YWlscyBjbGFzcz0iYWRtaW4taW5mbyIgZGF0YS1pbmZvLWtleT0iZmVhdHVyZXMiIG9wZW4+CiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz0iYWRtaW4taW5m +by1jaGV2Ij7ilrg8L3NwYW4+SGlud2Vpc2UgenUgZGVuIEZ1bmt0aW9uZW48c3BhbiBjbGFzcz0i +YWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xhcHBlbjwvc3Bhbj48L3N1bW1hcnk+ +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHki +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+WndlY2s6PC9zdHJv +bmc+IEhpZXIga8O2bm5lbiBlaW56ZWxuZSwga29tcGxleGVyZSBGdW5rdGlvbmVuIGRlciBBbndl +bmR1bmcgZWluLSBvZGVyIGF1c2dlc2NoYWx0ZXQgd2VyZGVuLiBEYXMgaGlsZnQsIGRpZSBVSSBq +ZSBuYWNoIEFud2VuZHVuZ3NiZWRhcmYgenUgZW50c2NobGFja2VuIOKAlCB3YXMgbmljaHQgZ2Vi +cmF1Y2h0IHdpcmQsIHdpcmQgYXVzZ2VibGVuZGV0LjwvcD4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICA8cD48c3Ryb25nPlZlcmbDvGdiYXJlIFNjaGFsdGVyOjwvc3Ryb25nPjwvcD4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDxsaT48Yj5TY2hpY2h0Zm9sZ2VuLUFuemVpZ2U8L2I+IOKAlCB6ZWln +dCBpbSBIZWFkZXIgcHJvIFN0YW5kb3J0IGRpZSBBQkMvQkNBL0NBQi1Sb3RhdGlvbi4gV2VyIGRp +ZSBSb3RhdGlvbiBuaWNodCBha3RpdiBwZmxlZ3QsIGthbm4gZGFzIGF1c2JsZW5kZW4uPC9saT4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPlN0w6Rya2UtQW56ZWln +ZTwvYj4g4oCUIEZ8U3xOLUJlc2V0enVuZ3N6YWhsIHBybyBUYWcgaW0gSGVhZGVyLiBLZXJuLUZl +YXR1cmUgZsO8ciBkaWUgQmVzZXR6dW5nc3BsYW51bmcuPC9saT4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPGxpPjxiPlJ1aGV6ZWl0LVByw7xmdW5nPC9iPiDigJQgd2FybnQg +YmVpICZsdDsgMTFoIFJ1aGV6ZWl0IHp3aXNjaGVuIHp3ZWkgU2NoaWNodGVuIGRlcnNlbGJlbiBQ +ZXJzb24uIEF1cyBBcmJaRy1TaWNodCB3aWNodGlnLjwvbGk+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDxsaT48Yj5GcmVtZC3DhG5kZXJ1bmcgV2FybnVuZzwvYj4g4oCUIEJl +c3TDpHRpZ3VuZywgd2VubiBtYW4gZGllIFNjaGljaHQgZWluZXIgYW5kZXJlbiBQZXJzb24gw6Ru +ZGVydC4gU2Now7x0enQgdm9yIHZlcnNlaGVudGxpY2hlbiDDhG5kZXJ1bmdlbi48L2xpPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+RmFpcm5lc3MtQW56ZWlnZTwv +Yj4g4oCUIHplaWd0IHBybyBQZXJzb24gZGFzIFZlcmjDpGx0bmlzIHZvbiBXb2NoZW5lbmQtL0Zl +aWVydGFnc2RpZW5zdGVuIGluIGRlciBTdGF0aXN0aWstQXVzd2VydHVuZy48L2xpPgogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+TXVzdGVyLUFuYWx5c2U8L2I+IOKA +lCBlcmtlbm50IEF1ZmbDpGxsaWdrZWl0ZW4gKHouQi4gd2llZGVyaG9sdGUgRnLDvGgtbmFjaC1O +YWNodC1Gb2xnZW4sIHVuZ2xlaWNoZSBWZXJ0ZWlsdW5nKS48L2xpPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8bGk+PGI+QWJ3ZXNlbmhlaXRzLUthY2hlbG48L2I+IOKAlCB6 +ZWlndCBwcm8gUGVyc29uIGVpbmUga29tcGFrdGUgQWJ3ZXNlbmhlaXRzLcOcYmVyc2ljaHQgKEty +YW5rL1VybGF1Yi9MRy9BWkEpLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIDxsaT48Yj5EZXRhaWwtVGFiZWxsZTwvYj4g4oCUIGF1c2tsYXBwYmFyZSBTdGF0aXN0aWst +VGFiZWxsZSBtaXQgYWxsZW4gRWluemVsd2VydGVuLjwvbGk+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ry +b25nPlNvZm9ydC1XaXJrdW5nOjwvc3Ryb25nPiDDhG5kZXJ1bmdlbiB3ZXJkZW4gc29mb3J0IGdl +c3BlaWNoZXJ0IHVuZCBncmVpZmVuIGRpcmVrdCAob2huZSBTZWl0ZW4tUmVsb2FkKSDigJQgZGVy +IGVudHNwcmVjaGVuZGUgQmVyZWljaCBlcnNjaGVpbnQvdmVyc2Nod2luZGV0IHVtZ2VoZW5kLjwv +cD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAg +ICAgICA8L2RldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImZlYXR1cmVz +LWluaGFsdCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgogICAgICAgICAg +ICAgICAgPC9kaXY+CgoKCiAgICAgICAgICAgICAgICA8IS0tIFRhYjogQmFja3VwcyAtLT4KICAg +ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10 +YWItYmFja3VwcyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29wZiI+ +CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5CYWNrdXBzICZhbXA7IFdpZWRlcmhlcnN0ZWxs +dW5nPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWJhY2t1cC1u +ZXUiIGNsYXNzPSJidG4gYnRuLWVyZm9sZyI+TmV1ZXMgQmFja3VwIGpldHp0IGVyc3RlbGxlbjwv +YnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxk +ZXRhaWxzIGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5PSJiYWNrdXBzIiBvcGVuPgog +ICAgICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1j +aGV2Ij7ilrg8L3NwYW4+SGlud2Vpc2UgenUgQmFja3VwczxzcGFuIGNsYXNzPSJhZG1pbi1pbmZv +LWJhZGdlIj5BdWZrbGFwcGVuIC8gWnVrbGFwcGVuPC9zcGFuPjwvc3VtbWFyeT4KICAgICAgICAg +ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4taW5mby1ib2R5Ij4KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+V2FzIGlzdCBpbiBlaW5lbSBCYWNrdXA/PC9zdHJv +bmc+IEVpbmUgMToxLUtvcGllIGRlciBEYXRlaSA8Y29kZT5wbGFudW5nLmpzb248L2NvZGU+IOKA +lCBhbHNvIGFsbGUgU2NoaWNodC1FaW50csOkZ2UgdW5kIEtvbW1lbnRhcmUgenVtIFplaXRwdW5r +dCBkZXMgQmFja3Vwcy4gUGVyc29uZW5saXN0ZSwgRmVpZXJ0YWdlLCBGZXJpZW4gdW5kIGFuZGVy +ZSBBZG1pbi1Lb25maWd1cmF0aW9uIHNpbmQgPGVtPm5pY2h0PC9lbT4gVGVpbCBkZXMgQmFja3Vw +cyAoZGllIGxpZWdlbiBpbiA8Y29kZT5hZG1pbi5qc29uPC9jb2RlPikuPC9wPgogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5XYW5uIHdlcmRlbiBCYWNrdXBzIGVyc3RlbGx0 +Pzwvc3Ryb25nPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+TWFudWVsbDwvYj4g4oCUIEtsaWNrIGF1ZiDi +gJ5OZXVlcyBCYWNrdXAgamV0enQgZXJzdGVsbGVuIiBvZGVyIGF1ZiBkYXMgQmFja3VwLVN5bWJv +bCBpbiBkZXIgSGF1cHQtVG9vbGJhci48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIDxsaT48Yj5Wb3IgRHVtbXlkYXRlbjwvYj4g4oCUIGF1dG9tYXRpc2NoIHZvciBkZW0gRWlu +c3BpZWxlbiB2b24gVGVzdGRhdGVuLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgPGxpPjxiPlZvciBSZXNldDwvYj4g4oCUIGF1dG9tYXRpc2NoIHZvciBkZW0g4oCeUGxhbnVu +ZyB6dXLDvGNrc2V0emVuIi48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxs +aT48Yj5Wb3IgV2llZGVyaGVyc3RlbGx1bmc8L2I+IOKAlCBhdXRvbWF0aXNjaCBiZXZvciBlaW4g +QmFja3VwIGVpbmdlc3BpZWx0IHdpcmQgKFNpY2hlcmhlaXRza29waWUgZGVyIGFrdHVlbGxlbiBQ +bGFudW5nKS48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+U3BlaWNoZXJvcnQ6PC9zdHJvbmc+IDxjb2Rl +PlZJMy9kYXRhL3BsYW51bmdfYmFja3VwXyouanNvbjwvY29kZT4gKGJlaW0gV2luZG93cy1EZXBs +b3ltZW50OiA8Y29kZT4lTldfSE9NRSVcVkkzX0RHTF9TZXJ2ZXJcZGF0YVw8L2NvZGU+KS4gRGll +IEJhY2t1cHMgbGllZ2VuIG51ciBsb2thbCBpbSBEYXRlbm9yZG5lciB1bmQgd2VyZGVuIG5pY2h0 +IGluIGdlbWVpbnNhbWVuIEFibGFnZW4gbWl0Z2Vmw7xocnQuPC9wPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPHA+PHN0cm9uZz5Ba3Rpb25lbiBwcm8gQmFja3VwOjwvc3Ryb25nPjwvcD4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8bGk+PGI+V2llZGVyaGVyc3RlbGxlbjwvYj4g4oCUIGVyc2V0enQgZGllIGFrdHVl +bGxlIFBsYW51bmcgZHVyY2ggZGFzIEJhY2t1cC4gVm9yaGVyIHdpcmQgZWluZSBTaWNoZXJoZWl0 +c2tvcGllIGRlciBqZXR6aWdlbiBQbGFudW5nIGVyc3RlbGx0ICg8Y29kZT5wbGFudW5nX2JhY2t1 +cF92b3Jfd2llZGVyaGVyc3RlbGx1bmdf4oCmPC9jb2RlPiksIGZhbGxzIGR1IHZlcnNlaGVudGxp +Y2ggZGFzIGZhbHNjaGUgQmFja3VwIGVpbmdlc3BpZWx0IGhhc3QuPC9saT4KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8bGk+PGI+SGVydW50ZXJsYWRlbjwvYj4g4oCUIGzDpGR0IGRp +ZSBKU09OLURhdGVpIGFscyBEb3dubG9hZC4gTsO8dHpsaWNoIGbDvHIgQXJjaGl2aWVydW5nIG9k +ZXIgV2VpdGVyZ2FiZS48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48 +Yj5Mw7ZzY2hlbjwvYj4g4oCUIGVudGZlcm50IGRpZSBCYWNrdXAtRGF0ZWkgcGVybWFuZW50Ljwv +bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgPHA+PHN0cm9uZz5XaWNodGlnIHZvciBkZW0gV2llZGVyaGVyc3RlbGxlbjo8L3N0 +cm9uZz4gQW0gYmVzdGVuIHZvcmhlciBhbGxlIEJlYXJiZWl0ZXIgaW5mb3JtaWVyZW4uIEVpbmUg +V2llZGVyaGVyc3RlbGx1bmcgw7xiZXJzY2hyZWlidCBkaWUgYWt0aXZlIFBsYW51bmcgc29mb3J0 +IOKAlCDDhG5kZXJ1bmdlbiwgZGllIG5hY2ggZGVtIFplaXRwdW5rdCBkZXMgQmFja3VwcyBnZW1h +Y2h0IHd1cmRlbiwgc2luZCBkYW5uIGluIGRlciBTaWNoZXJoZWl0c2tvcGllIGFicnVmYmFyLCBh +YmVyIG5pY2h0IG1laHIgaW4gZGVyIGFrdGl2ZW4gUGxhbnVuZy48L3A+CiAgICAgICAgICAgICAg +ICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAg +ICAgICAgICAgICA8ZGl2IGlkPSJiYWNrdXAtbGlzdGUtZXJnZWJuaXMiIGNsYXNzPSJnZW4taW5m +byB2ZXJzdGVja3QiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PgogICAgICAgICAg +ICAgICAgICAgIDx0YWJsZSBjbGFzcz0iYWRtaW4tdGFiZWxsZSIgaWQ9ImJhY2t1cC10YWJlbGxl +Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPjx0cj4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTgwcHgiPkVyc3RlbGx0IGFtPC90aD4KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTMwcHgiPlR5cDwvdGg+CiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjIwMHB4Ij5JbmhhbHQ8 +L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkRhdGVpbmFtZTwvdGg+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjkwcHg7dGV4dC1hbGlnbjpy +aWdodCI+R3LDtsOfZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9 +IndpZHRoOjMwMHB4Ij5Ba3Rpb25lbjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ +PC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJiYWNrdXAtdGJvZHki +PjwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwv +ZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBIaW53ZWlzZS1Qcm90b2tvbGwgKG51ciBT +dXBlclVzZXIpIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIHZlcnN0 +ZWNrdCIgaWQ9ImFkbWluLXRhYi1oaW53ZWlzZS1wcm90b2tvbGwiPgogICAgICAgICAgICAgICAg +ICAgIDxkaXYgY2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+ +SGlud2Vpc2UtUHJvdG9rb2xsPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9 +ImFkbWluLWtvcGYtc3ViIj5BbGxlIGFrdGl2ZW4gSW4tQXBwLUhpbndlaXNlIG1pdCBFbXBmw6Ru +Z2VyLUxpc3RlIHVuZCBMZXNlLVN0YXR1cy4gTnVyIHNpY2h0YmFyIGbDvHIgU3VwZXJVc2VyLiDD +hGx0ZXJlIEhpbndlaXNlICgmZ3Q7IDMwIFRhZ2UgVU5EIHZvbiBhbGxlbiBFbXBmw6RuZ2VybiBn +ZWxlc2VuKSB3ZXJkZW4gYXV0b21hdGlzY2ggYXVzZ2Vyw6R1bXQuPC9wPgogICAgICAgICAgICAg +ICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhpbndlaXNlLXBy +b3Rva29sbC10b29sYmFyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlR5cDoKICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9ImhwLWZpbHRlci10eXAiIGNsYXNz +PSJmb3JtLWlucHV0IiBzdHlsZT0id2lkdGg6MjAwcHgiPgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+4oCUIGFsbGUg4oCUPC9vcHRpb24+CiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaWRlbnRpdGFldF9nZWFlbmRl +cnQiPklkZW50aXTDpHQgZ2XDpG5kZXJ0PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icm9sbGVfZ2VhZW5kZXJ0Ij5Sb2xsZSBnZcOkbmRlcnQ8 +L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJi +YWNrdXBfd2llZGVyaGVyZ2VzdGVsbHQiPkJhY2t1cCB3aWVkZXJoZXJnZXN0ZWxsdDwvb3B0aW9u +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InBsYW51bmdf +cmVzZXQiPlBsYW51bmcgenVyw7xja2dlc2V0enQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJrcmFua21lbGR1bmciPktyYW5rbWVsZHVuZzwv +b3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAg +ICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5BYjog +ICAgPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJocC1maWx0ZXItdm9uIiBjbGFzcz0iZm9ybS1pbnB1 +dCIgc3R5bGU9IndpZHRoOjE0MHB4Ij48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8 +bGFiZWw+QmlzOiAgIDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iaHAtZmlsdGVyLWJpcyIgY2xhc3M9 +ImZvcm0taW5wdXQiIHN0eWxlPSJ3aWR0aDoxNDBweCI+PC9sYWJlbD4KICAgICAgICAgICAgICAg +ICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlayBidG4ta2xl +aW4iIGlkPSJocC1ha3R1YWxpc2llcmVuIj5Ba3R1YWxpc2llcmVuPC9idXR0b24+CiAgICAgICAg +ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJhZG1p +bi10YWJlbGxlIGhpbndlaXNlLXByb3Rva29sbC10YWJlbGxlIj4KICAgICAgICAgICAgICAgICAg +ICAgICAgPHRoZWFkPjx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0i +d2lkdGg6MTIwcHgiPldhbm48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0 +eWxlPSJ3aWR0aDoxNTBweCI+VHlwPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0 +aCBzdHlsZT0id2lkdGg6MTIwcHgiPkF1c2dlbMO2c3Qgdm9uPC90aD4KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDx0aD5Lb250ZXh0PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IDx0aCBzdHlsZT0id2lkdGg6MzAwcHgiPkVtcGbDpG5nZXIgJmFtcDsgTGVzZXN0YXR1czwvdGg+ +CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+PC90aGVhZD4KICAgICAgICAgICAgICAgICAg +ICAgICAgPHRib2R5IGlkPSJoaW53ZWlzZS1wcm90b2tvbGwtdGJvZHkiPjwvdGJvZHk+CiAgICAg +ICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAg +ICAgICAgIDwhLS0gVGFiOiBJbXBvcnQgKEV4Y2VsKSAtLT4KICAgICAgICAgICAgICAgIDxkaXYg +Y2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItaW1wb3J0Ij4KICAgICAg +ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1rb3BmIj4KICAgICAgICAgICAgICAgICAg +ICAgICAgPGgyPkV4Y2VsLUltcG9ydDwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAg ICAgICAgICAgICAgICAgICAgPGRldGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1r -ZXk9ImJhY2t1cHMiIG9wZW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFu -IGNsYXNzPSJhZG1pbi1pbmZvLWNoZXYiPuKWuDwvc3Bhbj5IaW53ZWlzZSB6dSBCYWNrdXBzPHNw -YW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+ -PC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZv -LWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5XYXMgaXN0IGlu -IGVpbmVtIEJhY2t1cD88L3N0cm9uZz4gRWluZSAxOjEtS29waWUgZGVyIERhdGVpIDxjb2RlPnBs -YW51bmcuanNvbjwvY29kZT4g4oCUIGFsc28gYWxsZSBTY2hpY2h0LUVpbnRyw6RnZSB1bmQgS29t -bWVudGFyZSB6dW0gWmVpdHB1bmt0IGRlcyBCYWNrdXBzLiBQZXJzb25lbmxpc3RlLCBGZWllcnRh -Z2UsIEZlcmllbiB1bmQgYW5kZXJlIEFkbWluLUtvbmZpZ3VyYXRpb24gc2luZCA8ZW0+bmljaHQ8 -L2VtPiBUZWlsIGRlcyBCYWNrdXBzIChkaWUgbGllZ2VuIGluIDxjb2RlPmFkbWluLmpzb248L2Nv -ZGU+KS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPldhbm4gd2Vy -ZGVuIEJhY2t1cHMgZXJzdGVsbHQ/PC9zdHJvbmc+PC9wPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5NYW51ZWxs -PC9iPiDigJQgS2xpY2sgYXVmIOKAnk5ldWVzIEJhY2t1cCBqZXR6dCBlcnN0ZWxsZW4iIG9kZXIg -YXVmIGRhcyBCYWNrdXAtU3ltYm9sIGluIGRlciBIYXVwdC1Ub29sYmFyLjwvbGk+CiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPlZvciBEdW1teWRhdGVuPC9iPiDigJQgYXV0 -b21hdGlzY2ggdm9yIGRlbSBFaW5zcGllbGVuIHZvbiBUZXN0ZGF0ZW4uPC9saT4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+Vm9yIFJlc2V0PC9iPiDigJQgYXV0b21hdGlz -Y2ggdm9yIGRlbSDigJ5QbGFudW5nIHp1csO8Y2tzZXR6ZW4iLjwvbGk+CiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPGxpPjxiPlZvciBXaWVkZXJoZXJzdGVsbHVuZzwvYj4g4oCUIGF1 -dG9tYXRpc2NoIGJldm9yIGVpbiBCYWNrdXAgZWluZ2VzcGllbHQgd2lyZCAoU2ljaGVyaGVpdHNr -b3BpZSBkZXIgYWt0dWVsbGVuIFBsYW51bmcpLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5TcGVpY2hl -cm9ydDo8L3N0cm9uZz4gPGNvZGU+VkkzL2RhdGEvcGxhbnVuZ19iYWNrdXBfKi5qc29uPC9jb2Rl -PiAoYmVpbSBXaW5kb3dzLURlcGxveW1lbnQ6IDxjb2RlPiVOV19IT01FJVxWSTNfREdMX1NlcnZl -clxkYXRhXDwvY29kZT4pLiBEaWUgQmFja3VwcyBsaWVnZW4gbnVyIGxva2FsIGltIERhdGVub3Jk -bmVyIHVuZCB3ZXJkZW4gbmljaHQgaW4gZ2VtZWluc2FtZW4gQWJsYWdlbiBtaXRnZWbDvGhydC48 -L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkFrdGlvbmVuIHBybyBC -YWNrdXA6PC9zdHJvbmc+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5XaWVkZXJoZXJzdGVsbGVuPC9iPiDi -gJQgZXJzZXR6dCBkaWUgYWt0dWVsbGUgUGxhbnVuZyBkdXJjaCBkYXMgQmFja3VwLiBWb3JoZXIg -d2lyZCBlaW5lIFNpY2hlcmhlaXRza29waWUgZGVyIGpldHppZ2VuIFBsYW51bmcgZXJzdGVsbHQg -KDxjb2RlPnBsYW51bmdfYmFja3VwX3Zvcl93aWVkZXJoZXJzdGVsbHVuZ1/igKY8L2NvZGU+KSwg -ZmFsbHMgZHUgdmVyc2VoZW50bGljaCBkYXMgZmFsc2NoZSBCYWNrdXAgZWluZ2VzcGllbHQgaGFz -dC48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5IZXJ1bnRlcmxh -ZGVuPC9iPiDigJQgbMOkZHQgZGllIEpTT04tRGF0ZWkgYWxzIERvd25sb2FkLiBOw7x0emxpY2gg -ZsO8ciBBcmNoaXZpZXJ1bmcgb2RlciBXZWl0ZXJnYWJlLjwvbGk+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgPGxpPjxiPkzDtnNjaGVuPC9iPiDigJQgZW50ZmVybnQgZGllIEJhY2t1 -cC1EYXRlaSBwZXJtYW5lbnQuPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+ -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPldpY2h0aWcgdm9yIGRlbSBX -aWVkZXJoZXJzdGVsbGVuOjwvc3Ryb25nPiBBbSBiZXN0ZW4gdm9yaGVyIGFsbGUgQmVhcmJlaXRl -ciBpbmZvcm1pZXJlbi4gRWluZSBXaWVkZXJoZXJzdGVsbHVuZyDDvGJlcnNjaHJlaWJ0IGRpZSBh -a3RpdmUgUGxhbnVuZyBzb2ZvcnQg4oCUIMOEbmRlcnVuZ2VuLCBkaWUgbmFjaCBkZW0gWmVpdHB1 -bmt0IGRlcyBCYWNrdXBzIGdlbWFjaHQgd3VyZGVuLCBzaW5kIGRhbm4gaW4gZGVyIFNpY2hlcmhl -aXRza29waWUgYWJydWZiYXIsIGFiZXIgbmljaHQgbWVociBpbiBkZXIgYWt0aXZlbiBQbGFudW5n -LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAg -PC9kZXRhaWxzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImJhY2t1cC1saXN0ZS1lcmdl -Ym5pcyIgY2xhc3M9Imdlbi1pbmZvIHZlcnN0ZWNrdCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTJw -eCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJhZG1pbi10YWJlbGxl -IiBpZD0iYmFja3VwLXRhYmVsbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+PHRy -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoxODBweCI+RXJz -dGVsbHQgYW08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0 -aDoxMzBweCI+VHlwPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0i -d2lkdGg6MjAwcHgiPkluaGFsdDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+ -RGF0ZWluYW1lPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lk -dGg6OTBweDt0ZXh0LWFsaWduOnJpZ2h0Ij5HcsO2w59lPC90aD4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MzAwcHgiPkFrdGlvbmVuPC90aD4KICAgICAgICAg -ICAgICAgICAgICAgICAgPC90cj48L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJv -ZHkgaWQ9ImJhY2t1cC10Ym9keSI+PC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxl -PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6IEhpbndl -aXNlLVByb3Rva29sbCAobnVyIFN1cGVyVXNlcikgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNs -YXNzPSJhZG1pbi10YWIgdmVyc3RlY2t0IiBpZD0iYWRtaW4tdGFiLWhpbndlaXNlLXByb3Rva29s -bCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29wZiI+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDxoMj5IaW53ZWlzZS1Qcm90b2tvbGw8L2gyPgogICAgICAgICAgICAg -ICAgICAgICAgICA8cCBjbGFzcz0iYWRtaW4ta29wZi1zdWIiPkFsbGUgYWt0aXZlbiBJbi1BcHAt -SGlud2Vpc2UgbWl0IEVtcGbDpG5nZXItTGlzdGUgdW5kIExlc2UtU3RhdHVzLiBOdXIgc2ljaHRi -YXIgZsO8ciBTdXBlclVzZXIuIMOEbHRlcmUgSGlud2Vpc2UgKCZndDsgMzAgVGFnZSBVTkQgdm9u -IGFsbGVuIEVtcGbDpG5nZXJuIGdlbGVzZW4pIHdlcmRlbiBhdXRvbWF0aXNjaCBhdXNnZXLDpHVt -dC48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRp -diBjbGFzcz0iaGlud2Vpc2UtcHJvdG9rb2xsLXRvb2xiYXIiPgogICAgICAgICAgICAgICAgICAg -ICAgICA8bGFiZWw+VHlwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0i -aHAtZmlsdGVyLXR5cCIgY2xhc3M9ImZvcm0taW5wdXQiIHN0eWxlPSJ3aWR0aDoyMDBweCI+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj7igJQgYWxsZSDi -gJQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVl -PSJpZGVudGl0YWV0X2dlYWVuZGVydCI+SWRlbnRpdMOkdCBnZcOkbmRlcnQ8L29wdGlvbj4KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJyb2xsZV9nZWFlbmRl -cnQiPlJvbGxlIGdlw6RuZGVydDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDxvcHRpb24gdmFsdWU9ImJhY2t1cF93aWVkZXJoZXJnZXN0ZWxsdCI+QmFja3VwIHdpZWRl -cmhlcmdlc3RlbGx0PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9w -dGlvbiB2YWx1ZT0icGxhbnVuZ19yZXNldCI+UGxhbnVuZyB6dXLDvGNrZ2VzZXR6dDwvb3B0aW9u -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImtyYW5rbWVs -ZHVuZyI+S3JhbmttZWxkdW5nPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAg -ICAgICAgICAgPGxhYmVsPkFiOiAgICA8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImhwLWZpbHRlci12 -b24iIGNsYXNzPSJmb3JtLWlucHV0IiBzdHlsZT0id2lkdGg6MTQwcHgiPjwvbGFiZWw+CiAgICAg -ICAgICAgICAgICAgICAgICAgIDxsYWJlbD5CaXM6ICAgPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJo -cC1maWx0ZXItYmlzIiBjbGFzcz0iZm9ybS1pbnB1dCIgc3R5bGU9IndpZHRoOjE0MHB4Ij48L2xh -YmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9 -ImJ0biBidG4tc2VrIGJ0bi1rbGVpbiIgaWQ9ImhwLWFrdHVhbGlzaWVyZW4iPkFrdHVhbGlzaWVy -ZW48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAg -ICA8dGFibGUgY2xhc3M9ImFkbWluLXRhYmVsbGUgaGlud2Vpc2UtcHJvdG9rb2xsLXRhYmVsbGUi -PgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+PHRyPgogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoxMjBweCI+V2FubjwvdGg+CiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjE1MHB4Ij5UeXA8L3RoPgogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoxMjBweCI+QXVzZ2Vsw7ZzdCB2b248 -L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPktvbnRleHQ8L3RoPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDozMDBweCI+RW1wZsOkbmdlciAm -YW1wOyBMZXNlc3RhdHVzPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj48L3RoZWFk -PgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9ImhpbndlaXNlLXByb3Rva29sbC10 -Ym9keSI+PC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAg -ICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6IEltcG9ydCAoRXhjZWwpIC0tPgog -ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIHZlcnN0ZWNrdCIgaWQ9ImFkbWlu -LXRhYi1pbXBvcnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWtvcGYi -PgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+RXhjZWwtSW1wb3J0PC9oMj4KICAgICAgICAg -ICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0iYWRt -aW4taW5mbyIgZGF0YS1pbmZvLWtleT0iaW1wb3J0IiBvcGVuPgogICAgICAgICAgICAgICAgICAg -ICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1jaGV2Ij7ilrg8L3NwYW4+SGlu -d2Vpc2UgenVtIEV4Y2VsLUltcG9ydDxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWJhZGdlIj5BdWZr -bGFwcGVuIC8gWnVrbGFwcGVuPC9zcGFuPjwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICAg -ICAgPGRpdiBjbGFzcz0iYWRtaW4taW5mby1ib2R5Ij4KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDxwPjxzdHJvbmc+V2FzIHdpcmQgaW1wb3J0aWVydD88L3N0cm9uZz4gU2NoaWNodGVpbnRy -w6RnZSB1bmQgS29tbWVudGFyZSBhdXMgZWluZXIgRXhjZWwtRGF0ZWkgaW0gRm9ybWF0IGRlciBi -aXNoZXJpZ2VuIDxjb2RlPjIwMjYtVkkzLURHTC1QbGFudW5nLnhsc208L2NvZGU+LiBEaWUgRGF0 -ZWkgd2lyZCBpbSBCcm93c2VyIGdlbGVzZW4g4oCUIGVzIHdlcmRlbiBrZWluZSBEYXRlbiBhbiBl -aW5lbiBleHRlcm5lbiBTZXJ2ZXIgZ2VzZW5kZXQuPC9wPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPHA+PHN0cm9uZz5FcndhcnRldGVzIFNoZWV0LUxheW91dDo8L3N0cm9uZz48L3A+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPGxpPlNoZWV0IG1pdCBOYW1lbiA8Yj7igJ5QbGFudW5nIjwvYj48L2xpPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5EYXR1bXMtU3BhbHRlbiBhYiBTcGFsdGUgPGI+ -SjwvYj4gKEV4Y2VsLVNlcmlhbC1EYXRlcyBpbiBaZWlsZSAxKTwvbGk+CiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPGxpPlBlcnNvbmVuLVplaWxlbiBhYiBaZWlsZSA8Yj4yMTwvYj4s -IDxiPk5hY2huYW1lIGluIFNwYWx0ZSBDPC9iPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPGxpPlplbGx3ZXJ0ZSA9IFNjaGljaHRjb2RlcyAoPGNvZGU+Ri1ER0w8L2NvZGU+ -LCA8Y29kZT5Vcmw8L2NvZGU+LCDigKYpPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8bGk+WmVsbC1Lb21tZW50YXJlIChFeGNlbC1Lb21tZW50YXJlKSB3ZXJkZW4gYWxzIEtv -bW1lbnRhciDDvGJlcm5vbW1lbjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Vs -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5BYmdsZWljaDo8L3N0cm9u -Zz48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgPGxpPjxiPlBlcnNvbmVuPC9iPiB3ZXJkZW4gw7xiZXIgZGVuIDxiPk5h -Y2huYW1lbjwvYj4gZ2VtYXRjaHQuIFVuYmVrYW5udGUgUGVyc29uZW4gb2RlciBOYW1lbiBtaXQg -bWVocmVyZW4gVHJlZmZlcm4gbcO8c3NlbiBtYW51ZWxsIHp1Z2VvcmRuZXQgb2RlciBpZ25vcmll -cnQgd2VyZGVuLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxiPlNj -aGljaHRjb2RlczwvYj4gd2VyZGVuIGdlZ2VuIGRpZSBha3RpdmVuIENvZGVzIGFiZ2VnbGljaGVu -LiBCZWthbm50ZSA8Y29kZT5pbXBvcnRBbGlhc2U8L2NvZGU+ICh6LkIuIDxjb2RlPkZXREY8L2Nv -ZGU+IOKGkiA8Y29kZT5GLVdERjwvY29kZT4pIHdlcmRlbiBhdXRvbWF0aXNjaCBlcnNldHp0LiBV -bmJla2FubnRlIENvZGVzIHplaWd0IGRlciBEaWFsb2cgbWl0IGVpbmVtIERyb3Bkb3duIHp1bSBN -YXBwaW5nIG9kZXIg4oCeaWdub3JpZXJlbiIuPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPk1vZHVzOjwv -c3Ryb25nPiBEZXIgSW1wb3J0IGVyc2V0enQgPGI+YWxsZTwvYj4gRWludHLDpGdlIHVuZCBLb21t -ZW50YXJlIGltIGdld8OkaGx0ZW4gWmVpdHJhdW0ga29tcGxldHQuIFZvciBkZW0gU2NocmVpYmVu -IHdpcmQgYXV0b21hdGlzY2ggZWluIEJhY2t1cCBkZXIgPGNvZGU+cGxhbnVuZy5qc29uPC9jb2Rl -PiBlcnN0ZWxsdC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkFi -bGF1Zjo8L3N0cm9uZz4gPGVtPkRhdGVpIGF1c3fDpGhsZW4g4oaSIEFuYWx5c2UgbMOkdWZ0IOKG -kiBNYXBwaW5nLURpYWxvZyDihpIgSW1wb3J0IHN0YXJ0ZW4uPC9lbT48L3A+CiAgICAgICAgICAg -ICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAg -ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbXAtdXBsb2FkLWJveCI+CiAgICAgICAgICAgICAg -ICAgICAgICAgIDxsYWJlbCBmb3I9ImltcC1kYXRlaSIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciIg -c3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IDxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iaW1wLWRhdGVpIiBhY2NlcHQ9Ii54bHN4LC54bHNtLC54 -bHMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhj -ZWwtRGF0ZWkgd8OkaGxlbgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAg -ICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iaW1wLWRhdGVpLW5hbWUiIHN0eWxlPSJtYXJnaW4t -bGVmdDoxMnB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpIj7igJQgbm9j -aCBrZWluZSBEYXRlaSBnZXfDpGhsdCDigJQ8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAg -IDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iaGlsZmUtaWNvbiIgYXJpYS1sYWJlbD0iSGls -ZmUgRXhjZWwtRm9ybWF0IGFuemVpZ2VuIiB0aXRsZT0iRXJ3YXJ0ZXQgZGllIFZJMy1ER0wtRXhj -ZWwtVm9ybGFnZSIgZGF0YS1oaWxmZT0iRXJ3YXJ0ZXQgZGllIFZJMy1ER0wtRXhjZWwtVm9ybGFn -ZTogUGVyc29uZW4gYWIgWmVpbGUgMjEgKE5hY2huYW1lIGluIFNwYWx0ZSBDKSwgRGF0dW1zYW5n -YWJlbiBpbiBaZWlsZSAxIChhYiBTcGFsdGUgSikuIFNwcmVjaGJsYXNlbi1Lb21tZW50YXJlIHdl -cmRlbiBhbHMgVGFnLUtvbW1lbnRhcmUgdWViZXJub21tZW4uIEZvcm1hdCAueGxzeC8ueGxzbS8u -eGxzLiI+PzwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAg -ICAgICAgIDxkaXYgaWQ9ImltcC1zdGF0dXMiIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHgiPjwvZGl2 -PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6IEV4cG9y -dCAoRXhjZWwvQ1NWKSAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2 -ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItZXhwb3J0Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2 -IGNsYXNzPSJhZG1pbi1rb3BmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPkV4Y2VsLUV4 -cG9ydDwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAg -PGRldGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9ImV4cG9ydCIgb3Blbj4K -ICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9ImFkbWluLWluZm8t -Y2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1bSBFeHBvcnQ8c3BhbiBjbGFzcz0iYWRtaW4taW5m +ZXk9ImltcG9ydCIgb3Blbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4g +Y2xhc3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1bSBFeGNlbC1JbXBv +cnQ8c3BhbiBjbGFzcz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xhcHBlbjwv +c3Bhbj48L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWlu +LWluZm8tYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPldhcyB3 +aXJkIGltcG9ydGllcnQ/PC9zdHJvbmc+IFNjaGljaHRlaW50csOkZ2UgdW5kIEtvbW1lbnRhcmUg +YXVzIGVpbmVyIEV4Y2VsLURhdGVpIGltIEZvcm1hdCBkZXIgYmlzaGVyaWdlbiA8Y29kZT4yMDI2 +LVZJMy1ER0wtUGxhbnVuZy54bHNtPC9jb2RlPi4gRGllIERhdGVpIHdpcmQgaW0gQnJvd3NlciBn +ZWxlc2VuIOKAlCBlcyB3ZXJkZW4ga2VpbmUgRGF0ZW4gYW4gZWluZW4gZXh0ZXJuZW4gU2VydmVy +IGdlc2VuZGV0LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RXJ3 +YXJ0ZXRlcyBTaGVldC1MYXlvdXQ6PC9zdHJvbmc+PC9wPgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5TaGVldCBtaXQg +TmFtZW4gPGI+4oCeUGxhbnVuZyI8L2I+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICA8bGk+RGF0dW1zLVNwYWx0ZW4gYWIgU3BhbHRlIDxiPko8L2I+IChFeGNlbC1TZXJpYWwt +RGF0ZXMgaW4gWmVpbGUgMSk8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxs +aT5QZXJzb25lbi1aZWlsZW4gYWIgWmVpbGUgPGI+MjE8L2I+LCA8Yj5OYWNobmFtZSBpbiBTcGFs +dGUgQzwvYj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5aZWxsd2Vy +dGUgPSBTY2hpY2h0Y29kZXMgKDxjb2RlPkYtREdMPC9jb2RlPiwgPGNvZGU+VXJsPC9jb2RlPiwg +4oCmKTwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlplbGwtS29tbWVu +dGFyZSAoRXhjZWwtS29tbWVudGFyZSkgd2VyZGVuIGFscyBLb21tZW50YXIgw7xiZXJub21tZW48 +L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIDxwPjxzdHJvbmc+QWJnbGVpY2g6PC9zdHJvbmc+PC9wPgogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48 +Yj5QZXJzb25lbjwvYj4gd2VyZGVuIMO8YmVyIGRlbiA8Yj5OYWNobmFtZW48L2I+IGdlbWF0Y2h0 +LiBVbmJla2FubnRlIFBlcnNvbmVuIG9kZXIgTmFtZW4gbWl0IG1laHJlcmVuIFRyZWZmZXJuIG3D +vHNzZW4gbWFudWVsbCB6dWdlb3JkbmV0IG9kZXIgaWdub3JpZXJ0IHdlcmRlbi48L2xpPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5TY2hpY2h0Y29kZXM8L2I+IHdlcmRl +biBnZWdlbiBkaWUgYWt0aXZlbiBDb2RlcyBhYmdlZ2xpY2hlbi4gQmVrYW5udGUgPGNvZGU+aW1w +b3J0QWxpYXNlPC9jb2RlPiAoei5CLiA8Y29kZT5GV0RGPC9jb2RlPiDihpIgPGNvZGU+Ri1XREY8 +L2NvZGU+KSB3ZXJkZW4gYXV0b21hdGlzY2ggZXJzZXR6dC4gVW5iZWthbm50ZSBDb2RlcyB6ZWln +dCBkZXIgRGlhbG9nIG1pdCBlaW5lbSBEcm9wZG93biB6dW0gTWFwcGluZyBvZGVyIOKAnmlnbm9y +aWVyZW4iLjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5Nb2R1czo8L3N0cm9uZz4gRGVyIEltcG9ydCBl +cnNldHp0IDxiPmFsbGU8L2I+IEVpbnRyw6RnZSB1bmQgS29tbWVudGFyZSBpbSBnZXfDpGhsdGVu +IFplaXRyYXVtIGtvbXBsZXR0LiBWb3IgZGVtIFNjaHJlaWJlbiB3aXJkIGF1dG9tYXRpc2NoIGVp +biBCYWNrdXAgZGVyIDxjb2RlPnBsYW51bmcuanNvbjwvY29kZT4gZXJzdGVsbHQuPC9wPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5BYmxhdWY6PC9zdHJvbmc+IDxlbT5E +YXRlaSBhdXN3w6RobGVuIOKGkiBBbmFseXNlIGzDpHVmdCDihpIgTWFwcGluZy1EaWFsb2cg4oaS +IEltcG9ydCBzdGFydGVuLjwvZW0+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4K +ICAgICAgICAgICAgICAgICAgICA8L2RldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBj +bGFzcz0iaW1wLXVwbG9hZC1ib3giPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9y +PSJpbXAtZGF0ZWkiIGNsYXNzPSJidG4gYnRuLXByaW1hZXIiIHN0eWxlPSJkaXNwbGF5OmlubGlu +ZS1ibG9jayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIg +aWQ9ImltcC1kYXRlaSIgYWNjZXB0PSIueGxzeCwueGxzbSwueGxzIiBzdHlsZT0iZGlzcGxheTpu +b25lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VsLURhdGVpIHfDpGhsZW4KICAg +ICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHNw +YW4gaWQ9ImltcC1kYXRlaS1uYW1lIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MTJweDtmb250LXNpemU6 +MTNweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKSI+4oCUIG5vY2gga2VpbmUgRGF0ZWkgZ2V3w6Ro +bHQg4oCUPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRv +biIgY2xhc3M9ImhpbGZlLWljb24iIGFyaWEtbGFiZWw9IkhpbGZlIEV4Y2VsLUZvcm1hdCBhbnpl +aWdlbiIgdGl0bGU9IkVyd2FydGV0IGRpZSBWSTMtREdMLUV4Y2VsLVZvcmxhZ2UiIGRhdGEtaGls +ZmU9IkVyd2FydGV0IGRpZSBWSTMtREdMLUV4Y2VsLVZvcmxhZ2U6IFBlcnNvbmVuIGFiIFplaWxl +IDIxIChOYWNobmFtZSBpbiBTcGFsdGUgQyksIERhdHVtc2FuZ2FiZW4gaW4gWmVpbGUgMSAoYWIg +U3BhbHRlIEopLiBTcHJlY2hibGFzZW4tS29tbWVudGFyZSB3ZXJkZW4gYWxzIFRhZy1Lb21tZW50 +YXJlIHVlYmVybm9tbWVuLiBGb3JtYXQgLnhsc3gvLnhsc20vLnhscy4iPj88L2J1dHRvbj4KICAg +ICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJpbXAt +c3RhdHVzIiBzdHlsZT0ibWFyZ2luLXRvcDoyMHB4Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwv +ZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBFeHBvcnQgKEV4Y2VsL0NTVikgLS0+CiAg +ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi10YWIgdmVyc3RlY2t0IiBpZD0iYWRtaW4t +dGFiLWV4cG9ydCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29wZiI+ +CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5FeGNlbC1FeHBvcnQ8L2gyPgogICAgICAgICAg +ICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJhZG1p +bi1pbmZvIiBkYXRhLWluZm8ta2V5PSJleHBvcnQiIG9wZW4+CiAgICAgICAgICAgICAgICAgICAg +ICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWNoZXYiPuKWuDwvc3Bhbj5IaW53 +ZWlzZSB6dW0gRXhwb3J0PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4g +LyBadWtsYXBwZW48L3NwYW4+PC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2 +IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+ +PHN0cm9uZz5XYXMgd2lyZCBleHBvcnRpZXJ0Pzwvc3Ryb25nPiBQcm8gUGVyc29uIHVuZCBUYWcg +bWl0IEVpbnRyYWcgZWluZSBaZWlsZSBtaXQgPGI+TmFtZSwgRGllbnN0Z3J1cHBlLCBEYXR1bSwg +TW9uYXQsIFRhZywgV29jaGVudGFnLCBLVywgU2NoaWNodDwvYj4gKENvZGUpIHVuZCA8Yj5TY2hp +Y2h0LUtsYXJ0ZXh0PC9iPi4gRXMgd2VyZGVuIG51ciBUYWdlIG1pdCBoaW50ZXJsZWd0ZXIgU2No +aWNodCBhdXNnZWdlYmVuLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJv +bmc+SW5mb2JveCB1bnRlcmhhbGI6PC9zdHJvbmc+IE9wdGlvbmFsIGZvbGd0IHVudGVyIGRlciBU +YWJlbGxlIGVpbiB6d2VpdGVyIEJsb2NrIOKAnkhpbndlaXNlIHp1IFRhZ2VuIG1pdCBCZXNvbmRl +cmhlaXRlbiIg4oCUIGRpZSBpbSBQbGFuLUhlYWRlciBlcmthbm50ZW4gPGI+RmVpZXJ0YWdlLCBG +ZXJpZW4gdW5kIFNvbmRlcnRlcm1pbmU8L2I+IGRlcyBleHBvcnRpZXJ0ZW4gWmVpdHJhdW1zIChE +YXR1bSwgVHlwLCBCZXplaWNobnVuZywgQmVzY2hyZWlidW5nKS48L3A+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8cD48c3Ryb25nPlVtZmFuZzo8L3N0cm9uZz4gR2FuemVzIFBsYW51bmdz +amFociwgZWluemVsbmUvbWVocmVyZSBLYWxlbmRlcndvY2hlbiAodm9u4oCTYmlzKSBvZGVyIGVp +biBmcmVpZXIgRGF0dW1zYmVyZWljaC4gPHN0cm9uZz5QZXJzb25lbmtyZWlzOjwvc3Ryb25nPiBh +bGxlLCBiZXN0aW1tdGUgRGllbnN0Z3J1cHBlbiBvZGVyIGVpbnplbG5lIFBlcnNvbmVuICg9IGlu +ZGl2aWR1ZWxsZXIgRXhwb3J0KS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48 +c3Ryb25nPkZvcm1hdDo8L3N0cm9uZz4gRm9ybWF0aWVydGVzIDxiPlhMU1g8L2I+IChwYXNzZW5k +ZSBTcGFsdGVuYnJlaXRlbiwgVGl0ZWx6ZWlsZSwgQXV0by1GaWx0ZXIgw7xiZXIgZGVyIFRhYmVs +bGUpIG9kZXIgPGI+Q1NWPC9iPiAoVVRGLTggbWl0IEJPTSwgU2VtaWtvbG9uLWdldHJlbm50IOKA +lCBkaXJla3QgaW4gRXhjZWwtREUgbGVzYmFyKS4gQWxsZXMgbMOkdWZ0IGltIEJyb3dzZXI7IGVz +IHdlcmRlbiBrZWluZSBEYXRlbiBhbiBlaW5lbiBleHRlcm5lbiBTZXJ2ZXIgZ2VzZW5kZXQuPC9w +PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rl +dGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iZXhwb3J0LWluaGFsdCI+PC9kaXY+ +CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIFRhYjogVGVzdGRh +dGVuIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIHZlcnN0ZWNrdCIg +aWQ9ImFkbWluLXRhYi10ZXN0ZGF0ZW4iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9 +ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+VGVzdGRhdGVuIC8gRHVt +bXlkYXRlbjwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAg +ICAgPGRldGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9InRlc3RkYXRlbiIg +b3Blbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9ImFkbWlu +LWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1IFRlc3RkYXRlbiAvIFJlc2V0PHNwYW4g +Y2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9z +dW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJv +ZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5Xb2bDvHI/PC9zdHJv +bmc+IERpZXNlIEZ1bmt0aW9uZW4gc2luZCBhdXNzY2hsaWXDn2xpY2ggZsO8ciBUZXN0LSwgRGVt +by0gdW5kIEVpbmFyYmVpdHVuZ3N6d2Vja2UgZ2VkYWNodC4gQmVpZGUgZXJzdGVsbGVuIDxiPmF1 +dG9tYXRpc2NoIGVpbiBCYWNrdXA8L2I+IGRlciBha3R1ZWxsZW4gUGxhbnVuZywgYmV2b3Igc2ll +IGF1c2dlZsO8aHJ0IHdlcmRlbiDigJQgZGllIEJhY2t1cHMgbGllZ2VuIGluIDxjb2RlPlZJMy9k +YXRhL3BsYW51bmdfYmFja3VwX3Zvcl8qLmpzb248L2NvZGU+LjwvcD4KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDxwPjxzdHJvbmc+RHVtbXlkYXRlbiBlaW5zcGllbGVuOjwvc3Ryb25nPiBG +w7xsbHQgZGVuIFplaXRyYXVtIChha3R1ZWxsIEphbnVhciBiaXMgQXByaWwgMjAyNikgbWl0IHJl +YWxpc3Rpc2NoZW4gU2NoaWNodHBsw6RuZW4sIFVybGF1YiwgS3JhbmtoZWl0LCBMZWhyZ8Okbmdl +biwgRWluc2F0enRyYWluaW5nIHVuZCBBWi1BdXNnbGVpY2guIERpZSBHcnVwcGVuIEEvQi9DIHJv +dGllcmVuIHfDtmNoZW50bGljaCBkdXJjaCBGcsO8aC0vU3DDpHQtL05hY2h0ZGllbnN0LiBQZXJz +b25lbmxpc3RlLCBHcnVwcGVuYmV6ZWljaG51bmdlbiB1bmQgRWluc3RlbGx1bmdlbiBibGVpYmVu +IHVudmVyw6RuZGVydC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25n +PlBsYW51bmcgenVyw7xja3NldHplbjo8L3N0cm9uZz4gTMO2c2NodCA8Yj5hbGxlPC9iPiBTY2hp +Y2h0LUVpbnRyw6RnZSB1bmQgS29tbWVudGFyZS4gRGllIFBlcnNvbmVubGlzdGUsIEdydXBwZW4s +IEZlaWVydGFnZSB1bmQgYWxsZSBhbmRlcmVuIEVpbnN0ZWxsdW5nZW4gYmxlaWJlbiBlcmhhbHRl +bi4gQmFja3VwIHdpcmQgdm9yaGVyIGVyc3RlbGx0LjwvcD4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIDxwPjxzdHJvbmc+V2llZGVyaGVyc3RlbGx1bmc6PC9zdHJvbmc+IEF1cyBCYWNrdXAt +RGF0ZWllbiBrYW5uIGFrdHVlbGwgbnVyIHBlciBEYXRlaW1hbmlwdWxhdGlvbiAoPGNvZGU+cGxh +bnVuZ19iYWNrdXBfLi4uPC9jb2RlPiB1bWJlbmVubmVuIHp1IDxjb2RlPnBsYW51bmcuanNvbjwv +Y29kZT4pIHdpZWRlcmhlcmdlc3RlbGx0IHdlcmRlbi4gQmFja3VwcyB3ZXJkZW4gbnVyIGltIERh +dGVub3JkbmVyIGxva2FsIGdlaGFsdGVuLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IDxwPjxzdHJvbmc+Vm9yc2ljaHQgaW0gUHJvZHVrdGl2YmV0cmllYjo8L3N0cm9uZz4gSW0gbGF1 +ZmVuZGVuIFBsYW51bmdzYmV0cmllYiBkaWVzZSBCdXR0b25zIG51ciBtaXQgQWJzcHJhY2hlIG51 +dHplbiEgQXVjaCB3ZW5uIEJhY2t1cHMgZXJzdGVsbHQgd2VyZGVuIOKAlCBiZWkgYWt0aXZlbiBC +ZWFyYmVpdGVybiBlbnRzdGVoZW4gS29uZmxpa3RlLjwvcD4KICAgICAgICAgICAgICAgICAgICAg +ICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kZXRhaWxzPgogICAgICAgICAgICAgICAg +ICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDsgZ2FwOjE2cHg7IGZsZXgtd3JhcDp3cmFwOyBt +YXJnaW4tdG9wOjE2cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4 +OjE7IG1pbi13aWR0aDoyODBweDsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1yYWhtZW4pOyBib3Jk +ZXItcmFkaXVzOjhweDsgcGFkZGluZzoyMHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IDxoMyBzdHlsZT0ibWFyZ2luOjAgMCA4cHggMCI+RHVtbXlkYXRlbiBlaW5zcGllbGVuPC9oMz4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWdl +ZGltbXQpOyBtYXJnaW46MCAwIDE2cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgRsO8bGx0IEphbnVhciBiaXMgQXByaWwgMjAyNiBtaXQgcmVhbGlzdGlzY2hlbiBTY2hpY2h0 +cGzDpG5lbiwgVXJsYXViLCBLcmFua2hlaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgTGVocmfDpG5nZW4sIEVpbnNhdHp0cmFpbmluZyB1bmQgQVotQXVzZ2xlaWNoLiBHcnVwcGVu +IEEvQi9DIHJvdGllcmVuIHfDtmNoZW50bGljaAogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGR1cmNoIEZyw7xoLS9TcMOkdC0vTmFjaHRkaWVuc3QuIERpZSBiZXN0ZWhlbmRlbiBQZXJz +b25lbiB1bmQgQmV6ZWljaG51bmdlbiBibGVpYmVuIGVyaGFsdGVuLgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0i +YnRuLWR1bW15ZGF0ZW4iIGNsYXNzPSJidG4gYnRuLXByaW1hZXIiPkR1bW15ZGF0ZW4gZWluc3Bp +ZWxlbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAg +ICAgICAgICAgICAgPGRpdiBzdHlsZT0iZmxleDoxOyBtaW4td2lkdGg6MjgwcHg7IGJvcmRlcjox +cHggc29saWQgdmFyKC0tcmFobWVuKTsgYm9yZGVyLXJhZGl1czo4cHg7IHBhZGRpbmc6MjBweCI+ +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbjowIDAgOHB4IDAi +PlBsYW51bmcgenVyw7xja3NldHplbjwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +cCBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1nZWRpbW10KTsgbWFyZ2luOjAgMCAxNnB4IDAiPgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEzDtnNjaHQgPHN0cm9uZz5hbGxlPC9zdHJv +bmc+IEVpbnRyw6RnZSB1bmQgS29tbWVudGFyZS4gRGllIFBlcnNvbmVubGlzdGUsIEdydXBwZW4s +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmVpZXJ0YWdlIHVuZCBhbGxlIGFuZGVy +ZW4gRWluc3RlbGx1bmdlbiBibGVpYmVuIGVyaGFsdGVuLgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXJl +c2V0IiBjbGFzcz0iYnRuIGJ0bi1nZWZhaHIiPlBsYW51bmcgenVyw7xja3NldHplbjwvYnV0dG9u +PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAg +PGRpdiBzdHlsZT0iZmxleDoxOyBtaW4td2lkdGg6MjgwcHg7IGJvcmRlcjoxcHggc29saWQgdmFy +KC0tcmFobWVuKTsgYm9yZGVyLXJhZGl1czo4cHg7IHBhZGRpbmc6MjBweCI+CiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbjowIDAgOHB4IDAiPlByb3Rva29sbCBs +w7ZzY2hlbjwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6 +dmFyKC0tdGV4dC1nZWRpbW10KTsgbWFyZ2luOjAgMCAxNnB4IDAiPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIExlZXJ0IGRhcyA8c3Ryb25nPkxvZ2J1Y2g8L3N0cm9uZz4gdW5kIGRp +ZSA8c3Ryb25nPkFQSS1Mb2ctRGF0ZWk8L3N0cm9uZz4uCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgU2lubnZvbGwgdm9yIGRlbSBMaXZlLUdhbmcgb2RlciBuYWNoIFRlc3RzLCB1bSBE +aWFnbm9zZS1TcHVyZW4genUgZW50ZmVybmVuLgogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIEVpbiBlaW56ZWxuZXIgTG9nYnVjaC1FaW50cmFnIDxjb2RlPnByb3Rva29sbC5nZWxvZXNj +aHQ8L2NvZGU+IGJsZWlidAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyaGFsdGVu +LCBkYW1pdCBkYXMgRXJlaWduaXMgc2VsYnN0IG5hY2h2b2xsemllaGJhciBibGVpYnQuCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +YnV0dG9uIGlkPSJidG4tcHJvdG9rb2xsLWxvZXNjaGVuIiBjbGFzcz0iYnRuIGJ0bi1nZWZhaHIi +PlByb3Rva29sbCBsw7ZzY2hlbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rp +dj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlk +PSJ0ZXN0ZGF0ZW4tZXJnZWJuaXMiIGNsYXNzPSJ2ZXJzdGVja3QiIHN0eWxlPSJtYXJnaW4tdG9w +OjE2cHgiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEt +LSBUYWI6IEJlc2NocmlmdHVuZ2VuICYgVGV4dGUgKE1lcmdlIOKAlCBCZXplaWNobnVuZ2VuICsg +SW5mb3JtYXRpb24gJiBIaWxmZSkgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1p +bi10YWIgdmVyc3RlY2t0IiBpZD0iYWRtaW4tdGFiLWJlemVpY2hudW5nZW4iPgogICAgICAgICAg +ICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAg +ICA8aDI+QmVzY2hyaWZ0dW5nZW4gJmFtcDsgVGV4dGU8L2gyPgogICAgICAgICAgICAgICAgICAg +IDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYWRtaW4tc2VrdGlv +biIgaWQ9ImFkbWluLXNla3Rpb24tYmV6ZWljaG51bmdlbiI+CiAgICAgICAgICAgICAgICAgICAg +ICAgIDxkaXYgY2xhc3M9ImFkbWluLXNla3Rpb24ta29wZiI+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8aDM+VUktQmV6ZWljaG51bmdlbjwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAg +IDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0iYWRtaW4taW5m +byIgZGF0YS1pbmZvLWtleT0iYmV6ZWljaG51bmdlbiIgb3Blbj4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWNoZXYiPuKWuDwvc3Bh +bj5IaW53ZWlzZSB6dSBCZXplaWNobnVuZ2VuPHNwYW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2Ui +PkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9zdW1tYXJ5PgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4taW5mby1ib2R5Ij4KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPldhcyBpc3QgZGFzPzwvc3Ryb25nPiBBbGxlIGhh +cnQgaW0gQ29kZSBoaW50ZXJsZWd0ZW4gVUktTGFiZWxzIChUaXRlbCBkZXIgQXBwLCBOYW1lbiBk +ZXIgUmVpdGVyIGltIEhlYWRlciwg4oCmKSBsYXNzZW4gc2ljaCBoaWVyIGluZGl2aWR1ZWxsIGJl +bmVubmVuLiBOw7x0emxpY2gsIHdlbm4gaW50ZXJuIGFuZGVyZSBCZWdyaWZmZSDDvGJsaWNoIHNp +bmQgb2RlciBlaW4gVGFiIHVtYmVuYW5udCB3ZXJkZW4gc29sbC48L3A+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5GdW5rdGlvbjo8L3N0cm9uZz4gTGVlcmUgRmVs +ZGVyIGZhbGxlbiB6dXLDvGNrIGF1ZiBkZW4gRGVmYXVsdC1XZXJ0LiA8ZW0+U3BlaWNoZXJuPC9l +bT4gbGVndCBkaWUgV2VydGUgaW4gPGNvZGU+YWRtaW4uanNvbi5iZXplaWNobnVuZ2VuPC9jb2Rl +PiBhYiDigJQgc2ljaHRiYXIgd2lyZCBkaWUgw4RuZGVydW5nIG5hY2ggZWluZW0gU2VpdGVuLVJl +bG9hZCAoRjUpIGbDvHIgYWxsZSBOdXR6ZXIuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIDxwPjxzdHJvbmc+WnVyw7xja3NldHplbjwvc3Ryb25nPiBsw7ZzY2h0IGFsbGUgaW5k +aXZpZHVlbGxlbiBXZXJ0ZSB1bmQgc3RlbGx0IGRpZSBEZWZhdWx0cyB3aWVkZXIgaGVyLjwvcD4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAg +ICA8L2RldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iYWRtaW4t +dGFiZWxsZSIgaWQ9ImJlemVpY2hudW5nZW4tdGFiZWxsZSI+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjE4MHB4Ij5T +Y2hsw7xzc2VsPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0 +eWxlPSJ3aWR0aDoyMjBweCI+RGVmYXVsdDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIDx0aD5FaWdlbmUgQmV6ZWljaG51bmc8L3RoPgogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJiZXplaWNobnVuZ2VuLXRib2R5 +Ij48L3Rib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAg +ICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXJnaW4tdG9wOjEy +cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWJlemVpY2hu +dW5nZW4tcmVzZXQiIGNsYXNzPSJidG4gYnRuLXNlayIgdGl0bGU9IkFsbGUgV2VydGUgYXVmIGRl +biBEZWZhdWx0IHp1csO8Y2tzZXR6ZW4iPlp1csO8Y2tzZXR6ZW48L2J1dHRvbj4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1iZXplaWNobnVuZ2VuLXNwZWljaGVy +biIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciI+QmV6ZWljaG51bmdlbiBzcGVpY2hlcm48L2J1dHRv +bj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9z +ZWN0aW9uPgoKICAgICAgICAgICAgICAgICAgICA8aHIgY2xhc3M9ImFkbWluLXNla3Rpb24tdHJl +bm5lciI+CgogICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJhZG1pbi1zZWt0aW9u +IiBpZD0iYWRtaW4tc2VrdGlvbi1pbmZvaGlsZmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8 +ZGl2IGNsYXNzPSJhZG1pbi1zZWt0aW9uLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgPGgzPkluZm9ybWF0aW9uICZhbXA7IEhpbGZlPC9oMz4KICAgICAgICAgICAgICAgICAgICAg +ICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJhZG1pbi1p +bmZvIiBkYXRhLWluZm8ta2V5PSJpbmZvaGlsZmUiIG9wZW4+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1jaGV2Ij7ilrg8L3NwYW4+ +SGlud2Vpc2UgenUgSW5mb3JtYXRpb24gJmFtcDsgSGlsZmU8c3BhbiBjbGFzcz0iYWRtaW4taW5m by1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xhcHBlbjwvc3Bhbj48L3N1bW1hcnk+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWluZm8tYm9keSI+CiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPldhcyB3aXJkIGV4cG9ydGllcnQ/PC9zdHJvbmc+ -IFBybyBQZXJzb24gdW5kIFRhZyBtaXQgRWludHJhZyBlaW5lIFplaWxlIG1pdCA8Yj5OYW1lLCBE -aWVuc3RncnVwcGUsIERhdHVtLCBNb25hdCwgVGFnLCBXb2NoZW50YWcsIEtXLCBTY2hpY2h0PC9i -PiAoQ29kZSkgdW5kIDxiPlNjaGljaHQtS2xhcnRleHQ8L2I+LiBFcyB3ZXJkZW4gbnVyIFRhZ2Ug -bWl0IGhpbnRlcmxlZ3RlciBTY2hpY2h0IGF1c2dlZ2ViZW4uPC9wPgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPHA+PHN0cm9uZz5JbmZvYm94IHVudGVyaGFsYjo8L3N0cm9uZz4gT3B0aW9u -YWwgZm9sZ3QgdW50ZXIgZGVyIFRhYmVsbGUgZWluIHp3ZWl0ZXIgQmxvY2sg4oCeSGlud2Vpc2Ug -enUgVGFnZW4gbWl0IEJlc29uZGVyaGVpdGVuIiDigJQgZGllIGltIFBsYW4tSGVhZGVyIGVya2Fu -bnRlbiA8Yj5GZWllcnRhZ2UsIEZlcmllbiB1bmQgU29uZGVydGVybWluZTwvYj4gZGVzIGV4cG9y -dGllcnRlbiBaZWl0cmF1bXMgKERhdHVtLCBUeXAsIEJlemVpY2hudW5nLCBCZXNjaHJlaWJ1bmcp -LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+VW1mYW5nOjwvc3Ry -b25nPiBHYW56ZXMgUGxhbnVuZ3NqYWhyLCBlaW56ZWxuZS9tZWhyZXJlIEthbGVuZGVyd29jaGVu -ICh2b27igJNiaXMpIG9kZXIgZWluIGZyZWllciBEYXR1bXNiZXJlaWNoLiA8c3Ryb25nPlBlcnNv -bmVua3JlaXM6PC9zdHJvbmc+IGFsbGUsIGJlc3RpbW10ZSBEaWVuc3RncnVwcGVuIG9kZXIgZWlu -emVsbmUgUGVyc29uZW4gKD0gaW5kaXZpZHVlbGxlciBFeHBvcnQpLjwvcD4KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+Rm9ybWF0Ojwvc3Ryb25nPiBGb3JtYXRpZXJ0ZXMg -PGI+WExTWDwvYj4gKHBhc3NlbmRlIFNwYWx0ZW5icmVpdGVuLCBUaXRlbHplaWxlLCBBdXRvLUZp -bHRlciDDvGJlciBkZXIgVGFiZWxsZSkgb2RlciA8Yj5DU1Y8L2I+IChVVEYtOCBtaXQgQk9NLCBT -ZW1pa29sb24tZ2V0cmVubnQg4oCUIGRpcmVrdCBpbiBFeGNlbC1ERSBsZXNiYXIpLiBBbGxlcyBs -w6R1ZnQgaW0gQnJvd3NlcjsgZXMgd2VyZGVuIGtlaW5lIERhdGVuIGFuIGVpbmVuIGV4dGVybmVu -IFNlcnZlciBnZXNlbmRldC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAg -ICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJl -eHBvcnQtaW5oYWx0Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAg -ICAgIDwhLS0gVGFiOiBUZXN0ZGF0ZW4gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJh -ZG1pbi10YWIgdmVyc3RlY2t0IiBpZD0iYWRtaW4tdGFiLXRlc3RkYXRlbiI+CiAgICAgICAgICAg -ICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAg -IDxoMj5UZXN0ZGF0ZW4gLyBEdW1teWRhdGVuPC9oMj4KICAgICAgICAgICAgICAgICAgICA8L2Rp -dj4KICAgICAgICAgICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0iYWRtaW4taW5mbyIgZGF0YS1p -bmZvLWtleT0idGVzdGRhdGVuIiBvcGVuPgogICAgICAgICAgICAgICAgICAgICAgICA8c3VtbWFy -eT48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1jaGV2Ij7ilrg8L3NwYW4+SGlud2Vpc2UgenUgVGVz -dGRhdGVuIC8gUmVzZXQ8c3BhbiBjbGFzcz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAv -IFp1a2xhcHBlbjwvc3Bhbj48L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYg -Y2xhc3M9ImFkbWluLWluZm8tYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48 -c3Ryb25nPldvZsO8cj88L3N0cm9uZz4gRGllc2UgRnVua3Rpb25lbiBzaW5kIGF1c3NjaGxpZcOf -bGljaCBmw7xyIFRlc3QtLCBEZW1vLSB1bmQgRWluYXJiZWl0dW5nc3p3ZWNrZSBnZWRhY2h0LiBC -ZWlkZSBlcnN0ZWxsZW4gPGI+YXV0b21hdGlzY2ggZWluIEJhY2t1cDwvYj4gZGVyIGFrdHVlbGxl -biBQbGFudW5nLCBiZXZvciBzaWUgYXVzZ2Vmw7xocnQgd2VyZGVuIOKAlCBkaWUgQmFja3VwcyBs -aWVnZW4gaW4gPGNvZGU+VkkzL2RhdGEvcGxhbnVuZ19iYWNrdXBfdm9yXyouanNvbjwvY29kZT4u -PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5EdW1teWRhdGVuIGVp -bnNwaWVsZW46PC9zdHJvbmc+IEbDvGxsdCBkZW4gWmVpdHJhdW0gKGFrdHVlbGwgSmFudWFyIGJp -cyBBcHJpbCAyMDI2KSBtaXQgcmVhbGlzdGlzY2hlbiBTY2hpY2h0cGzDpG5lbiwgVXJsYXViLCBL -cmFua2hlaXQsIExlaHJnw6RuZ2VuLCBFaW5zYXR6dHJhaW5pbmcgdW5kIEFaLUF1c2dsZWljaC4g -RGllIEdydXBwZW4gQS9CL0Mgcm90aWVyZW4gd8O2Y2hlbnRsaWNoIGR1cmNoIEZyw7xoLS9TcMOk -dC0vTmFjaHRkaWVuc3QuIFBlcnNvbmVubGlzdGUsIEdydXBwZW5iZXplaWNobnVuZ2VuIHVuZCBF -aW5zdGVsbHVuZ2VuIGJsZWliZW4gdW52ZXLDpG5kZXJ0LjwvcD4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDxwPjxzdHJvbmc+UGxhbnVuZyB6dXLDvGNrc2V0emVuOjwvc3Ryb25nPiBMw7Zz -Y2h0IDxiPmFsbGU8L2I+IFNjaGljaHQtRWludHLDpGdlIHVuZCBLb21tZW50YXJlLiBEaWUgUGVy -c29uZW5saXN0ZSwgR3J1cHBlbiwgRmVpZXJ0YWdlIHVuZCBhbGxlIGFuZGVyZW4gRWluc3RlbGx1 -bmdlbiBibGVpYmVuIGVyaGFsdGVuLiBCYWNrdXAgd2lyZCB2b3JoZXIgZXJzdGVsbHQuPC9wPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5XaWVkZXJoZXJzdGVsbHVuZzo8 -L3N0cm9uZz4gQXVzIEJhY2t1cC1EYXRlaWVuIGthbm4gYWt0dWVsbCBudXIgcGVyIERhdGVpbWFu -aXB1bGF0aW9uICg8Y29kZT5wbGFudW5nX2JhY2t1cF8uLi48L2NvZGU+IHVtYmVuZW5uZW4genUg -PGNvZGU+cGxhbnVuZy5qc29uPC9jb2RlPikgd2llZGVyaGVyZ2VzdGVsbHQgd2VyZGVuLiBCYWNr -dXBzIHdlcmRlbiBudXIgaW0gRGF0ZW5vcmRuZXIgbG9rYWwgZ2VoYWx0ZW4uPC9wPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5Wb3JzaWNodCBpbSBQcm9kdWt0aXZiZXRy -aWViOjwvc3Ryb25nPiBJbSBsYXVmZW5kZW4gUGxhbnVuZ3NiZXRyaWViIGRpZXNlIEJ1dHRvbnMg -bnVyIG1pdCBBYnNwcmFjaGUgbnV0emVuISBBdWNoIHdlbm4gQmFja3VwcyBlcnN0ZWxsdCB3ZXJk -ZW4g4oCUIGJlaSBha3RpdmVuIEJlYXJiZWl0ZXJuIGVudHN0ZWhlbiBLb25mbGlrdGUuPC9wPgog -ICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2RldGFp -bHM+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4OyBnYXA6MTZw -eDsgZmxleC13cmFwOndyYXA7IG1hcmdpbi10b3A6MTZweCI+CiAgICAgICAgICAgICAgICAgICAg -ICAgIDxkaXYgc3R5bGU9ImZsZXg6MTsgbWluLXdpZHRoOjI4MHB4OyBib3JkZXI6MXB4IHNvbGlk -IHZhcigtLXJhaG1lbik7IGJvcmRlci1yYWRpdXM6OHB4OyBwYWRkaW5nOjIwcHgiPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MCAwIDhweCAwIj5EdW1teWRh -dGVuIGVpbnNwaWVsZW48L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9 -ImNvbG9yOnZhcigtLXRleHQtZ2VkaW1tdCk7IG1hcmdpbjowIDAgMTZweCAwIj4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICBGw7xsbHQgSmFudWFyIGJpcyBBcHJpbCAyMDI2IG1pdCBy -ZWFsaXN0aXNjaGVuIFNjaGljaHRwbMOkbmVuLCBVcmxhdWIsIEtyYW5raGVpdCwKICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICBMZWhyZ8OkbmdlbiwgRWluc2F0enRyYWluaW5nIHVuZCBB -Wi1BdXNnbGVpY2guIEdydXBwZW4gQS9CL0Mgcm90aWVyZW4gd8O2Y2hlbnRsaWNoCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgZHVyY2ggRnLDvGgtL1Nww6R0LS9OYWNodGRpZW5zdC4g -RGllIGJlc3RlaGVuZGVuIFBlcnNvbmVuIHVuZCBCZXplaWNobnVuZ2VuIGJsZWliZW4gZXJoYWx0 -ZW4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICA8YnV0dG9uIGlkPSJidG4tZHVtbXlkYXRlbiIgY2xhc3M9ImJ0biBidG4tcHJpbWFl -ciI+RHVtbXlkYXRlbiBlaW5zcGllbGVuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAg -IDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjE7IG1pbi13 -aWR0aDoyODBweDsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1yYWhtZW4pOyBib3JkZXItcmFkaXVz -OjhweDsgcGFkZGluZzoyMHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBzdHls -ZT0ibWFyZ2luOjAgMCA4cHggMCI+UGxhbnVuZyB6dXLDvGNrc2V0emVuPC9oMz4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWdlZGltbXQpOyBt -YXJnaW46MCAwIDE2cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTMO2c2No -dCA8c3Ryb25nPmFsbGU8L3N0cm9uZz4gRWludHLDpGdlIHVuZCBLb21tZW50YXJlLiBEaWUgUGVy -c29uZW5saXN0ZSwgR3J1cHBlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGZWll -cnRhZ2UgdW5kIGFsbGUgYW5kZXJlbiBFaW5zdGVsbHVuZ2VuIGJsZWliZW4gZXJoYWx0ZW4uCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8YnV0dG9uIGlkPSJidG4tcmVzZXQiIGNsYXNzPSJidG4gYnRuLWdlZmFociI+UGxhbnVuZyB6 -dXLDvGNrc2V0emVuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAg -ICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjE7IG1pbi13aWR0aDoyODBweDsg -Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1yYWhtZW4pOyBib3JkZXItcmFkaXVzOjhweDsgcGFkZGlu -ZzoyMHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOjAg -MCA4cHggMCI+UHJvdG9rb2xsIGzDtnNjaGVuPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDxwIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LWdlZGltbXQpOyBtYXJnaW46MCAwIDE2cHgg -MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVlcnQgZGFzIDxzdHJvbmc+TG9n -YnVjaDwvc3Ryb25nPiB1bmQgZGllIDxzdHJvbmc+QVBJLUxvZy1EYXRlaTwvc3Ryb25nPi4KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5udm9sbCB2b3IgZGVtIExpdmUtR2FuZyBv -ZGVyIG5hY2ggVGVzdHMsIHVtIERpYWdub3NlLVNwdXJlbiB6dSBlbnRmZXJuZW4uCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgRWluIGVpbnplbG5lciBMb2didWNoLUVpbnRyYWcgPGNv -ZGU+cHJvdG9rb2xsLmdlbG9lc2NodDwvY29kZT4gYmxlaWJ0CiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgZXJoYWx0ZW4sIGRhbWl0IGRhcyBFcmVpZ25pcyBzZWxic3QgbmFjaHZvbGx6 -aWVoYmFyIGJsZWlidC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1wcm90b2tvbGwtbG9lc2NoZW4iIGNs -YXNzPSJidG4gYnRuLWdlZmFociI+UHJvdG9rb2xsIGzDtnNjaGVuPC9idXR0b24+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAg -ICAgICAgICAgICAgIDxkaXYgaWQ9InRlc3RkYXRlbi1lcmdlYm5pcyIgY2xhc3M9InZlcnN0ZWNr -dCIgc3R5bGU9Im1hcmdpbi10b3A6MTZweCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4K -CiAgICAgICAgICAgICAgICA8IS0tIFRhYjogQmVzY2hyaWZ0dW5nZW4gJiBUZXh0ZSAoTWVyZ2Ug -4oCUIEJlemVpY2hudW5nZW4gKyBJbmZvcm1hdGlvbiAmIEhpbGZlKSAtLT4KICAgICAgICAgICAg -ICAgIDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItYmV6ZWlj -aG51bmdlbiI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29wZiI+CiAg -ICAgICAgICAgICAgICAgICAgICAgIDxoMj5CZXNjaHJpZnR1bmdlbiAmYW1wOyBUZXh0ZTwvaDI+ -CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxzZWN0aW9u -IGNsYXNzPSJhZG1pbi1zZWt0aW9uIiBpZD0iYWRtaW4tc2VrdGlvbi1iZXplaWNobnVuZ2VuIj4K -ICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tc2VrdGlvbi1rb3BmIj4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5VSS1CZXplaWNobnVuZ2VuPC9oMz4KICAg -ICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZXRh -aWxzIGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5PSJiZXplaWNobnVuZ2VuIiBvcGVu -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9ImFkbWlu -LWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1IEJlemVpY2hudW5nZW48c3BhbiBjbGFz -cz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xhcHBlbjwvc3Bhbj48L3N1bW1h -cnk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJv -ZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+V2FzIGlzdCBk -YXM/PC9zdHJvbmc+IEFsbGUgaGFydCBpbSBDb2RlIGhpbnRlcmxlZ3RlbiBVSS1MYWJlbHMgKFRp -dGVsIGRlciBBcHAsIE5hbWVuIGRlciBSZWl0ZXIgaW0gSGVhZGVyLCDigKYpIGxhc3NlbiBzaWNo -IGhpZXIgaW5kaXZpZHVlbGwgYmVuZW5uZW4uIE7DvHR6bGljaCwgd2VubiBpbnRlcm4gYW5kZXJl -IEJlZ3JpZmZlIMO8YmxpY2ggc2luZCBvZGVyIGVpbiBUYWIgdW1iZW5hbm50IHdlcmRlbiBzb2xs -LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkZ1bmt0aW9u -Ojwvc3Ryb25nPiBMZWVyZSBGZWxkZXIgZmFsbGVuIHp1csO8Y2sgYXVmIGRlbiBEZWZhdWx0LVdl -cnQuIDxlbT5TcGVpY2hlcm48L2VtPiBsZWd0IGRpZSBXZXJ0ZSBpbiA8Y29kZT5hZG1pbi5qc29u -LmJlemVpY2hudW5nZW48L2NvZGU+IGFiIOKAlCBzaWNodGJhciB3aXJkIGRpZSDDhG5kZXJ1bmcg -bmFjaCBlaW5lbSBTZWl0ZW4tUmVsb2FkIChGNSkgZsO8ciBhbGxlIE51dHplci48L3A+CiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5adXLDvGNrc2V0emVuPC9zdHJv -bmc+IGzDtnNjaHQgYWxsZSBpbmRpdmlkdWVsbGVuIFdlcnRlIHVuZCBzdGVsbHQgZGllIERlZmF1 -bHRzIHdpZWRlciBoZXIuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAg -ICAgICAgICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICAgICAg -PHRhYmxlIGNsYXNzPSJhZG1pbi10YWJlbGxlIiBpZD0iYmV6ZWljaG51bmdlbi10YWJlbGxlIj4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBz -dHlsZT0id2lkdGg6MTgwcHgiPlNjaGzDvHNzZWw8L3RoPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjIyMHB4Ij5EZWZhdWx0PC90aD4KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkVpZ2VuZSBCZXplaWNobnVuZzwvdGg+ -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9 -ImJlemVpY2hudW5nZW4tdGJvZHkiPjwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwv -dGFibGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtn -YXA6OHB4O21hcmdpbi10b3A6MTJweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0 -dG9uIGlkPSJidG4tYmV6ZWljaG51bmdlbi1yZXNldCIgY2xhc3M9ImJ0biBidG4tc2VrIiB0aXRs -ZT0iQWxsZSBXZXJ0ZSBhdWYgZGVuIERlZmF1bHQgenVyw7xja3NldHplbiI+WnVyw7xja3NldHpl -bjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWJl -emVpY2hudW5nZW4tc3BlaWNoZXJuIiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVyIj5CZXplaWNobnVu -Z2VuIHNwZWljaGVybjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAg -ICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgICAgICAgICAgICAgIDxociBjbGFz -cz0iYWRtaW4tc2VrdGlvbi10cmVubmVyIj4KCiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24g -Y2xhc3M9ImFkbWluLXNla3Rpb24iIGlkPSJhZG1pbi1zZWt0aW9uLWluZm9oaWxmZSI+CiAgICAg -ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXNla3Rpb24ta29wZiI+CiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICA8aDM+SW5mb3JtYXRpb24gJmFtcDsgSGlsZmU8L2gzPgog -ICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRl -dGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9ImluZm9oaWxmZSIgb3Blbj4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1p -bmZvLWNoZXYiPuKWuDwvc3Bhbj5IaW53ZWlzZSB6dSBJbmZvcm1hdGlvbiAmYW1wOyBIaWxmZTxz -cGFuIGNsYXNzPSJhZG1pbi1pbmZvLWJhZGdlIj5BdWZrbGFwcGVuIC8gWnVrbGFwcGVuPC9zcGFu -Pjwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWlu -LWluZm8tYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5X -YXMgd2lyZCBoaWVyIGdlcGZsZWd0Pzwvc3Ryb25nPiBBbGxlIFRleHRlLCBkaWUgaW0gSW5mby1G -ZW5zdGVyIGVyc2NoZWluZW4gKEtsaWNrIGF1ZiDigJ5JbmZvIiBvYmVuIHJlY2h0cyBpbiBkZXIg -S29wZmxlaXN0ZSkuIERpZSBFZGl0b3JlbiB1bnRlcnN0w7x0emVuIGVpbmZhY2hlIEZvcm1hdGll -cnVuZyDDvGJlciBkaWUgVG9vbGJhcjogPGI+RmV0dDwvYj4sIDxlbT5LdXJzaXY8L2VtPiwgPHU+ -VW50ZXJzdHJpY2hlbjwvdT4sIEF1ZnrDpGhsdW5nZW4sIEVpbnLDvGNrZW4vQXVzcsO8Y2tlbi48 -L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5SZWloZW5mb2xn -ZSBpbSBJbmZvLUZlbnN0ZXI6PC9zdHJvbmc+IEluZm90ZXh0IOKGkiBTdXBwb3J0LUluZm8g4oaS -IFN1cGVyVXNlci1MaXN0ZSDihpIgQWxsZ2VtZWluZSBIaWxmZSDihpIgQmVkaWVudW5ncy1IaW53 -ZWlzZSDihpIgU2NoaWNodGNvZGUtTGVnZW5kZSAoYXV0b21hdGlzY2ggZ2VuZXJpZXJ0KS48L3A+ -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5CZWRpZW51bmdzLUhp -bndlaXNlOjwvc3Ryb25nPiBKZWRlciBMaXN0ZW5laW50cmFnIHdpcmQgYWxzIGVpZ2VuZXIgQnVs -bGV0IGdlcmVuZGVydC4gRm9ybWF0IDxjb2RlPlRpdGVsOiBCZXNjaHJlaWJ1bmc8L2NvZGU+IChl -aW4gRG9wcGVscHVua3Qgendpc2NoZW4gVGl0ZWwgdW5kIEVya2zDpHJ1bmcpIGzDpHNzdCBkZW4g -VGl0ZWwgYXV0b21hdGlzY2ggZmV0dCB3ZXJkZW4uPC9wPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDxwPjxzdHJvbmc+U2NobGllw58tSW5mbzo8L3N0cm9uZz4gV2lyZCBpbSBJbmZv -LUZlbnN0ZXIgPGI+bmljaHQ8L2I+IGFuZ2V6ZWlndCwgc29uZGVybiBiZWltIGF1dG9tYXRpc2No -ZW4gU2VydmVyLVN0b3AgbmFjaCBJbmFrdGl2aXTDpHQuIFBsYXR6aGFsdGVyIDxjb2RlPnttaW51 -dGVufTwvY29kZT4gd2lyZCBkdXJjaCBkaWUga29uZmlndXJpZXJ0ZSBTY2hsaWXDn3plaXQgZXJz -ZXR6dC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAg -ICAgICAgICAgICAgPC9kZXRhaWxzPgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJk -aXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxOHB4O21heC13aWR0aDo5MDBw -eCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1i -b3R0b206NnB4Ij5JbmZvdGV4dCAoZXJzY2hlaW50IGltIEluZm8tRmVuc3Rlcik8L2xhYmVsPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icnRlLXRvb2xiYXIiIGRhdGEt -cnRlLWZvcj0iaWgtaW5mb3RleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxi -dXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9ImJvbGQiIHRpdGxl -PSJGZXR0IChDdHJsK0IpIj48c3Ryb25nPkI8L3N0cm9uZz48L2J1dHRvbj4KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4i -IGRhdGEtY21kPSJpdGFsaWMiIHRpdGxlPSJLdXJzaXYgKEN0cmwrSSkiPjxlbT5JPC9lbT48L2J1 -dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRv -biIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJ1bmRlcmxpbmUiIHRpdGxlPSJVbnRlcnN0cmlj -aGVuIChDdHJsK1UpIj48dT5VPC91PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIDxzcGFuIGNsYXNzPSJydGUtc2VwIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHkiPgogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+V2FzIHdpcmQgaGllciBnZXBmbGVn +dD88L3N0cm9uZz4gQWxsZSBUZXh0ZSwgZGllIGltIEluZm8tRmVuc3RlciBlcnNjaGVpbmVuIChL +bGljayBhdWYg4oCeSW5mbyIgb2JlbiByZWNodHMgaW4gZGVyIEtvcGZsZWlzdGUpLiBEaWUgRWRp +dG9yZW4gdW50ZXJzdMO8dHplbiBlaW5mYWNoZSBGb3JtYXRpZXJ1bmcgw7xiZXIgZGllIFRvb2xi +YXI6IDxiPkZldHQ8L2I+LCA8ZW0+S3Vyc2l2PC9lbT4sIDx1PlVudGVyc3RyaWNoZW48L3U+LCBB +dWZ6w6RobHVuZ2VuLCBFaW5yw7xja2VuL0F1c3LDvGNrZW4uPC9wPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+UmVpaGVuZm9sZ2UgaW0gSW5mby1GZW5zdGVyOjwv +c3Ryb25nPiBJbmZvdGV4dCDihpIgU3VwcG9ydC1JbmZvIOKGkiBTdXBlclVzZXItTGlzdGUg4oaS +IEFsbGdlbWVpbmUgSGlsZmUg4oaSIEJlZGllbnVuZ3MtSGlud2Vpc2Ug4oaSIFNjaGljaHRjb2Rl +LUxlZ2VuZGUgKGF1dG9tYXRpc2NoIGdlbmVyaWVydCkuPC9wPgogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDxwPjxzdHJvbmc+QmVkaWVudW5ncy1IaW53ZWlzZTo8L3N0cm9uZz4gSmVk +ZXIgTGlzdGVuZWludHJhZyB3aXJkIGFscyBlaWdlbmVyIEJ1bGxldCBnZXJlbmRlcnQuIEZvcm1h +dCA8Y29kZT5UaXRlbDogQmVzY2hyZWlidW5nPC9jb2RlPiAoZWluIERvcHBlbHB1bmt0IHp3aXNj +aGVuIFRpdGVsIHVuZCBFcmtsw6RydW5nKSBsw6Rzc3QgZGVuIFRpdGVsIGF1dG9tYXRpc2NoIGZl +dHQgd2VyZGVuLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25n +PlNjaGxpZcOfLUluZm86PC9zdHJvbmc+IFdpcmQgaW0gSW5mby1GZW5zdGVyIDxiPm5pY2h0PC9i +PiBhbmdlemVpZ3QsIHNvbmRlcm4gYmVpbSBhdXRvbWF0aXNjaGVuIFNlcnZlci1TdG9wIG5hY2gg +SW5ha3Rpdml0w6R0LiBQbGF0emhhbHRlciA8Y29kZT57bWludXRlbn08L2NvZGU+IHdpcmQgZHVy +Y2ggZGllIGtvbmZpZ3VyaWVydGUgU2NobGllw596ZWl0IGVyc2V0enQuPC9wPgogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGV0YWls +cz4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtZGly +ZWN0aW9uOmNvbHVtbjtnYXA6MThweDttYXgtd2lkdGg6OTAwcHgiPgogICAgICAgICAgICAgICAg +ICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJk +aXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjZweCI+SW5mb3RleHQg +KGVyc2NoZWludCBpbSBJbmZvLUZlbnN0ZXIpPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIDxkaXYgY2xhc3M9InJ0ZS10b29sYmFyIiBkYXRhLXJ0ZS1mb3I9ImloLWluZm90ZXh0 +Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIg +Y2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJib2xkIiB0aXRsZT0iRmV0dCAoQ3RybCtCKSI+PHN0 +cm9uZz5CPC9zdHJvbmc+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0iaXRhbGljIiB0 +aXRsZT0iS3Vyc2l2IChDdHJsK0kpIj48ZW0+STwvZW0+PC9idXR0b24+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBk +YXRhLWNtZD0idW5kZXJsaW5lIiB0aXRsZT0iVW50ZXJzdHJpY2hlbiAoQ3RybCtVKSI+PHU+VTwv +dT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0i +cnRlLXNlcCI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24g +dHlwZT0iYnV0dG9uIiBjbGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9Imluc2VydFVub3JkZXJlZExp +c3QiIHRpdGxlPSJBdWZ6w6RobHVuZyI+4oCiPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNt -ZD0iaW5zZXJ0VW5vcmRlcmVkTGlzdCIgdGl0bGU9IkF1ZnrDpGhsdW5nIj7igKI8L2J1dHRvbj4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xh -c3M9InJ0ZS1idG4iIGRhdGEtY21kPSJpbnNlcnRPcmRlcmVkTGlzdCIgdGl0bGU9Ik51bW1lcmll -cnQiPjEuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xh -c3M9InJ0ZS1zZXAiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0 -dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJvdXRkZW50IiB0aXRs -ZT0iQXVzcsO8Y2tlbiI+4oekPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0iaW5kZW50 -IiB0aXRsZT0iRWlucsO8Y2tlbiI+4oelPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPHNwYW4gY2xhc3M9InJ0ZS1zZXAiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAg +ZD0iaW5zZXJ0T3JkZXJlZExpc3QiIHRpdGxlPSJOdW1tZXJpZXJ0Ij4xLjwvYnV0dG9uPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJydGUtc2VwIj48L3NwYW4+ +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNs +YXNzPSJydGUtYnRuIiBkYXRhLWNtZD0ib3V0ZGVudCIgdGl0bGU9IkF1c3LDvGNrZW4iPuKHpDwv +YnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0 +dG9uIiBjbGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9ImluZGVudCIgdGl0bGU9IkVpbnLDvGNrZW4i +PuKHpTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNz +PSJydGUtc2VwIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRv +biB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0icmVtb3ZlRm9ybWF0IiB0 +aXRsZT0iRm9ybWF0aWVydW5nIGVudGZlcm5lbiI+4pyVPC9idXR0b24+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9 +ImloLWluZm90ZXh0IiBjbGFzcz0icnRlLWVkaXRvciIgY29udGVudGVkaXRhYmxlPSJ0cnVlIiBz +cGVsbGNoZWNrPSJ0cnVlIiBzdHlsZT0ibWluLWhlaWdodDo4MHB4Ij48L2Rpdj4KICAgICAgICAg +ICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC13 +ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NnB4Ij5TdXBwb3J0LUluZm8gKEFuc3ByZWNocGFydG5l +ciBiZWkgRnJhZ2VuKTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNs +YXNzPSJydGUtdG9vbGJhciIgZGF0YS1ydGUtZm9yPSJpaC1zdXBwb3J0Ij4KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4i +IGRhdGEtY21kPSJib2xkIiB0aXRsZT0iRmV0dCAoQ3RybCtCKSI+PHN0cm9uZz5CPC9zdHJvbmc+ +PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJi +dXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0iaXRhbGljIiB0aXRsZT0iS3Vyc2l2IChD +dHJsK0kpIj48ZW0+STwvZW0+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0idW5kZXJs +aW5lIiB0aXRsZT0iVW50ZXJzdHJpY2hlbiAoQ3RybCtVKSI+PHU+VTwvdT48L2J1dHRvbj4KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icnRlLXNlcCI+PC9zcGFu +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBj +bGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9Imluc2VydFVub3JkZXJlZExpc3QiIHRpdGxlPSJBdWZ6 +w6RobHVuZyI+4oCiPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1 +dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0iaW5zZXJ0T3JkZXJl +ZExpc3QiIHRpdGxlPSJOdW1tZXJpZXJ0Ij4xLjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJydGUtc2VwIj48L3NwYW4+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBk +YXRhLWNtZD0ib3V0ZGVudCIgdGl0bGU9IkF1c3LDvGNrZW4iPuKHpDwvYnV0dG9uPgogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icnRl +LWJ0biIgZGF0YS1jbWQ9ImluZGVudCIgdGl0bGU9IkVpbnLDvGNrZW4iPuKHpTwvYnV0dG9uPgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJydGUtc2VwIj48L3Nw +YW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24i +IGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0icmVtb3ZlRm9ybWF0IiB0aXRsZT0iRm9ybWF0aWVy +dW5nIGVudGZlcm5lbiI+4pyVPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImloLXN1cHBvcnQiIGNs +YXNzPSJydGUtZWRpdG9yIiBjb250ZW50ZWRpdGFibGU9InRydWUiIHNwZWxsY2hlY2s9InRydWUi +IHN0eWxlPSJtaW4taGVpZ2h0OjEwMHB4Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAg +PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdp +bi1ib3R0b206NnB4Ij5BbGxnZW1laW5lIEhpbGZlIChmcmVpZXIgVGV4dCk8L2xhYmVsPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icnRlLXRvb2xiYXIiIGRhdGEtcnRl +LWZvcj0iaWgtaGlsZmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24g +dHlwZT0iYnV0dG9uIiBjbGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9ImJvbGQiIHRpdGxlPSJGZXR0 +IChDdHJsK0IpIj48c3Ryb25nPkI8L3N0cm9uZz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4iIGRhdGEt -Y21kPSJyZW1vdmVGb3JtYXQiIHRpdGxlPSJGb3JtYXRpZXJ1bmcgZW50ZmVybmVuIj7inJU8L2J1 -dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPGRpdiBpZD0iaWgtaW5mb3RleHQiIGNsYXNzPSJydGUtZWRpdG9yIiBjb250 -ZW50ZWRpdGFibGU9InRydWUiIHNwZWxsY2hlY2s9InRydWUiIHN0eWxlPSJtaW4taGVpZ2h0Ojgw -cHgiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAg +Y21kPSJpdGFsaWMiIHRpdGxlPSJLdXJzaXYgKEN0cmwrSSkiPjxlbT5JPC9lbT48L2J1dHRvbj4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xh +c3M9InJ0ZS1idG4iIGRhdGEtY21kPSJ1bmRlcmxpbmUiIHRpdGxlPSJVbnRlcnN0cmljaGVuIChD +dHJsK1UpIj48dT5VPC91PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IDxzcGFuIGNsYXNzPSJydGUtc2VwIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0iaW5z +ZXJ0VW5vcmRlcmVkTGlzdCIgdGl0bGU9IkF1ZnrDpGhsdW5nIj7igKI8L2J1dHRvbj4KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0 +ZS1idG4iIGRhdGEtY21kPSJpbnNlcnRPcmRlcmVkTGlzdCIgdGl0bGU9Ik51bW1lcmllcnQiPjEu +PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJ0 +ZS1zZXAiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5 +cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJvdXRkZW50IiB0aXRsZT0iQXVz +csO8Y2tlbiI+4oekPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1 +dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0iaW5kZW50IiB0aXRs +ZT0iRWlucsO8Y2tlbiI+4oelPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgPHNwYW4gY2xhc3M9InJ0ZS1zZXAiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJy +ZW1vdmVGb3JtYXQiIHRpdGxlPSJGb3JtYXRpZXJ1bmcgZW50ZmVybmVuIj7inJU8L2J1dHRvbj4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPGRpdiBpZD0iaWgtaGlsZmUiIGNsYXNzPSJydGUtZWRpdG9yIiBjb250ZW50ZWRpdGFi +bGU9InRydWUiIHNwZWxsY2hlY2s9InRydWUiIHN0eWxlPSJtaW4taGVpZ2h0OjEyMHB4Ij48L2Rp +dj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBzdHlsZT0iZGlzcGxheTpibG9j +aztjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4tdG9wOjRweCI+UGxhdHogZsO8ciBnZW5l +cmVsbGUgSGlsZmV0ZXh0ZSwgRkFRcywgVmVyd2Vpc2UuIEVyc2NoZWludCBpbSBJbmZvLUZlbnN0 +ZXIgw7xiZXIgZGVuIEJlZGllbnVuZ3MtSGlud2Vpc2VuLjwvc21hbGw+CiAgICAgICAgICAgICAg +ICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0 +OjYwMDttYXJnaW4tYm90dG9tOjZweCI+QmVkaWVudW5ncy1IaW53ZWlzZSAoamVkZXIgQnVsbGV0 +ID0gZWluZSBaZWlsZSAvIGVpbiBMaXN0ZW5wdW5rdCk8L2xhYmVsPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPGRpdiBjbGFzcz0icnRlLXRvb2xiYXIiIGRhdGEtcnRlLWZvcj0iaWgtYmVk +aWVudW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1 +dHRvbiIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJib2xkIiB0aXRsZT0iRmV0dCAoQ3RybCtC +KSI+PHN0cm9uZz5CPC9zdHJvbmc+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0iaXRh +bGljIiB0aXRsZT0iS3Vyc2l2IChDdHJsK0kpIj48ZW0+STwvZW0+PC9idXR0b24+CiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUt +YnRuIiBkYXRhLWNtZD0idW5kZXJsaW5lIiB0aXRsZT0iVW50ZXJzdHJpY2hlbiAoQ3RybCtVKSI+ +PHU+VTwvdT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBj +bGFzcz0icnRlLXNlcCI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxi +dXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9Imluc2VydFVub3Jk +ZXJlZExpc3QiIHRpdGxlPSJBdWZ6w6RobHVuZyI+4oCiPC9idXR0b24+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBk +YXRhLWNtZD0iaW5zZXJ0T3JkZXJlZExpc3QiIHRpdGxlPSJOdW1tZXJpZXJ0Ij4xLjwvYnV0dG9u +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJydGUtc2VwIj48 +L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0 +b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0ib3V0ZGVudCIgdGl0bGU9IkF1c3LDvGNrZW4i +PuKHpDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlw +ZT0iYnV0dG9uIiBjbGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9ImluZGVudCIgdGl0bGU9IkVpbnLD +vGNrZW4iPuKHpTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFu +IGNsYXNzPSJydGUtc2VwIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0icmVtb3ZlRm9y +bWF0IiB0aXRsZT0iRm9ybWF0aWVydW5nIGVudGZlcm5lbiI+4pyVPC9idXR0b24+CiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxk +aXYgaWQ9ImloLWJlZGllbnVuZyIgY2xhc3M9InJ0ZS1lZGl0b3IiIGNvbnRlbnRlZGl0YWJsZT0i +dHJ1ZSIgc3BlbGxjaGVjaz0idHJ1ZSIgc3R5bGU9Im1pbi1oZWlnaHQ6MTYwcHgiPjwvZGl2Pgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2Nv +bG9yOnZhcigtLXRleHQtbXV0ZWQpO21hcmdpbi10b3A6NHB4Ij5adXLDvGNrc2V0emVuIGF1ZiBE +ZWZhdWx0OiBFZGl0b3IgbGVlcmVuIHVuZCBzcGVpY2hlcm4g4oCUIGRlciBJbmZvLUJsb2NrIHpl +aWd0IGRhbm4gZGllIGVpbmdlYmF1dGVuIERlZmF1bHQtSGlud2Vpc2UuPC9zbWFsbD4KICAgICAg +ICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9u +dC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NnB4Ij5TY2hsaWXDny1JbmZvIChIaW53ZWlzIGJl +aW0gQXV0by1TaHV0ZG93bik8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRl +eHRhcmVhIGlkPSJpaC1zY2hsaWVzc2luZm8iIGNsYXNzPSJmb3JtLWlucHV0IiByb3dzPSIzIiBz +dHlsZT0id2lkdGg6MTAwJSIgcGxhY2Vob2xkZXI9InouQi4gJ0RpZXNlIEFud2VuZHVuZyBzY2hs +aWXDn3QgbmFjaCB7bWludXRlbn0gTWludXRlbiBJbmFrdGl2aXTDpHQgYXV0b21hdGlzY2guJyI+ +PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBzdHlsZT0iZGlz +cGxheTpibG9jaztjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4tdG9wOjRweCI+UGxhdHpo +YWx0ZXIgPGNvZGU+e21pbnV0ZW59PC9jb2RlPiB3aXJkIGR1cmNoIGRpZSBTY2hsaWXDn3plaXQg +ZXJzZXR6dC4gS2VpbiBSaWNoLVRleHQg4oCUIHdpcmQgYWxzIHJlaW5lciBUZXh0IHZlcndlbmRl +dC48L3NtYWxsPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAg ICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0i -ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo2cHgiPlN1cHBvcnQt -SW5mbyAoQW5zcHJlY2hwYXJ0bmVyIGJlaSBGcmFnZW4pPC9sYWJlbD4KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJ0ZS10b29sYmFyIiBkYXRhLXJ0ZS1mb3I9ImloLXN1 -cHBvcnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0 -dG9uIiBjbGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9ImJvbGQiIHRpdGxlPSJGZXR0IChDdHJsK0Ip -Ij48c3Ryb25nPkI8L3N0cm9uZz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJpdGFs -aWMiIHRpdGxlPSJLdXJzaXYgKEN0cmwrSSkiPjxlbT5JPC9lbT48L2J1dHRvbj4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1i -dG4iIGRhdGEtY21kPSJ1bmRlcmxpbmUiIHRpdGxlPSJVbnRlcnN0cmljaGVuIChDdHJsK1UpIj48 -dT5VPC91PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNs -YXNzPSJydGUtc2VwIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1 -dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0iaW5zZXJ0VW5vcmRl -cmVkTGlzdCIgdGl0bGU9IkF1ZnrDpGhsdW5nIj7igKI8L2J1dHRvbj4KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4iIGRh -dGEtY21kPSJpbnNlcnRPcmRlcmVkTGlzdCIgdGl0bGU9Ik51bW1lcmllcnQiPjEuPC9idXR0b24+ -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJ0ZS1zZXAiPjwv -c3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRv -biIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJvdXRkZW50IiB0aXRsZT0iQXVzcsO8Y2tlbiI+ -4oekPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBl -PSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0iaW5kZW50IiB0aXRsZT0iRWlucsO8 -Y2tlbiI+4oelPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4g -Y2xhc3M9InJ0ZS1zZXAiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJyZW1vdmVGb3Jt -YXQiIHRpdGxlPSJGb3JtYXRpZXJ1bmcgZW50ZmVybmVuIj7inJU8L2J1dHRvbj4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRp -diBpZD0iaWgtc3VwcG9ydCIgY2xhc3M9InJ0ZS1lZGl0b3IiIGNvbnRlbnRlZGl0YWJsZT0idHJ1 -ZSIgc3BlbGxjaGVjaz0idHJ1ZSIgc3R5bGU9Im1pbi1oZWlnaHQ6MTAwcHgiPjwvZGl2PgogICAg -ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztm -b250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo2cHgiPkFsbGdlbWVpbmUgSGlsZmUgKGZyZWll -ciBUZXh0KTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJy -dGUtdG9vbGJhciIgZGF0YS1ydGUtZm9yPSJpaC1oaWxmZSI+CiAgICAgICAgICAgICAgICAgICAg +ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo2cHgiPkltcHJlc3N1 +bSAoZXJzY2hlaW50IMO8YmVyIGRlbiBCdXR0b24g4oCeSW1wcmVzc3VtIiBpbSBJbmZvLUZlbnN0 +ZXIpPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJ0ZS10 +b29sYmFyIiBkYXRhLXJ0ZS1mb3I9ImloLWltcHJlc3N1bSI+CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNt ZD0iYm9sZCIgdGl0bGU9IkZldHQgKEN0cmwrQikiPjxzdHJvbmc+Qjwvc3Ryb25nPjwvYnV0dG9u PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBj @@ -1623,726 +1704,647 @@ ICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icnRlLXNlcCI+PC9zcGFuPgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0i cnRlLWJ0biIgZGF0YS1jbWQ9InJlbW92ZUZvcm1hdCIgdGl0bGU9IkZvcm1hdGllcnVuZyBlbnRm ZXJuZW4iPuKclTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJpaC1oaWxmZSIgY2xhc3M9InJ0ZS1l -ZGl0b3IiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIgc3BlbGxjaGVjaz0idHJ1ZSIgc3R5bGU9Im1p -bi1oZWlnaHQ6MTIwcHgiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxs -IHN0eWxlPSJkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO21hcmdpbi10b3A6 -NHB4Ij5QbGF0eiBmw7xyIGdlbmVyZWxsZSBIaWxmZXRleHRlLCBGQVFzLCBWZXJ3ZWlzZS4gRXJz -Y2hlaW50IGltIEluZm8tRmVuc3RlciDDvGJlciBkZW4gQmVkaWVudW5ncy1IaW53ZWlzZW4uPC9z +ICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJpaC1pbXByZXNzdW0iIGNsYXNzPSJy +dGUtZWRpdG9yIiBjb250ZW50ZWRpdGFibGU9InRydWUiIHNwZWxsY2hlY2s9InRydWUiIHN0eWxl +PSJtaW4taGVpZ2h0OjE4MHB4Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxz +bWFsbCBzdHlsZT0iZGlzcGxheTpibG9jaztjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTttYXJnaW4t +dG9wOjRweCI+SW5pdGlhbCBtaXQgZWluZW0gc2lubnZvbGxlbiBEZWZhdWx0IGJlZsO8bGx0IChQ +b2xpemVpcHLDpHNpZGl1bSBEb3J0bXVuZCAvIFZJIDMgLyB0ZWNobmlzY2hlIEtvbnplcHRpb24g +LyBMaXplbnpoaW53ZWlzZSAvIEhhZnR1bmdzYXVzc2NobHVzcykuIEJpdHRlIEFuc2NocmlmdCBl +cmfDpG56ZW4gdW5kIGdnZi4gYW4gZGllIHRhdHPDpGNobGljaGUgRGllbnN0c3RlbGxlIGFucGFz +c2VuLiA8c3Ryb25nPk5pY2h0IGdlbMO2c2NodDwvc3Ryb25nPiB3aXJkIGRlciBOb3RmYWxsLUhp +bndlaXMgYXVmIFBISyBSb2VzZ2VuIOKAlCBkZXIgaXN0IGltIEltcHJlc3N1bXMtTW9kYWwgZmVz +dCB1bnRlbiB2ZXJhbmtlcnQgdW5kIGthbm4gaGllciBuaWNodCBlbnRmZXJudCB3ZXJkZW4uPC9z bWFsbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAg -ICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3Bs -YXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NnB4Ij5CZWRpZW51bmdzLUhp -bndlaXNlIChqZWRlciBCdWxsZXQgPSBlaW5lIFplaWxlIC8gZWluIExpc3RlbnB1bmt0KTwvbGFi -ZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJydGUtdG9vbGJhciIg -ZGF0YS1ydGUtZm9yPSJpaC1iZWRpZW51bmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9ImJvbGQi -IHRpdGxlPSJGZXR0IChDdHJsK0IpIj48c3Ryb25nPkI8L3N0cm9uZz48L2J1dHRvbj4KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0 -ZS1idG4iIGRhdGEtY21kPSJpdGFsaWMiIHRpdGxlPSJLdXJzaXYgKEN0cmwrSSkiPjxlbT5JPC9l -bT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9 -ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJ1bmRlcmxpbmUiIHRpdGxlPSJVbnRl -cnN0cmljaGVuIChDdHJsK1UpIj48dT5VPC91PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJydGUtc2VwIj48L3NwYW4+CiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBk -YXRhLWNtZD0iaW5zZXJ0VW5vcmRlcmVkTGlzdCIgdGl0bGU9IkF1ZnrDpGhsdW5nIj7igKI8L2J1 -dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRv -biIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJpbnNlcnRPcmRlcmVkTGlzdCIgdGl0bGU9Ik51 -bW1lcmllcnQiPjEuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNw -YW4gY2xhc3M9InJ0ZS1zZXAiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4iIGRhdGEtY21kPSJvdXRkZW50 -IiB0aXRsZT0iQXVzcsO8Y2tlbiI+4oekPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0i -aW5kZW50IiB0aXRsZT0iRWlucsO8Y2tlbiI+4oelPC9idXR0b24+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJ0ZS1zZXAiPjwvc3Bhbj4KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJ0ZS1idG4i -IGRhdGEtY21kPSJyZW1vdmVGb3JtYXQiIHRpdGxlPSJGb3JtYXRpZXJ1bmcgZW50ZmVybmVuIj7i -nJU8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iaWgtYmVkaWVudW5nIiBjbGFzcz0icnRlLWVkaXRv -ciIgY29udGVudGVkaXRhYmxlPSJ0cnVlIiBzcGVsbGNoZWNrPSJ0cnVlIiBzdHlsZT0ibWluLWhl -aWdodDoxNjBweCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgc3R5 -bGU9ImRpc3BsYXk6YmxvY2s7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7bWFyZ2luLXRvcDo0cHgi -Plp1csO8Y2tzZXR6ZW4gYXVmIERlZmF1bHQ6IEVkaXRvciBsZWVyZW4gdW5kIHNwZWljaGVybiDi -gJQgZGVyIEluZm8tQmxvY2sgemVpZ3QgZGFubiBkaWUgZWluZ2ViYXV0ZW4gRGVmYXVsdC1IaW53 -ZWlzZS48L3NtYWxsPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAg -ICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHls -ZT0iZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo2cHgiPlNjaGxp -ZcOfLUluZm8gKEhpbndlaXMgYmVpbSBBdXRvLVNodXRkb3duKTwvbGFiZWw+CiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9ImloLXNjaGxpZXNzaW5mbyIgY2xhc3M9ImZv -cm0taW5wdXQiIHJvd3M9IjMiIHN0eWxlPSJ3aWR0aDoxMDAlIiBwbGFjZWhvbGRlcj0iei5CLiAn -RGllc2UgQW53ZW5kdW5nIHNjaGxpZcOfdCBuYWNoIHttaW51dGVufSBNaW51dGVuIEluYWt0aXZp -dMOkdCBhdXRvbWF0aXNjaC4nIj48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPHNtYWxsIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO21h -cmdpbi10b3A6NHB4Ij5QbGF0emhhbHRlciA8Y29kZT57bWludXRlbn08L2NvZGU+IHdpcmQgZHVy -Y2ggZGllIFNjaGxpZcOfemVpdCBlcnNldHp0LiBLZWluIFJpY2gtVGV4dCDigJQgd2lyZCBhbHMg -cmVpbmVyIFRleHQgdmVyd2VuZGV0Ljwvc21hbGw+CiAgICAgICAgICAgICAgICAgICAgICAgIDwv -ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4t -Ym90dG9tOjZweCI+SW1wcmVzc3VtIChlcnNjaGVpbnQgw7xiZXIgZGVuIEJ1dHRvbiDigJ5JbXBy -ZXNzdW0iIGltIEluZm8tRmVuc3Rlcik8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPGRpdiBjbGFzcz0icnRlLXRvb2xiYXIiIGRhdGEtcnRlLWZvcj0iaWgtaW1wcmVzc3VtIj4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xh -c3M9InJ0ZS1idG4iIGRhdGEtY21kPSJib2xkIiB0aXRsZT0iRmV0dCAoQ3RybCtCKSI+PHN0cm9u -Zz5CPC9zdHJvbmc+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1 -dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0iaXRhbGljIiB0aXRs -ZT0iS3Vyc2l2IChDdHJsK0kpIj48ZW0+STwvZW0+PC9idXR0b24+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRh -LWNtZD0idW5kZXJsaW5lIiB0aXRsZT0iVW50ZXJzdHJpY2hlbiAoQ3RybCtVKSI+PHU+VTwvdT48 -L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icnRl -LXNlcCI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlw -ZT0iYnV0dG9uIiBjbGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9Imluc2VydFVub3JkZXJlZExpc3Qi -IHRpdGxlPSJBdWZ6w6RobHVuZyI+4oCiPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0i -aW5zZXJ0T3JkZXJlZExpc3QiIHRpdGxlPSJOdW1tZXJpZXJ0Ij4xLjwvYnV0dG9uPgogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJydGUtc2VwIj48L3NwYW4+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNz -PSJydGUtYnRuIiBkYXRhLWNtZD0ib3V0ZGVudCIgdGl0bGU9IkF1c3LDvGNrZW4iPuKHpDwvYnV0 -dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9u -IiBjbGFzcz0icnRlLWJ0biIgZGF0YS1jbWQ9ImluZGVudCIgdGl0bGU9IkVpbnLDvGNrZW4iPuKH -pTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJy -dGUtc2VwIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0 -eXBlPSJidXR0b24iIGNsYXNzPSJydGUtYnRuIiBkYXRhLWNtZD0icmVtb3ZlRm9ybWF0IiB0aXRs -ZT0iRm9ybWF0aWVydW5nIGVudGZlcm5lbiI+4pyVPC9idXR0b24+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Imlo -LWltcHJlc3N1bSIgY2xhc3M9InJ0ZS1lZGl0b3IiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIgc3Bl -bGxjaGVjaz0idHJ1ZSIgc3R5bGU9Im1pbi1oZWlnaHQ6MTgwcHgiPjwvZGl2PgogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPHNtYWxsIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigt -LXRleHQtbXV0ZWQpO21hcmdpbi10b3A6NHB4Ij5Jbml0aWFsIG1pdCBlaW5lbSBzaW5udm9sbGVu -IERlZmF1bHQgYmVmw7xsbHQgKFBvbGl6ZWlwcsOkc2lkaXVtIERvcnRtdW5kIC8gVkkgMyAvIHRl -Y2huaXNjaGUgS29uemVwdGlvbiAvIExpemVuemhpbndlaXNlIC8gSGFmdHVuZ3NhdXNzY2hsdXNz -KS4gQml0dGUgQW5zY2hyaWZ0IGVyZ8OkbnplbiB1bmQgZ2dmLiBhbiBkaWUgdGF0c8OkY2hsaWNo -ZSBEaWVuc3RzdGVsbGUgYW5wYXNzZW4uIDxzdHJvbmc+TmljaHQgZ2Vsw7ZzY2h0PC9zdHJvbmc+ -IHdpcmQgZGVyIE5vdGZhbGwtSGlud2VpcyBhdWYgUEhLIFJvZXNnZW4g4oCUIGRlciBpc3QgaW0g -SW1wcmVzc3Vtcy1Nb2RhbCBmZXN0IHVudGVuIHZlcmFua2VydCB1bmQga2FubiBoaWVyIG5pY2h0 -IGVudGZlcm50IHdlcmRlbi48L3NtYWxsPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4K -ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlk -PSJidG4taW5mb2hpbGZlLXNwZWljaGVybiIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciIgc3R5bGU9 -Im1hcmdpbi10b3A6MTJweCI+SW5mb3JtYXRpb24gJmFtcDsgSGlsZmUgc3BlaWNoZXJuPC9idXR0 -b24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgogICAgICAgICAgICAgICAgPC9kaXY+ -CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6IEJlemVpY2hudW5nZW4gJiBMaXN0ZW4g4oCUIGVk -aXRpZXJiYXJlIFN0YW1tZGF0ZW4tTGlzdGVuCiAgICAgICAgICAgICAgICAgICAgIChEaWVuc3Rn -cmFkZSwgRnVua3Rpb25lbikgc3RhdHQgaGFydGNvZGllcnRlIENvZGUtS29uc3RhbnRlbi4gLS0+ -CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi10YWIgdmVyc3RlY2t0IiBpZD0iYWRt -aW4tdGFiLWxpc3RlbiI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29w -ZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5CZXplaWNobnVuZ2VuICZhbXA7IExpc3Rl -bjwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRl -dGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9Imxpc3RlbiI+CiAgICAgICAg +PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWluZm9oaWxmZS1zcGVp +Y2hlcm4iIGNsYXNzPSJidG4gYnRuLXByaW1hZXIiIHN0eWxlPSJtYXJnaW4tdG9wOjEycHgiPklu +Zm9ybWF0aW9uICZhbXA7IEhpbGZlIHNwZWljaGVybjwvYnV0dG9uPgogICAgICAgICAgICAgICAg +ICAgIDwvc2VjdGlvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwh +LS0gVGFiOiBCZXplaWNobnVuZ2VuICYgTGlzdGVuIOKAlCBlZGl0aWVyYmFyZSBTdGFtbWRhdGVu +LUxpc3RlbgogICAgICAgICAgICAgICAgICAgICAoRGllbnN0Z3JhZGUsIEZ1bmt0aW9uZW4pIHN0 +YXR0IGhhcnRjb2RpZXJ0ZSBDb2RlLUtvbnN0YW50ZW4uIC0tPgogICAgICAgICAgICAgICAgPGRp +diBjbGFzcz0iYWRtaW4tdGFiIHZlcnN0ZWNrdCIgaWQ9ImFkbWluLXRhYi1saXN0ZW4iPgogICAg +ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAg +ICAgICAgICA8aDI+QmV6ZWljaG51bmdlbiAmYW1wOyBMaXN0ZW48L2gyPgogICAgICAgICAgICAg +ICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJhZG1pbi1p +bmZvIiBkYXRhLWluZm8ta2V5PSJsaXN0ZW4iPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Vt +bWFyeT48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1jaGV2Ij7ilrg8L3NwYW4+V2FzIHdpcmQgaGll +ciBnZXBmbGVndD88c3BhbiBjbGFzcz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1 +a2xhcHBlbjwvc3Bhbj48L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xh +c3M9ImFkbWluLWluZm8tYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ry +b25nPkRpZW5zdGdyYWRlPC9zdHJvbmc+IOKAlCBkaWUgRGllbnN0Z3JhZC1BdXN3YWhsIGluIGRl +ciBQZXJzb25hbHZlcndhbHR1bmcgKHouQi4gUE9LLCBQSEssIEVQSEspLiBSZWloZW5mb2xnZSBi +ZXN0aW1tdCBkaWUgU29ydGllcnVuZyBpbSBEcm9wZG93bjogPGVtPm9iZW4gPSBow7ZoZXIgZ2Vz +dGVsbHQ8L2VtPi4gVmVyd2VuZGUgZGVuIFN0ZXJuIDxjb2RlPio8L2NvZGU+IGbDvHIgWndpc2No +ZW5zdHVmZW4gd2llIDxjb2RlPlBISyo8L2NvZGU+IChBMTIgendpc2NoZW4gUEhLIEExMSB1bmQg +RVBISyBBMTMpLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RnVu +a3Rpb25lbjwvc3Ryb25nPiDigJQgU3RhbW0tRnVua3Rpb24gZWluZXIgUGVyc29uIChER0wsIFdE +RiwgV2FjaGxlaXR1bmcsIC4uLikuIERlciA8c3Ryb25nPlJhbmc8L3N0cm9uZz4gYmVzdGltbXQg +ZGllIFZlcmFudHdvcnR1bmdzLVJlaWhlbmZvbGdlIGluIGRlciBTY2hpY2h0ICgwID0gaMO2Y2hz +dGUgVmVyYW50d29ydHVuZykuIFBlcnNvbmVuIG1pdCBnbGVpY2hlbSBSYW5nIHdlcmRlbiDDvGJl +ciBpaHJlIHJvaGUgUG9zaXRpb25zLVphaGwgc29ydGllcnQuPC9wPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPHA+PHN0cm9uZz5Wb3JzaWNodCBiZWltIEzDtnNjaGVuOjwvc3Ryb25nPiBQ +ZXJzb25lbiwgZGllIGVpbmVuIGVudGZlcm50ZW4gRGllbnN0Z3JhZCBvZGVyIGVpbmUgZW50ZmVy +bnRlIEZ1bmt0aW9uIHRyYWdlbiwgYmVoYWx0ZW4gZGVuIGFsdGVuIFdlcnQsIGvDtm5uZW4gaWhu +IGFiZXIgbmljaHQgbWVociBuZXUgYXVzd8OkaGxlbiwgYmlzIGVyIHdpZWRlciBpbiBkZXIgTGlz +dGUgc3RlaHQuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAg +ICAgICAgICA8L2RldGFpbHM+CgogICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJh +ZG1pbi1zZWt0aW9uIiBpZD0iYWRtaW4tc2VrdGlvbi1saXN0ZW4tZGllbnN0Z3JhZGUiPgogICAg +ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1zZWt0aW9uLWtvcGYiPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRpZW5zdGdyYWRlPC9oMz4KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1kaWVuc3RncmFkLW5ldSIgY2xhc3M9ImJ0 +biBidG4tZXJmb2xnIj5OZXVlciBEaWVuc3RncmFkPC9idXR0b24+CiAgICAgICAgICAgICAgICAg +ICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImFkbWlu +LXRhYmVsbGUiIGlkPSJkaWVuc3RncmFkZS10YWJlbGxlIj4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NjBweCI+UmFu +ZzwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5CZXplaWNobnVu +ZzwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lk +dGg6MTMwcHgiPkFrdGlvbmVuPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDx0Ym9keSBpZD0iZGllbnN0Z3JhZGUtdGJvZHkiPjwvdGJvZHk+CiAgICAg +ICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNs +YXNzPSJhZG1pbi1oaW53ZWlzIj48ZW0+UmVpaGVuZm9sZ2UgcGVyIOKGkSDihpMgw6RuZGVybi4g +SG9lY2hzdGVyIERpZW5zdGdyYWQgenVlcnN0LjwvZW0+PC9wPgogICAgICAgICAgICAgICAgICAg +ICAgICA8YnV0dG9uIGlkPSJidG4tZGllbnN0Z3JhZGUtc3BlaWNoZXJuIiBjbGFzcz0iYnRuIGJ0 +bi1wcmltYWVyIiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4Ij5EaWVuc3RncmFkZSBzcGVpY2hlcm48 +L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgICAgICAgICAg +ICAgIDxzZWN0aW9uIGNsYXNzPSJhZG1pbi1zZWt0aW9uIiBpZD0iYWRtaW4tc2VrdGlvbi1saXN0 +ZW4tZnVua3Rpb25lbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWlu +LXNla3Rpb24ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RnVua3Rpb25l +bjwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZnVua3Rp +b24tbmV1IiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGciPk5ldWUgRnVua3Rpb248L2J1dHRvbj4KICAg +ICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJs +ZSBjbGFzcz0iYWRtaW4tdGFiZWxsZSIgaWQ9ImZ1bmt0aW9uZW4tdGFiZWxsZSI+CiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9Indp +ZHRoOjYwcHgiPlBvczwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0 +aD5CZXplaWNobnVuZzwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0 +aCBzdHlsZT0id2lkdGg6ODBweCIgdGl0bGU9IjAgPSBob2VjaHN0ZSBWZXJhbnR3b3J0dW5nLCA5 +OSA9IHVucmVsZXZhbnQuIFBlcnNvbmVuIG1pdCBnbGVpY2hlbSBSYW5nIHdlcmRlbiBkdXJjaCBk +aWUgcm9oZSBQb3NpdGlvbnMtWmFobCBzb3J0aWVydC4iPlJhbmc8L3RoPgogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjE0MHB4O3RleHQtYWxpZ246 +Y2VudGVyIiB0aXRsZT0iV2VubiBkZWFrdGl2aWVydCwgd2VyZGVuIFBlcnNvbmVuIG1pdCBkaWVz +ZXIgRnVua3Rpb24gTklDSFQgaW4gZGVyIFBsYW51bmdzYW5zaWNodCwgaW0gV29jaGVucGxhbiB1 +bmQgaW0gUGVycy4gUGxhbiBhbmdlemVpZ3Qg4oCUIGJsZWliZW4gYWJlciBpbiBkZXIgUGVyc29u +YWx2ZXJ3YWx0dW5nIHBmbGVnYmFyLiI+SW4gUGxhbnVuZyBzaWNodGJhcjwvdGg+CiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTMwcHgiPkFrdGlv +bmVuPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0 +Ym9keSBpZD0iZnVua3Rpb25lbi10Ym9keSI+PC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAg +ICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImFkbWluLWhpbndl +aXMiPjxlbT5SZWloZW5mb2xnZSBwZXIg4oaRIOKGkyDDpG5kZXJuLjwvZW0+PC9wPgogICAgICAg +ICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZnVua3Rpb25lbi1zcGVpY2hlcm4iIGNs +YXNzPSJidG4gYnRuLXByaW1hZXIiIHN0eWxlPSJtYXJnaW4tdG9wOjEycHgiPkZ1bmt0aW9uZW4g +c3BlaWNoZXJuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgogICAgICAg +ICAgICAgICAgPC9kaXY+CgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBFLU1haWwtVm9ybGFn +ZW4g4oCUIEthcnRlbi1MYXlvdXQgKEZpbmRpbmcgQy43IC8gU3BlYyBGLjEpIC0tPgogICAgICAg +ICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIHZlcnN0ZWNrdCIgaWQ9ImFkbWluLXRhYi1l +bWFpbHZvcmxhZ2VuIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1rb3Bm +Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPkUtTWFpbC1Wb3JsYWdlbjwvaDI+CiAgICAg +ICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRldGFpbHMgY2xhc3M9 +ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9ImVtYWlsdm9ybGFnZW4iIG9wZW4+CiAgICAgICAg ICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWNoZXYiPuKW -uDwvc3Bhbj5XYXMgd2lyZCBoaWVyIGdlcGZsZWd0PzxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWJh +uDwvc3Bhbj5Xb3p1IGRpZXNlIFZvcmxhZ2VuPzxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWJhZGdl +Ij5BdWZrbGFwcGVuIC8gWnVrbGFwcGVuPC9zcGFuPjwvc3VtbWFyeT4KICAgICAgICAgICAgICAg +ICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4taW5mby1ib2R5Ij4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIDxwPkhpZXIgd2VyZGVuIEJldHJlZmYgdW5kIFRleHQgYWxsZXIgRS1NYWlsLVZv +cmxhZ2VuIGdlcGZsZWd0LiBWYXJpYWJsZW4gd2llIDxjb2RlPntkYXR1bX08L2NvZGU+IG9kZXIg +PGNvZGU+e3BlcnNvbl9uYW1lfTwvY29kZT4gd2VyZGVuIGJlaW0gw5ZmZm5lbiBkZXIgTWFpbCBh +dXRvbWF0aXNjaCBkdXJjaCBrb25rcmV0ZSBXZXJ0ZSBlcnNldHp0LjwvcD4KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+VmVyc2FuZCBhdXNzY2hsaWXDn2xpY2ggw7xiZXIg +ZGFzIFN0YW5kYXJkLU1haWxwcm9ncmFtbSAoT3V0bG9vayk8L3N0cm9uZz4g4oCUIGJlaW0gYXVz +bMO2c2VuZGVuIEVyZWlnbmlzICh6LkIuIEVpbnRyYWcgZWluZXIgS3JhbmttZWxkdW5nKSDDtmZm +bmV0IHNpY2ggZWluZSB2b3JhdXNnZWbDvGxsdGUgTWFpbCBtaXQgRW1wZsOkbmdlcm4sIEJldHJl +ZmYgdW5kIFRleHQuIER1IHByw7xmc3QgZGllIE1haWwgdW5kIHZlcnNjaGlja3N0IHNpZSBtYW51 +ZWxsIHBlciBLbGljayBhdWYg4oCeU2VuZGVuIi4gS2VpbiBhdXRvbWF0aXNjaGVyIFZlcnNhbmQu +PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5BdXRvLVRyaWdnZXIg +YWt0aXZpZXJlbjwvc3Ryb25nPiDigJQgaW0gRWRpdG9yLU1vZGFsIGVpbmVyIFZvcmxhZ2UgcHJv +IFRyaWdnZXIgZWluc3RlbGxiYXIgKEFrdGl2aWVyZW4gKyBFbXBmw6RuZ2VyIHfDpGhsZW4pLiBT +b2xhbmdlIGVpbiBUcmlnZ2VyIGRlYWt0aXZpZXJ0IGlzdCwgw7ZmZm5ldCBzaWNoIGJlaW0gRXJl +aWduaXMga2VpbiBQb3B1cC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ry +b25nPkRlZml6aXQtQnJpZWZpbmc8L3N0cm9uZz4g4oCUIHdpcmQgbWFudWVsbCBwZXIgQnV0dG9u +IGltIFRhYiA8ZW0+UHLDvGZ1bmc8L2VtPiBhdXNnZWzDtnN0IChrZWluIFNjaGVkdWxlcikuIERl +ciBCdXR0b24gw7ZmZm5ldCBPdXRsb29rIG1pdCBlaW5lciDDnGJlcnNpY2h0IGFsbGVyIFVudGVy +YmVzZXR6dW5nZW4gZGVyIG7DpGNoc3RlbiA0IFdvY2hlbi48L3A+CiAgICAgICAgICAgICAgICAg +ICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAg +ICAgICAgICA8ZGl2IGlkPSJlbWFpbHZvcmxhZ2VuLWluaGFsdCI+PC9kaXY+CgogICAgICAgICAg +ICAgICAgICAgIDwhLS0gU3VwcG9ydC1NYWlsLVZvcmxhZ2U6IG51ciBmdWVyIFBoaWxpcHAgUm9l +c2dlbiBzaWNodGJhci4KICAgICAgICAgICAgICAgICAgICAgICAgIFdpcmQgcGVyIEpTIGluIGFw +cC5qcyAvIGFkbWluLmpzIGVpbmdlYmxlbmRldCwKICAgICAgICAgICAgICAgICAgICAgICAgIHdl +bm4gWi5iZW51dHplciBtaXQgTlcwNTM2MDkgbWF0Y2hlZC4gLS0+CiAgICAgICAgICAgICAgICAg +ICAgPHNlY3Rpb24gY2xhc3M9ImFkbWluLXNla3Rpb24gdmVyc3RlY2t0IiBpZD0iYWRtaW4tc2Vr +dGlvbi1zdXBwb3J0bWFpbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFk +bWluLXNla3Rpb24ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+U3VwcG9y +dC1NYWlsLVZvcmxhZ2UgKEltcHJlc3N1bXMtTW9kYWwpPC9oMz4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZWNodGUtZGlydHktaGlud2VpcyIgc3R5bGU9ImZvbnQt +c3R5bGU6aXRhbGljIj5OdXIgZsO8ciBQSEsgUm9lc2dlbiBzaWNodGJhcjwvc3Bhbj4KICAgICAg +ICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZXRhaWxz +IGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5PSJzdXBwb3J0bWFpbCI+CiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1jaGV2 +Ij7ilrg8L3NwYW4+V2FzIGlzdCBkYXM/PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1 +ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4taW5mby1ib2R5Ij4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8cD5IaWVyIGthbm5zdCBkdSBkZW4gQm9keSBkZXIgU3VwcG9ydC1NYWls +IGFucGFzc2VuLCBkaWUgYmVpbSBLbGljayBhdWYgPGVtPuKAnlN1cHBvcnQtQW5mcmFnZSBwZXIg +RS1NYWlsIjwvZW0+IGltIEltcHJlc3N1bXMtTW9kYWwgdm9yYXVzZ2Vmw7xsbHQgd2lyZC4gUGxh +aW4tVGV4dCwga2VpbiBIVE1MIOKAlCBPdXRsb29rIMO8YmVybmltbXQncyAxOjEuPC9wPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+UGxhdHpoYWx0ZXI8L3N0cm9u +Zz4gKHdlcmRlbiBiZWltIFNlbmRlbiBhdXRvbWF0aXNjaCBlcnNldHp0KTo8L3A+CiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8bGk+PGNvZGU+e253X2tlbm51bmd9PC9jb2RlPiDigJQgV2luZG93cy1Vc2VyIGRl +cyBBYnNlbmRlcnMgKHouJm5ic3A7Qi4gPGNvZGU+UE9MSVpFSVxOVzA1NTgwMTwvY29kZT4pPC9s +aT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxjb2RlPntha3R1ZWxs +ZV9hbnNpY2h0fTwvY29kZT4g4oCUIFRhYiwgZGVuIGRlciBVc2VyIHp1bGV0enQgb2ZmZW4gaGF0 +dGU8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGNvZGU+e2Rh +dHVtfTwvY29kZT4g4oCUIGhldXRlLCA8Y29kZT5kZC5tbS5qampqPC9jb2RlPjwvbGk+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Y29kZT57dWhyemVpdH08L2NvZGU+ +IOKAlCBqZXR6dCwgPGNvZGU+aGg6bW08L2NvZGU+PC9saT4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgPGxpPjxjb2RlPnthdWZsb2VzdW5nfTwvY29kZT4g4oCUIFZpZXdwb3J0 +LCB6LiZuYnNwO0IuIDxjb2RlPjE5MjB4MTA4MDwvY29kZT48L2xpPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8bGk+PGNvZGU+e2FwcF9qYWhyfTwvY29kZT4g4oCUIFdlcnQg +YXVzIGFkbWluLmpzb248L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +bGk+PGNvZGU+e2Jyb3dzZXJ9PC9jb2RlPiDigJQgQnJvd3Nlci1Vc2VyLUFnZW50IChtYXggMTIw +IFplaWNoZW4pPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RW1wZsOkbmdlciB1bmQgQmV0 +cmVmZjwvc3Ryb25nPiBzaW5kIGhhcnRjb2RpZXJ0ICg8Y29kZT5waGlsaXBwLnJvZXNnZW5AcG9s +aXplaS5ucncuZGU8L2NvZGU+IC8gPGNvZGU+VkkzIERHTCBQbGFudW5nIC0gRG9ydG11bmQ8L2Nv +ZGU+KSDigJQgbmljaHQgw7xiZXIgZGllc2VuIEVkaXRvciDDpG5kZXJiYXIuPC9wPgogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGV0 +YWlscz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJzdXBwb3J0bWFpbC10 +ZXh0IiBjbGFzcz0iZm9ybS1pbnB1dCIgcm93cz0iMjIiIHN0eWxlPSJ3aWR0aDoxMDAlO2ZvbnQt +ZmFtaWx5OnVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxDb25zb2xhcyxtb25vc3Bh +Y2U7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS41IiBwbGFjZWhvbGRlcj0iKGxlZXIgPSBl +aW5nZWJhdXRlciBEZWZhdWx0IHdpcmQgdmVyd2VuZGV0KSI+PC90ZXh0YXJlYT4KICAgICAgICAg +ICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4O2Rpc3BsYXk6ZmxleDth +bGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7ZmxleC13cmFwOndyYXAiPgogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXN1cHBvcnRtYWlsLXNwZWljaGVybiIgY2xh +c3M9ImJ0biBidG4tcHJpbWFlciI+Vm9ybGFnZSBzcGVpY2hlcm48L2J1dHRvbj4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1zdXBwb3J0bWFpbC1kZWZhdWx0IiBj +bGFzcz0iYnRuIGJ0bi1zZWsgYnRuLWtsZWluIj5BdWYgRGVmYXVsdCB6dXLDvGNrc2V0emVuPC9i +dXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc3VwcG9y +dG1haWwtdm9yc2NoYXUiIGNsYXNzPSJidG4gYnRuLXNlayBidG4ta2xlaW4iIHRpdGxlPSJPdXRs +b29rIG1pdCBha3R1ZWxsZXIgVm9ybGFnZSArIExpdmUtV2VydGVuIMO2ZmZuZW4iPk91dGxvb2st +Vm9yc2NoYXUgw7ZmZm5lbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNw +YW4gaWQ9InN1cHBvcnRtYWlsLWRpcnR5LWhpbndlaXMiIGNsYXNzPSJyZWNodGUtZGlydHktaGlu +d2VpcyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+4pePIFVuZ2VzcGVpY2hlcnRlIMOEbmRlcnVuZ2Vu +PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAg +ICA8L3NlY3Rpb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0t +IFRhYjogTWl0dGVpbHVuZ2VuIChTcHJpbnQgRC0zYywgMjAyNi0wNS0yOSkg4oCUIFNVLW9ubHku +CiAgICAgICAgICAgICAgICAgICAgIFZvbSBTdXBlclVzZXIgZ2VwZmxlZ3RlIE1vZGFsZS1IaW53 +ZWlzZSBhbiBQZXJzb25lbi8KICAgICAgICAgICAgICAgICAgICAgR3J1cHBlbi9Sb2xsZW4gbWl0 +IFRyaWdnZXIgKyBBbmhhZW5nZW4uIEtvbXBsZXR0ZSBVSQogICAgICAgICAgICAgICAgICAgICB3 +aXJkIHp1ciBMYXVmemVpdCBhdXMganMvYWRtaW5fbWl0dGVpbHVuZ2VuLmpzIGdlcmVuZGVydC4g +LS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi10YWIgdmVyc3RlY2t0IiBpZD0i +YWRtaW4tdGFiLW1pdHRlaWx1bmdlbiI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i +YWRtaW4ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5NaXR0ZWlsdW5nZW48L2gy +PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkZXRhaWxz +IGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5PSJtaXR0ZWlsdW5nZW4iPgogICAgICAg +ICAgICAgICAgICAgICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1jaGV2Ij7i +lrg8L3NwYW4+V2FzIHNpbmQgTWl0dGVpbHVuZ2VuPzxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWJh ZGdlIj5BdWZrbGFwcGVuIC8gWnVrbGFwcGVuPC9zcGFuPjwvc3VtbWFyeT4KICAgICAgICAgICAg ICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4taW5mby1ib2R5Ij4KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIDxwPjxzdHJvbmc+RGllbnN0Z3JhZGU8L3N0cm9uZz4g4oCUIGRpZSBEaWVu -c3RncmFkLUF1c3dhaGwgaW4gZGVyIFBlcnNvbmFsdmVyd2FsdHVuZyAoei5CLiBQT0ssIFBISywg -RVBISykuIFJlaWhlbmZvbGdlIGJlc3RpbW10IGRpZSBTb3J0aWVydW5nIGltIERyb3Bkb3duOiA8 -ZW0+b2JlbiA9IGjDtmhlciBnZXN0ZWxsdDwvZW0+LiBWZXJ3ZW5kZSBkZW4gU3Rlcm4gPGNvZGU+ -KjwvY29kZT4gZsO8ciBad2lzY2hlbnN0dWZlbiB3aWUgPGNvZGU+UEhLKjwvY29kZT4gKEExMiB6 -d2lzY2hlbiBQSEsgQTExIHVuZCBFUEhLIEExMykuPC9wPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPHA+PHN0cm9uZz5GdW5rdGlvbmVuPC9zdHJvbmc+IOKAlCBTdGFtbS1GdW5rdGlvbiBl -aW5lciBQZXJzb24gKERHTCwgV0RGLCBXYWNobGVpdHVuZywgLi4uKS4gRGVyIDxzdHJvbmc+UmFu -Zzwvc3Ryb25nPiBiZXN0aW1tdCBkaWUgVmVyYW50d29ydHVuZ3MtUmVpaGVuZm9sZ2UgaW4gZGVy -IFNjaGljaHQgKDAgPSBow7ZjaHN0ZSBWZXJhbnR3b3J0dW5nKS4gUGVyc29uZW4gbWl0IGdsZWlj -aGVtIFJhbmcgd2VyZGVuIMO8YmVyIGlocmUgcm9oZSBQb3NpdGlvbnMtWmFobCBzb3J0aWVydC48 -L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlZvcnNpY2h0IGJlaW0g -TMO2c2NoZW46PC9zdHJvbmc+IFBlcnNvbmVuLCBkaWUgZWluZW4gZW50ZmVybnRlbiBEaWVuc3Rn -cmFkIG9kZXIgZWluZSBlbnRmZXJudGUgRnVua3Rpb24gdHJhZ2VuLCBiZWhhbHRlbiBkZW4gYWx0 -ZW4gV2VydCwga8O2bm5lbiBpaG4gYWJlciBuaWNodCBtZWhyIG5ldSBhdXN3w6RobGVuLCBiaXMg -ZXIgd2llZGVyIGluIGRlciBMaXN0ZSBzdGVodC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAg -IDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KCiAgICAgICAgICAgICAgICAg -ICAgPHNlY3Rpb24gY2xhc3M9ImFkbWluLXNla3Rpb24iIGlkPSJhZG1pbi1zZWt0aW9uLWxpc3Rl -bi1kaWVuc3RncmFkZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWlu -LXNla3Rpb24ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RGllbnN0Z3Jh -ZGU8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWRpZW5z -dGdyYWQtbmV1IiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGciPk5ldWVyIERpZW5zdGdyYWQ8L2J1dHRv -bj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAg -IDx0YWJsZSBjbGFzcz0iYWRtaW4tdGFiZWxsZSIgaWQ9ImRpZW5zdGdyYWRlLXRhYmVsbGUiPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0 -eWxlPSJ3aWR0aDo2MHB4Ij5SYW5nPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPHRoPkJlemVpY2hudW5nPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoxMzBweCI+QWt0aW9uZW48L3RoPgogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Ro -ZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJkaWVuc3RncmFkZS10 -Ym9keSI+PC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAg -ICAgICAgICAgICAgICAgPHAgY2xhc3M9ImFkbWluLWhpbndlaXMiPjxlbT5SZWloZW5mb2xnZSBw -ZXIg4oaRIOKGkyDDpG5kZXJuLiBIb2VjaHN0ZXIgRGllbnN0Z3JhZCB6dWVyc3QuPC9lbT48L3A+ -CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1kaWVuc3RncmFkZS1zcGVp -Y2hlcm4iIGNsYXNzPSJidG4gYnRuLXByaW1hZXIiIHN0eWxlPSJtYXJnaW4tdG9wOjEycHgiPkRp -ZW5zdGdyYWRlIHNwZWljaGVybjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvc2VjdGlv -bj4KCiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImFkbWluLXNla3Rpb24iIGlk -PSJhZG1pbi1zZWt0aW9uLWxpc3Rlbi1mdW5rdGlvbmVuIj4KICAgICAgICAgICAgICAgICAgICAg -ICAgPGRpdiBjbGFzcz0iYWRtaW4tc2VrdGlvbi1rb3BmIj4KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIDxoMz5GdW5rdGlvbmVuPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxi -dXR0b24gaWQ9ImJ0bi1mdW5rdGlvbi1uZXUiIGNsYXNzPSJidG4gYnRuLWVyZm9sZyI+TmV1ZSBG -dW5rdGlvbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAg -ICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJhZG1pbi10YWJlbGxlIiBpZD0iZnVua3Rpb25l -bi10YWJlbGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NjBweCI+UG9zPC90aD4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPHRoPkJlemVpY2hudW5nPC90aD4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo4MHB4IiB0aXRsZT0iMCA9IGhvZWNo -c3RlIFZlcmFudHdvcnR1bmcsIDk5ID0gdW5yZWxldmFudC4gUGVyc29uZW4gbWl0IGdsZWljaGVt -IFJhbmcgd2VyZGVuIGR1cmNoIGRpZSByb2hlIFBvc2l0aW9ucy1aYWhsIHNvcnRpZXJ0LiI+UmFu -ZzwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lk -dGg6MTQwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJXZW5uIGRlYWt0aXZpZXJ0LCB3ZXJk -ZW4gUGVyc29uZW4gbWl0IGRpZXNlciBGdW5rdGlvbiBOSUNIVCBpbiBkZXIgUGxhbnVuZ3NhbnNp -Y2h0LCBpbSBXb2NoZW5wbGFuIHVuZCBpbSBQZXJzLiBQbGFuIGFuZ2V6ZWlndCDigJQgYmxlaWJl -biBhYmVyIGluIGRlciBQZXJzb25hbHZlcndhbHR1bmcgcGZsZWdiYXIuIj5JbiBQbGFudW5nIHNp -Y2h0YmFyPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxl -PSJ3aWR0aDoxMzBweCI+QWt0aW9uZW48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJmdW5rdGlvbmVuLXRib2R5Ij48L3Rib2R5Pgog -ICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICA8 -cCBjbGFzcz0iYWRtaW4taGlud2VpcyI+PGVtPlJlaWhlbmZvbGdlIHBlciDihpEg4oaTIMOkbmRl -cm4uPC9lbT48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1mdW5r -dGlvbmVuLXNwZWljaGVybiIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciIgc3R5bGU9Im1hcmdpbi10 -b3A6MTJweCI+RnVua3Rpb25lbiBzcGVpY2hlcm48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAg -ICA8L3NlY3Rpb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCgogICAgICAgICAgICAgICAgPCEt -LSBUYWI6IEUtTWFpbC1Wb3JsYWdlbiDigJQgS2FydGVuLUxheW91dCAoRmluZGluZyBDLjcgLyBT -cGVjIEYuMSkgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi10YWIgdmVyc3Rl -Y2t0IiBpZD0iYWRtaW4tdGFiLWVtYWlsdm9ybGFnZW4iPgogICAgICAgICAgICAgICAgICAgIDxk -aXYgY2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+RS1NYWls -LVZvcmxhZ2VuPC9oMj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAg -ICAgICA8ZGV0YWlscyBjbGFzcz0iYWRtaW4taW5mbyIgZGF0YS1pbmZvLWtleT0iZW1haWx2b3Js -YWdlbiIgb3Blbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9 -ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPldvenUgZGllc2UgVm9ybGFnZW4/PHNwYW4gY2xh -c3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9zdW1t -YXJ5PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHki -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+SGllciB3ZXJkZW4gQmV0cmVmZiB1bmQg -VGV4dCBhbGxlciBFLU1haWwtVm9ybGFnZW4gZ2VwZmxlZ3QuIFZhcmlhYmxlbiB3aWUgPGNvZGU+ -e2RhdHVtfTwvY29kZT4gb2RlciA8Y29kZT57cGVyc29uX25hbWV9PC9jb2RlPiB3ZXJkZW4gYmVp -bSDDlmZmbmVuIGRlciBNYWlsIGF1dG9tYXRpc2NoIGR1cmNoIGtvbmtyZXRlIFdlcnRlIGVyc2V0 -enQuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5WZXJzYW5kIGF1 -c3NjaGxpZcOfbGljaCDDvGJlciBkYXMgU3RhbmRhcmQtTWFpbHByb2dyYW1tIChPdXRsb29rKTwv -c3Ryb25nPiDigJQgYmVpbSBhdXNsw7ZzZW5kZW4gRXJlaWduaXMgKHouQi4gRWludHJhZyBlaW5l -ciBLcmFua21lbGR1bmcpIMO2ZmZuZXQgc2ljaCBlaW5lIHZvcmF1c2dlZsO8bGx0ZSBNYWlsIG1p -dCBFbXBmw6RuZ2VybiwgQmV0cmVmZiB1bmQgVGV4dC4gRHUgcHLDvGZzdCBkaWUgTWFpbCB1bmQg -dmVyc2NoaWNrc3Qgc2llIG1hbnVlbGwgcGVyIEtsaWNrIGF1ZiDigJ5TZW5kZW4iLiBLZWluIGF1 -dG9tYXRpc2NoZXIgVmVyc2FuZC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48 -c3Ryb25nPkF1dG8tVHJpZ2dlciBha3RpdmllcmVuPC9zdHJvbmc+IOKAlCBpbSBFZGl0b3ItTW9k -YWwgZWluZXIgVm9ybGFnZSBwcm8gVHJpZ2dlciBlaW5zdGVsbGJhciAoQWt0aXZpZXJlbiArIEVt -cGbDpG5nZXIgd8OkaGxlbikuIFNvbGFuZ2UgZWluIFRyaWdnZXIgZGVha3RpdmllcnQgaXN0LCDD -tmZmbmV0IHNpY2ggYmVpbSBFcmVpZ25pcyBrZWluIFBvcHVwLjwvcD4KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIDxwPjxzdHJvbmc+RGVmaXppdC1CcmllZmluZzwvc3Ryb25nPiDigJQgd2ly -ZCBtYW51ZWxsIHBlciBCdXR0b24gaW0gVGFiIDxlbT5QcsO8ZnVuZzwvZW0+IGF1c2dlbMO2c3Qg -KGtlaW4gU2NoZWR1bGVyKS4gRGVyIEJ1dHRvbiDDtmZmbmV0IE91dGxvb2sgbWl0IGVpbmVyIMOc -YmVyc2ljaHQgYWxsZXIgVW50ZXJiZXNldHp1bmdlbiBkZXIgbsOkY2hzdGVuIDQgV29jaGVuLjwv -cD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9k -ZXRhaWxzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImVtYWlsdm9ybGFnZW4taW5oYWx0 -Ij48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdXBwb3J0LU1haWwtVm9ybGFnZTog -bnVyIGZ1ZXIgUGhpbGlwcCBSb2VzZ2VuIHNpY2h0YmFyLgogICAgICAgICAgICAgICAgICAgICAg -ICAgV2lyZCBwZXIgSlMgaW4gYXBwLmpzIC8gYWRtaW4uanMgZWluZ2VibGVuZGV0LAogICAgICAg -ICAgICAgICAgICAgICAgICAgd2VubiBaLmJlbnV0emVyIG1pdCBOVzA1MzYwOSBtYXRjaGVkLiAt -LT4KICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYWRtaW4tc2VrdGlvbiB2ZXJz -dGVja3QiIGlkPSJhZG1pbi1zZWt0aW9uLXN1cHBvcnRtYWlsIj4KICAgICAgICAgICAgICAgICAg -ICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tc2VrdGlvbi1rb3BmIj4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDxoMz5TdXBwb3J0LU1haWwtVm9ybGFnZSAoSW1wcmVzc3Vtcy1Nb2RhbCk8L2gz -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlY2h0ZS1kaXJ0eS1o -aW53ZWlzIiBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWMiPk51ciBmw7xyIFBISyBSb2VzZ2VuIHNp -Y2h0YmFyPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAg -ICAgICAgICAgICAgPGRldGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9InN1 -cHBvcnRtYWlsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNs -YXNzPSJhZG1pbi1pbmZvLWNoZXYiPuKWuDwvc3Bhbj5XYXMgaXN0IGRhcz88c3BhbiBjbGFzcz0i -YWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xhcHBlbjwvc3Bhbj48L3N1bW1hcnk+ -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHki -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkhpZXIga2FubnN0IGR1IGRlbiBC -b2R5IGRlciBTdXBwb3J0LU1haWwgYW5wYXNzZW4sIGRpZSBiZWltIEtsaWNrIGF1ZiA8ZW0+4oCe -U3VwcG9ydC1BbmZyYWdlIHBlciBFLU1haWwiPC9lbT4gaW0gSW1wcmVzc3Vtcy1Nb2RhbCB2b3Jh -dXNnZWbDvGxsdCB3aXJkLiBQbGFpbi1UZXh0LCBrZWluIEhUTUwg4oCUIE91dGxvb2sgw7xiZXJu -aW1tdCdzIDE6MS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9u -Zz5QbGF0emhhbHRlcjwvc3Ryb25nPiAod2VyZGVuIGJlaW0gU2VuZGVuIGF1dG9tYXRpc2NoIGVy -c2V0enQpOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Y29kZT57bndfa2VubnVuZ308L2NvZGU+ -IOKAlCBXaW5kb3dzLVVzZXIgZGVzIEFic2VuZGVycyAoei4mbmJzcDtCLiA8Y29kZT5QT0xJWkVJ -XE5XMDU1ODAxPC9jb2RlPik8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8bGk+PGNvZGU+e2FrdHVlbGxlX2Fuc2ljaHR9PC9jb2RlPiDigJQgVGFiLCBkZW4gZGVyIFVz -ZXIgenVsZXR6dCBvZmZlbiBoYXR0ZTwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIDxsaT48Y29kZT57ZGF0dW19PC9jb2RlPiDigJQgaGV1dGUsIDxjb2RlPmRkLm1tLmpq -amo8L2NvZGU+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxj -b2RlPnt1aHJ6ZWl0fTwvY29kZT4g4oCUIGpldHp0LCA8Y29kZT5oaDptbTwvY29kZT48L2xpPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGNvZGU+e2F1ZmxvZXN1bmd9 -PC9jb2RlPiDigJQgVmlld3BvcnQsIHouJm5ic3A7Qi4gPGNvZGU+MTkyMHgxMDgwPC9jb2RlPjwv -bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Y29kZT57YXBwX2ph -aHJ9PC9jb2RlPiDigJQgV2VydCBhdXMgYWRtaW4uanNvbjwvbGk+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDxsaT48Y29kZT57YnJvd3Nlcn08L2NvZGU+IOKAlCBCcm93c2Vy -LVVzZXItQWdlbnQgKG1heCAxMjAgWmVpY2hlbik8L2xpPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9u -Zz5FbXBmw6RuZ2VyIHVuZCBCZXRyZWZmPC9zdHJvbmc+IHNpbmQgaGFydGNvZGllcnQgKDxjb2Rl -PnBoaWxpcHAucm9lc2dlbkBwb2xpemVpLm5ydy5kZTwvY29kZT4gLyA8Y29kZT5WSTMgREdMIFBs -YW51bmcgLSBEb3J0bXVuZDwvY29kZT4pIOKAlCBuaWNodCDDvGJlciBkaWVzZW4gRWRpdG9yIMOk -bmRlcmJhci48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAg -ICAgICAgICAgICAgICAgPC9kZXRhaWxzPgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFy -ZWEgaWQ9InN1cHBvcnRtYWlsLXRleHQiIGNsYXNzPSJmb3JtLWlucHV0IiByb3dzPSIyMiIgc3R5 -bGU9IndpZHRoOjEwMCU7Zm9udC1mYW1pbHk6dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1l -bmxvLENvbnNvbGFzLG1vbm9zcGFjZTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjUiIHBs -YWNlaG9sZGVyPSIobGVlciA9IGVpbmdlYmF1dGVyIERlZmF1bHQgd2lyZCB2ZXJ3ZW5kZXQpIj48 -L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9w -OjEwcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtmbGV4LXdyYXA6 -d3JhcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc3VwcG9y -dG1haWwtc3BlaWNoZXJuIiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVyIj5Wb3JsYWdlIHNwZWljaGVy -bjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXN1 -cHBvcnRtYWlsLWRlZmF1bHQiIGNsYXNzPSJidG4gYnRuLXNlayBidG4ta2xlaW4iPkF1ZiBEZWZh -dWx0IHp1csO8Y2tzZXR6ZW48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxi -dXR0b24gaWQ9ImJ0bi1zdXBwb3J0bWFpbC12b3JzY2hhdSIgY2xhc3M9ImJ0biBidG4tc2VrIGJ0 -bi1rbGVpbiIgdGl0bGU9Ik91dGxvb2sgbWl0IGFrdHVlbGxlciBWb3JsYWdlICsgTGl2ZS1XZXJ0 -ZW4gw7ZmZm5lbiI+T3V0bG9vay1Wb3JzY2hhdSDDtmZmbmVuPC9idXR0b24+CiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICA8c3BhbiBpZD0ic3VwcG9ydG1haWwtZGlydHktaGlud2VpcyIgY2xh -c3M9InJlY2h0ZS1kaXJ0eS1oaW53ZWlzIiBzdHlsZT0iZGlzcGxheTpub25lIj7il48gVW5nZXNw -ZWljaGVydGUgw4RuZGVydW5nZW48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2 -PgogICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoK -ICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBNaXR0ZWlsdW5nZW4gKFNwcmludCBELTNjLCAyMDI2 -LTA1LTI5KSDigJQgU1Utb25seS4KICAgICAgICAgICAgICAgICAgICAgVm9tIFN1cGVyVXNlciBn -ZXBmbGVndGUgTW9kYWxlLUhpbndlaXNlIGFuIFBlcnNvbmVuLwogICAgICAgICAgICAgICAgICAg -ICBHcnVwcGVuL1JvbGxlbiBtaXQgVHJpZ2dlciArIEFuaGFlbmdlbi4gS29tcGxldHRlIFVJCiAg -ICAgICAgICAgICAgICAgICAgIHdpcmQgenVyIExhdWZ6ZWl0IGF1cyBqcy9hZG1pbl9taXR0ZWls -dW5nZW4uanMgZ2VyZW5kZXJ0LiAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWlu -LXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItbWl0dGVpbHVuZ2VuIj4KICAgICAgICAgICAg -ICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1rb3BmIj4KICAgICAgICAgICAgICAgICAgICAgICAg -PGgyPk1pdHRlaWx1bmdlbjwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg -ICAgICAgICAgICAgPGRldGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9Im1p -dHRlaWx1bmdlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNz -PSJhZG1pbi1pbmZvLWNoZXYiPuKWuDwvc3Bhbj5XYXMgc2luZCBNaXR0ZWlsdW5nZW4/PHNwYW4g -Y2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9z -dW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJv -ZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5Xb3p1Pzwvc3Ryb25n -PiBTdXBlclVzZXIga8O2bm5lbiBoaWVyIEhpbndlaXNlIGbDvHIgYXVzZ2V3w6RobHRlIFBlcnNv -bmVuLCBHcnVwcGVuIG9kZXIgUm9sbGVuIGFubGVnZW4uIERpZXNlIGVyc2NoZWluZW4gYmVpbSBu -w6RjaHN0ZW4gQXBwLVN0YXJ0IGFscyBNb2RhbC1TdGFjayAob2JlbiBkdXJjaGdlaGVuZCwgb2Rl -ciBlaW5tYWwgcHJvIFRhZyDigJQgamUgbmFjaCBUcmlnZ2VyKS48L3A+CiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICA8cD48c3Ryb25nPkVtcGbDpG5nZXI8L3N0cm9uZz4gc2luZCBrb21iaW5p -ZXJiYXI6IGVpbnplbG5lIFBlcnNvbmVuLCBnYW56ZSBEaWVuc3RncnVwcGVuLCBSb2xsZW4gKERH -TC9XREYv4oCmLCBTVSwgR2VzYW10dmVyYW50d29ydGxpY2gpIG9kZXIg4oCeQWxsZSIgKGplZGVy -IGVpbmdlbG9nZ3RlIFVzZXIpLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxz -dHJvbmc+VHJpZ2dlcjo8L3N0cm9uZz4gPGVtPmVpbm1hbDwvZW0+ID0gVXNlciBzaWVodCBkaWUg -TWl0dGVpbHVuZyBnZW5hdSBlaW4gTWFsIHVuZCBuaWUgd2llZGVyLiA8ZW0+amVkZXMgTWFsPC9l -bT4gPSBiZWkgamVkZW0gTG9naW4gKG1heC4gMcOXIHBybyBLYWxlbmRlcnRhZykuIDxlbT5iaXMg -RGF0dW08L2VtPiA9IHTDpGdsaWNoIGJpcyB6dW0gU3RpY2h0YWcsIGRhbmFjaCBuaWUgd2llZGVy -LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+QW5ow6RuZ2U6PC9z -dHJvbmc+IGVpbiBUaHVtYm5haWwtQmlsZCAobWF4LiAyIE1CLCBKUEcvUE5HL1dlYlApIHVuZC9v -ZGVyIGVpbiBQREYgKG1heC4gMTAgTUIpIGvDtm5uZW4gYmVpZ2Vmw7xndCB3ZXJkZW4uIEtsaWNr -IGF1ZiBkZW4gQW5oYW5nIMO2ZmZuZXQgaWhuIGltIFZvbGxiaWxkLVN1Yi1Nb2RhbC48L3A+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPldhcydzIG5ldSBtYWNodDo8L3N0 -cm9uZz4gZWluZSBnbG9iYWxlIE1pdHRlaWx1bmcgbWl0IEVtcGbDpG5nZXIg4oCeQWxsZSIgdW5k -IFRyaWdnZXIg4oCeZWlubWFsIiBpc3QgZWZmZWt0aXYgZWluIOKAnldoYXQncyBOZXciLUVpbnRy -YWcuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAg -ICA8L2RldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29wZiIg -c3R5bGU9Im1hcmdpbi10b3A6OHB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZCI+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1taXR0ZWlsdW5nLW5ldSIgY2xhc3M9ImJ0 -biBidG4tZXJmb2xnIj4rIE5ldWUgTWl0dGVpbHVuZzwvYnV0dG9uPgogICAgICAgICAgICAgICAg -ICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1pdHRlaWx1bmdlbi1pbmhh -bHQiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBU -YWI6IFJlY2h0ZSAmIFNpY2h0YmFya2VpdCAoTWVyZ2Ug4oCUIFN1cGVyVXNlciArIEZhY2hhdWZz -aWNodCArIFNpY2h0YmFya2VpdCkgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1p -bi10YWIgdmVyc3RlY2t0IiBpZD0iYWRtaW4tdGFiLXN1cGVydXNlciI+CiAgICAgICAgICAgICAg -ICAgICAgPGRpdiBjbGFzcz0iYWRtaW4ta29wZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxo -Mj5SZWNodGUgJmFtcDsgU2ljaHRiYXJrZWl0PC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAg -PHAgY2xhc3M9InJlY2h0ZS10YWItc3ViIj5Sb2xsZW4tU2xvdHMgbWl0IGtvbmZpZ3VyaWVyYmFy -ZXIgU2VoZW4tL0JlYXJiZWl0ZW4tU2ljaHRiYXJrZWl0LiBTdXBlclVzZXIgc3RpY2h0IGFsbGUg -YW5kZXJlbiDigJQgc2llIHNlaGVuIHVuZCBrw7ZubmVuIGltbWVyIGFsbGVzLiBXZXIgaW4ga2Vp -bmVyIGRpZXNlciBMaXN0ZW4gc3RlaHQsIHNpZWh0IHdlZGVyIFN0YXRpc3RpayBub2NoIExvZ2J1 -Y2ggbm9jaCBBZG1pbmlzdHJhdGlvbi48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+Cgog -ICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJhZG1pbi1zZWt0aW9uIHJlY2h0ZS1j -YXJkIHJlY2h0ZS1jYXJkLXN1IiBpZD0iYWRtaW4tc2VrdGlvbi1zdXBlcnVzZXIiPgogICAgICAg -ICAgICAgICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0icmVjaHRlLXJvbGxlIj4KICAgICAgICAg -ICAgICAgICAgICAgICAgPHN1bW1hcnkgY2xhc3M9InJlY2h0ZS1yb2xsZS1zdW1tYXJ5Ij4KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZWNodGUtY2FyZC1pY29uIiBh -cmlhLWhpZGRlbj0idHJ1ZSI+8J+boTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IDxzcGFuIGNsYXNzPSJyZWNodGUtcm9sbGUtdGl0ZWwiPjxzdHJvbmc+U3VwZXJVc2VyPC9zdHJv -bmc+PHNwYW4gY2xhc3M9InJlY2h0ZS1jYXJkLXN1YiI+Vm9sbHp1Z3JpZmYgYXVmIGFsbGUgRnVu -a3Rpb25lbi4gVmVyd2FsdGV0IGFuZGVyZSBSb2xsZW4uPC9zcGFuPjwvc3Bhbj4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZWNodGUtcm9sbGUtY2hldiIgYXJpYS1o -aWRkZW49InRydWUiPuKWuDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdW1tYXJ5 -PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWNodGUtcm9sbGUtYm9keSI+ -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWNodGUtcm9sbGUtYWt0 -aW9uIj48YnV0dG9uIGlkPSJidG4tc3VwZXJ1c2VyLW5ldSIgY2xhc3M9ImJ0biBidG4tZXJmb2xn -Ij5OZXVlciBTdXBlclVzZXI8L2J1dHRvbj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAg -PGRldGFpbHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9InN1cGVydXNlciI+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeT48c3BhbiBjbGFzcz0iYWRtaW4taW5m -by1jaGV2Ij7ilrg8L3NwYW4+SGlud2Vpc2UgenUgU3VwZXJVc2VybjxzcGFuIGNsYXNzPSJhZG1p -bi1pbmZvLWJhZGdlIj5BdWZrbGFwcGVuIC8gWnVrbGFwcGVuPC9zcGFuPjwvc3VtbWFyeT4KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWluZm8tYm9keSI+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5XYXMgaXN0IGVpbiBTdXBl -clVzZXI/PC9zdHJvbmc+IFN1cGVyVXNlciBoYWJlbiB1bmVpbmdlc2NocsOkbmt0ZW4gWnVncmlm -ZiBhdWYgYWxsZSBBZG1pbmlzdHJhdGlvbnNmdW5rdGlvbmVuLCBlaW5zY2hsaWXDn2xpY2ggZGVy -IFZlcndhbHR1bmcgYW5kZXJlciBTdXBlclVzZXIsIGRlbSBTZXR6ZW4gdm9uIFNvbmRlcnRlcm1p -bmUtSGlud2Vpc2VuIGRpcmVrdCBpbiBkZXIgUGxhbnVuZyB1bmQgZGVyIFBmbGVnZSBkZXIgZ2xv -YmFsZW4gRWluc3RlbGx1bmdlbi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -PHA+PHN0cm9uZz5TaWNoZXJoZWl0c2hpbndlaXM6PC9zdHJvbmc+IE51ciBiZXN0ZWhlbmRlIFN1 -cGVyVXNlciBrw7ZubmVuIGRpZXNlIExpc3RlIGJlYXJiZWl0ZW4uIERhbWl0IHdpcmQgdmVyaGlu -ZGVydCwgZGFzcyBBZG1pbi1SZWNodGUgdmVybG9yZW4gZ2VoZW4gb2RlciB1bmJlcmVjaHRpZ3Qg -ZXJ3ZWl0ZXJ0IHdlcmRlbi4gPGI+TWluZGVzdGVucyBlaW4gU3VwZXJVc2VyIG11c3MgaW1tZXIg -ZWluZ2V0cmFnZW4gc2VpbjwvYj4g4oCUIHNvbnN0IGlzdCBuaWVtYW5kIG1laHIgaW4gZGVyIExh -Z2UsIGFkbWluaXN0cmF0aXZlIMOEbmRlcnVuZ2VuIHZvcnp1bmVobWVuLjwvcD4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkZlbGRlcjo8L3N0cm9uZz4gTmFtZSAo -S2xhcnRleHQgenVyIElkZW50aWZpa2F0aW9uKSwgTlctS2VubnVuZyAoV2luZG93cy1CZW51dHpl -cm5hbWUsIHdpcmQgYXV0b21hdGlzY2ggYmVpbSBMb2dpbiBhYmdlZ2xpY2hlbiksIE9FIChPcmdh -bmlzYXRpb25zZWluaGVpdCksIFRlbGVmb24vRHVyY2h3YWhsLjwvcD4KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkFuemVpZ2UgaW0gSW5mby1GZW5zdGVyOjwvc3Ry -b25nPiBBbGxlIFN1cGVyVXNlciB3ZXJkZW4gaW0gSW5mb3JtYXRpb25zZmVuc3RlciAoQnV0dG9u -IOKAnuKEuSIgb2JlbiByZWNodHMpIGFscyBBbnNwcmVjaHBhcnRuZXIgYXVmZ2Vmw7xocnQuPC9w -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAg -ICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1i -b3ggcmVjaHRlLW5vdGZhbGwtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJv -bmc+Tm90ZmFsbC1Sw7xja2ZhbGxlYmVuZTo8L3N0cm9uZz4gRGllIE5XLUtlbm51bmcgPGNvZGU+ -TlcwNTM2MDk8L2NvZGU+IChQSEsgUm9lc2dlbikgaXN0IGltIFNlcnZlciBoYXJ0IGFscyBTdXBl -clVzZXIgaGludGVybGVndCB1bmQgZ2lsdCBhdWNoIGRhbm4sIHdlbm4gZGllIFN1cGVyVXNlci1M -aXN0ZSBsZWVyIG9kZXIgdW5sZXNiYXIgaXN0LgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rp -dj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJhZG1pbi10YWJlbGxlIiBp -ZD0ic3VwZXJ1c2VyLXRhYmVsbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFk -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICA8dGg+TlctS2VubnVuZzwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDx0aD5PcmdhbmlzYXRpb25zZWluaGVpdDwvdGg+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTUwcHgiPlRlbGVmb24gLyBEdXJj -aHdhaGw8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9 -IndpZHRoOjgwcHgiPkFrdGlvbmVuPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDx0Ym9keSBpZD0ic3VwZXJ1c2VyLXRib2R5Ij48L3Rib2R5PgogICAg -ICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2 -IGNsYXNzPSJyZWNodGUtY2FyZC1mdXNzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxi -dXR0b24gaWQ9ImJ0bi1zdXBlcnVzZXItc3BlaWNoZXJuIiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVy -Ij5TdXBlclVzZXIgc3BlaWNoZXJuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwv -ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzdXBlcnVzZXIta2Vpbi1yZWNo -dCIgY2xhc3M9InZlcnN0ZWNrdCByZWNodGUta2Vpbi1yZWNodCI+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLWJveCIgc3R5bGU9ImJvcmRlci1sZWZ0LWNvbG9y -OnZhcigtLWZhcmJlLWZlaGxlcikiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxz -dHJvbmc+S2VpbiBadWdyaWZmOjwvc3Ryb25nPiBOdXIgYmVzdGVoZW5kZSBTdXBlclVzZXIga8O2 -bm5lbiBkaWVzZSBMaXN0ZSBiZWFyYmVpdGVuLgogICAgICAgICAgICAgICAgICAgICAgICAgICAg -PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAg -ICAgICA8L2Rpdj48L2RldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgoKICAg -ICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYWRtaW4tc2VrdGlvbiByZWNodGUtY2Fy -ZCByZWNodGUtY2FyZC1mYSIgaWQ9ImFkbWluLXNla3Rpb24tZmFjaGF1ZnNpY2h0Ij4KICAgICAg -ICAgICAgICAgICAgICAgICAgPGRldGFpbHMgY2xhc3M9InJlY2h0ZS1yb2xsZSI+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDxzdW1tYXJ5IGNsYXNzPSJyZWNodGUtcm9sbGUtc3VtbWFyeSI+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icmVjaHRlLWNhcmQtaWNvbiIg -YXJpYS1oaWRkZW49InRydWUiPvCfkYE8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8c3BhbiBjbGFzcz0icmVjaHRlLXJvbGxlLXRpdGVsIj48c3Ryb25nPkZhY2hhdWZzaWNodDwv -c3Ryb25nPjxzcGFuIGNsYXNzPSJyZWNodGUtY2FyZC1zdWIiPktsYXNzaXNjaGUgQXVmc2ljaHRz -LVJvbGxlIG1pdCBncmFudWxhcmVuIFNlaGVuLSB1bmQgUGxhbnVuZ3MtUmVjaHRlbi4gT3B0aW9u -YWwg4oCeR2VzYW10dmVyYW50d29ydGxpY2giIGbDvHIgU2NoaWNodGJlc2V0enVuZy48L3NwYW4+ -PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlY2h0ZS1y -b2xsZS1jaGV2IiBhcmlhLWhpZGRlbj0idHJ1ZSI+4pa4PC9zcGFuPgogICAgICAgICAgICAgICAg -ICAgICAgICA8L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJl -Y2h0ZS1yb2xsZS1ib2R5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9 -InJlY2h0ZS1yb2xsZS1ha3Rpb24iPjxidXR0b24gaWQ9ImJ0bi1mYWNoYXVmc2ljaHQtbmV1IiBj -bGFzcz0iYnRuIGJ0bi1lcmZvbGciPk5ldWVyIEZhY2hhdWZzaWNodC1FaW50cmFnPC9idXR0b24+ -PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJhZG1pbi1pbmZv -IiBkYXRhLWluZm8ta2V5PSJmYWNoYXVmc2ljaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndl -aXNlIHp1ciBGYWNoYXVmc2ljaHQ8c3BhbiBjbGFzcz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xh +ICAgICAgICAgICAgIDxwPjxzdHJvbmc+V296dT88L3N0cm9uZz4gU3VwZXJVc2VyIGvDtm5uZW4g +aGllciBIaW53ZWlzZSBmw7xyIGF1c2dld8OkaGx0ZSBQZXJzb25lbiwgR3J1cHBlbiBvZGVyIFJv +bGxlbiBhbmxlZ2VuLiBEaWVzZSBlcnNjaGVpbmVuIGJlaW0gbsOkY2hzdGVuIEFwcC1TdGFydCBh +bHMgTW9kYWwtU3RhY2sgKG9iZW4gZHVyY2hnZWhlbmQsIG9kZXIgZWlubWFsIHBybyBUYWcg4oCU +IGplIG5hY2ggVHJpZ2dlcikuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0 +cm9uZz5FbXBmw6RuZ2VyPC9zdHJvbmc+IHNpbmQga29tYmluaWVyYmFyOiBlaW56ZWxuZSBQZXJz +b25lbiwgZ2FuemUgRGllbnN0Z3J1cHBlbiwgUm9sbGVuIChER0wvV0RGL+KApiwgU1UsIEdlc2Ft +dHZlcmFudHdvcnRsaWNoKSBvZGVyIOKAnkFsbGUiIChqZWRlciBlaW5nZWxvZ2d0ZSBVc2VyKS48 +L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlRyaWdnZXI6PC9zdHJv +bmc+IDxlbT5laW5tYWw8L2VtPiA9IFVzZXIgc2llaHQgZGllIE1pdHRlaWx1bmcgZ2VuYXUgZWlu +IE1hbCB1bmQgbmllIHdpZWRlci4gPGVtPmplZGVzIE1hbDwvZW0+ID0gYmVpIGplZGVtIExvZ2lu +IChtYXguIDHDlyBwcm8gS2FsZW5kZXJ0YWcpLiA8ZW0+YmlzIERhdHVtPC9lbT4gPSB0w6RnbGlj +aCBiaXMgenVtIFN0aWNodGFnLCBkYW5hY2ggbmllIHdpZWRlci48L3A+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8cD48c3Ryb25nPkFuaMOkbmdlOjwvc3Ryb25nPiBlaW4gVGh1bWJuYWls +LUJpbGQgKG1heC4gMiBNQiwgSlBHL1BORy9XZWJQKSB1bmQvb2RlciBlaW4gUERGIChtYXguIDEw +IE1CKSBrw7ZubmVuIGJlaWdlZsO8Z3Qgd2VyZGVuLiBLbGljayBhdWYgZGVuIEFuaGFuZyDDtmZm +bmV0IGlobiBpbSBWb2xsYmlsZC1TdWItTW9kYWwuPC9wPgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPHA+PHN0cm9uZz5XYXMncyBuZXUgbWFjaHQ6PC9zdHJvbmc+IGVpbmUgZ2xvYmFsZSBN +aXR0ZWlsdW5nIG1pdCBFbXBmw6RuZ2VyIOKAnkFsbGUiIHVuZCBUcmlnZ2VyIOKAnmVpbm1hbCIg +aXN0IGVmZmVrdGl2IGVpbiDigJ5XaGF0J3MgTmV3Ii1FaW50cmFnLjwvcD4KICAgICAgICAgICAg +ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kZXRhaWxzPgogICAgICAg +ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWtvcGYiIHN0eWxlPSJtYXJnaW4tdG9wOjhw +eDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0 +dG9uIGlkPSJidG4tbWl0dGVpbHVuZy1uZXUiIGNsYXNzPSJidG4gYnRuLWVyZm9sZyI+KyBOZXVl +IE1pdHRlaWx1bmc8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAg +ICAgICAgICAgICA8ZGl2IGlkPSJtaXR0ZWlsdW5nZW4taW5oYWx0Ij48L2Rpdj4KICAgICAgICAg +ICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gVGFiOiBSZWNodGUgJiBTaWNodGJh +cmtlaXQgKE1lcmdlIOKAlCBTdXBlclVzZXIgKyBGYWNoYXVmc2ljaHQgKyBTaWNodGJhcmtlaXQp +IC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIHZlcnN0ZWNrdCIgaWQ9 +ImFkbWluLXRhYi1zdXBlcnVzZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFk +bWluLWtvcGYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+UmVjaHRlICZhbXA7IFNpY2h0 +YmFya2VpdDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJyZWNodGUtdGFi +LXN1YiI+Um9sbGVuLVNsb3RzIG1pdCBrb25maWd1cmllcmJhcmVyIFNlaGVuLS9CZWFyYmVpdGVu +LVNpY2h0YmFya2VpdC4gU3VwZXJVc2VyIHN0aWNodCBhbGxlIGFuZGVyZW4g4oCUIHNpZSBzZWhl +biB1bmQga8O2bm5lbiBpbW1lciBhbGxlcy4gV2VyIGluIGtlaW5lciBkaWVzZXIgTGlzdGVuIHN0 +ZWh0LCBzaWVodCB3ZWRlciBTdGF0aXN0aWsgbm9jaCBMb2didWNoIG5vY2ggQWRtaW5pc3RyYXRp +b24uPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8 +c2VjdGlvbiBjbGFzcz0iYWRtaW4tc2VrdGlvbiByZWNodGUtY2FyZCByZWNodGUtY2FyZC1zdSIg +aWQ9ImFkbWluLXNla3Rpb24tc3VwZXJ1c2VyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRl +dGFpbHMgY2xhc3M9InJlY2h0ZS1yb2xsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1t +YXJ5IGNsYXNzPSJyZWNodGUtcm9sbGUtc3VtbWFyeSI+CiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICA8c3BhbiBjbGFzcz0icmVjaHRlLWNhcmQtaWNvbiIgYXJpYS1oaWRkZW49InRydWUiPvCf +m6E8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icmVjaHRl +LXJvbGxlLXRpdGVsIj48c3Ryb25nPlN1cGVyVXNlcjwvc3Ryb25nPjxzcGFuIGNsYXNzPSJyZWNo +dGUtY2FyZC1zdWIiPlZvbGx6dWdyaWZmIGF1ZiBhbGxlIEZ1bmt0aW9uZW4uIFZlcndhbHRldCBh +bmRlcmUgUm9sbGVuLjwvc3Bhbj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +c3BhbiBjbGFzcz0icmVjaHRlLXJvbGxlLWNoZXYiIGFyaWEtaGlkZGVuPSJ0cnVlIj7ilrg8L3Nw +YW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAg +ICAgICAgPGRpdiBjbGFzcz0icmVjaHRlLXJvbGxlLWJvZHkiPgogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgPGRpdiBjbGFzcz0icmVjaHRlLXJvbGxlLWFrdGlvbiI+PGJ1dHRvbiBpZD0iYnRu +LXN1cGVydXNlci1uZXUiIGNsYXNzPSJidG4gYnRuLWVyZm9sZyI+TmV1ZXIgU3VwZXJVc2VyPC9i +dXR0b24+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJhZG1p +bi1pbmZvIiBkYXRhLWluZm8ta2V5PSJzdXBlcnVzZXIiPgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPHN1bW1hcnk+PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhp +bndlaXNlIHp1IFN1cGVyVXNlcm48c3BhbiBjbGFzcz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xh cHBlbiAvIFp1a2xhcHBlbjwvc3Bhbj48L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZvLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDxwPjxzdHJvbmc+Um9sbGVuLUhpZXJhcmNoaWU6PC9zdHJvbmc+IDxjb2RlPlN1 -cGVyVXNlciDihpIgRmFjaGF1ZnNpY2h0IC8gRGlyZWt0aW9uc2xlaXR1bmcgLyBGw7xocnVuZ3Nz -dGVsbGUg4oaSIFVzZXI8L2NvZGU+LiBTdXBlclVzZXIgc3RpY2h0IGFsbGVzLiBXZXIgaW4ga2Vp -bmVyIFJvbGxlbi1MaXN0ZSBzdGVodCwgc2llaHQgd2VkZXIgU3RhdGlzdGlrIG5vY2ggTG9nYnVj -aCBub2NoIEFkbWluaXN0cmF0aW9uLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8cD48c3Ryb25nPlNlaGVuLUJlcmVpY2hlPC9zdHJvbmc+IChIYWtlbiA9IFRhYiBpc3QgZsO8 -ciBkaWVzZSBQZXJzb24gc2ljaHRiYXIpOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5BZG1p -bmlzdHJhdGlvbjwvYj4g4oCUIGtvbXBsZXR0ZXIgQWRtaW4tVGFiLiA8Yj5BdXNnZW5vbW1lbjo8 -L2I+IFN1cGVyVXNlci0gdW5kIFJvbGxlbi1MaXN0ZW4gKGJsZWliZW4gU3VwZXJVc2VyLW9ubHkp -LjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48Yj5TdGF0aXN0 -aWs8L2I+LCA8Yj5Mb2didWNoPC9iPiwgPGI+QmFja3VwczwvYj4g4oCUIGpld2VpbHMgZGVyIGdh -bnplIFRhYi48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5QbGFudW5nOjwvc3Ryb25nPiBQ -cm8gRmFjaGF1ZnNpY2h0IGZlc3RsZWdiYXIsIHdlbGNoZSBQZXJzb25lbi9HcnVwcGVuL1N0YW5k -b3J0ZSBlZGl0aWVydCB3ZXJkZW4gZMO8cmZlbiDigJQgZGllIGVpZ2VuZSBaZWlsZSBpc3QgaW1t -ZXIgaW1wbGl6aXQgZXJsYXVidC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -PHA+PHN0cm9uZz5HZXNhbXR2ZXJhbnR3b3J0dW5nOjwvc3Ryb25nPiBCZWtvbW10IGRlbiBIZWFk -ZXItVGFiIDxlbT5QcsO8ZnVuZzwvZW0+IG1pdCA0LVdvY2hlbi3DnGJlcnNpY2h0IGlua2wuIHZv -cmdlZmVydGlndGVyIEUtTWFpbCBhbiBiZXRyb2ZmZW5lIFBlcnNvbmVuLjwvcD4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2RldGFp -bHM+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iYWRtaW4tdGFiZWxsZSIg -aWQ9ImZhY2hhdWZzaWNodC10YWJlbGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0 -aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD4KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgPHRoPk5XLUtlbm51bmc8L3RoPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjYwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRp -dGxlPSJBZG1pbi1UYWIgc2VoZW4iPkFkbWluPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo3MHB4O3RleHQtYWxpZ246Y2VudGVyIiB0aXRs -ZT0iQmVyZWljaC1BLVRhYiBzZWhlbiIgZGF0YS1iZXo9ImZhLnNwYWx0ZUEiPkF1c3dlcnR1bmc8 -L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRo -OjcwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJCZXJlaWNoLUItVGFiIHNlaGVuIiBkYXRh -LWJlej0iZmEuc3BhbHRlQiI+UHJvdG9rb2xsPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo3MHB4O3RleHQtYWxpZ246Y2VudGVyIiB0aXRs -ZT0iQmFja3VwLVRhYiBzZWhlbiI+QmFja3VwczwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6OTBweDt0ZXh0LWFsaWduOmNlbnRlciIgdGl0 -bGU9Ikdlc2FtdHZlcmFudHdvcnRsaWNoIGbDvHIgZGllIEJlc2V0enVuZyBhbGxlciBEaWVuc3Rl -Ij5HZXNhbXR2ZXJhbnR3LjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IDx0aCBzdHlsZT0id2lkdGg6MjIwcHgiIHRpdGxlPSJHcmFudWxhcmUgU2ljaHRiYXJrZWl0IHBy -byBTdWItVGFiIGRlcyBBZG1pbi1CZXJlaWNocyArIHBybyBCZXJlaWNoLUEiPlN1Yi1TaWNodDwv +ICAgICAgICAgIDxwPjxzdHJvbmc+V2FzIGlzdCBlaW4gU3VwZXJVc2VyPzwvc3Ryb25nPiBTdXBl +clVzZXIgaGFiZW4gdW5laW5nZXNjaHLDpG5rdGVuIFp1Z3JpZmYgYXVmIGFsbGUgQWRtaW5pc3Ry +YXRpb25zZnVua3Rpb25lbiwgZWluc2NobGllw59saWNoIGRlciBWZXJ3YWx0dW5nIGFuZGVyZXIg +U3VwZXJVc2VyLCBkZW0gU2V0emVuIHZvbiBTb25kZXJ0ZXJtaW5lLUhpbndlaXNlbiBkaXJla3Qg +aW4gZGVyIFBsYW51bmcgdW5kIGRlciBQZmxlZ2UgZGVyIGdsb2JhbGVuIEVpbnN0ZWxsdW5nZW4u +PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+U2ljaGVyaGVp +dHNoaW53ZWlzOjwvc3Ryb25nPiBOdXIgYmVzdGVoZW5kZSBTdXBlclVzZXIga8O2bm5lbiBkaWVz +ZSBMaXN0ZSBiZWFyYmVpdGVuLiBEYW1pdCB3aXJkIHZlcmhpbmRlcnQsIGRhc3MgQWRtaW4tUmVj +aHRlIHZlcmxvcmVuIGdlaGVuIG9kZXIgdW5iZXJlY2h0aWd0IGVyd2VpdGVydCB3ZXJkZW4uIDxi +Pk1pbmRlc3RlbnMgZWluIFN1cGVyVXNlciBtdXNzIGltbWVyIGVpbmdldHJhZ2VuIHNlaW48L2I+ +IOKAlCBzb25zdCBpc3QgbmllbWFuZCBtZWhyIGluIGRlciBMYWdlLCBhZG1pbmlzdHJhdGl2ZSDD +hG5kZXJ1bmdlbiB2b3J6dW5laG1lbi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgPHA+PHN0cm9uZz5GZWxkZXI6PC9zdHJvbmc+IE5hbWUgKEtsYXJ0ZXh0IHp1ciBJZGVudGlm +aWthdGlvbiksIE5XLUtlbm51bmcgKFdpbmRvd3MtQmVudXR6ZXJuYW1lLCB3aXJkIGF1dG9tYXRp +c2NoIGJlaW0gTG9naW4gYWJnZWdsaWNoZW4pLCBPRSAoT3JnYW5pc2F0aW9uc2VpbmhlaXQpLCBU +ZWxlZm9uL0R1cmNod2FobC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+ +PHN0cm9uZz5BbnplaWdlIGltIEluZm8tRmVuc3Rlcjo8L3N0cm9uZz4gQWxsZSBTdXBlclVzZXIg +d2VyZGVuIGltIEluZm9ybWF0aW9uc2ZlbnN0ZXIgKEJ1dHRvbiDigJ7ihLkiIG9iZW4gcmVjaHRz +KSBhbHMgQW5zcHJlY2hwYXJ0bmVyIGF1ZmdlZsO8aHJ0LjwvcD4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2RldGFpbHM+CiAgICAg +ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tYm94IHJlY2h0ZS1ub3RmYWxsLWJv +eCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPk5vdGZhbGwtUsO8Y2tmYWxs +ZWJlbmU6PC9zdHJvbmc+IERpZSBOVy1LZW5udW5nIDxjb2RlPk5XMDUzNjA5PC9jb2RlPiAoUEhL +IFJvZXNnZW4pIGlzdCBpbSBTZXJ2ZXIgaGFydCBhbHMgU3VwZXJVc2VyIGhpbnRlcmxlZ3QgdW5k +IGdpbHQgYXVjaCBkYW5uLCB3ZW5uIGRpZSBTdXBlclVzZXItTGlzdGUgbGVlciBvZGVyIHVubGVz +YmFyIGlzdC4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAg +ICAgICAgIDx0YWJsZSBjbGFzcz0iYWRtaW4tdGFiZWxsZSIgaWQ9InN1cGVydXNlci10YWJlbGxl +Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0 +aD5OYW1lPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk5XLUtl +bm51bmc8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+T3JnYW5p +c2F0aW9uc2VpbmhlaXQ8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +dGggc3R5bGU9IndpZHRoOjE1MHB4Ij5UZWxlZm9uIC8gRHVyY2h3YWhsPC90aD4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo4MHB4Ij5Ba3Rpb25l +bjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJv +ZHkgaWQ9InN1cGVydXNlci10Ym9keSI+PC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAg +PC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVjaHRlLWNhcmQt +ZnVzcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc3VwZXJ1 +c2VyLXNwZWljaGVybiIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciI+U3VwZXJVc2VyIHNwZWljaGVy +bjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAg +ICAgICAgICAgPGRpdiBpZD0ic3VwZXJ1c2VyLWtlaW4tcmVjaHQiIGNsYXNzPSJ2ZXJzdGVja3Qg +cmVjaHRlLWtlaW4tcmVjaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFz +cz0iaW5mby1ib3giIHN0eWxlPSJib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1mYXJiZS1mZWhsZXIp +Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPktlaW4gWnVncmlmZjo8 +L3N0cm9uZz4gTnVyIGJlc3RlaGVuZGUgU3VwZXJVc2VyIGvDtm5uZW4gZGllc2UgTGlzdGUgYmVh +cmJlaXRlbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAg +ICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+PC9kZXRhaWxz +PgogICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgICAgICAgICAgICAgPHNl +Y3Rpb24gY2xhc3M9ImFkbWluLXNla3Rpb24gcmVjaHRlLWNhcmQgcmVjaHRlLWNhcmQtZmEiIGlk +PSJhZG1pbi1zZWt0aW9uLWZhY2hhdWZzaWNodCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxk +ZXRhaWxzIGNsYXNzPSJyZWNodGUtcm9sbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Vt +bWFyeSBjbGFzcz0icmVjaHRlLXJvbGxlLXN1bW1hcnkiPgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPHNwYW4gY2xhc3M9InJlY2h0ZS1jYXJkLWljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIj7w +n5GBPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlY2h0 +ZS1yb2xsZS10aXRlbCI+PHN0cm9uZz5GYWNoYXVmc2ljaHQ8L3N0cm9uZz48c3BhbiBjbGFzcz0i +cmVjaHRlLWNhcmQtc3ViIj5LbGFzc2lzY2hlIEF1ZnNpY2h0cy1Sb2xsZSBtaXQgZ3JhbnVsYXJl +biBTZWhlbi0gdW5kIFBsYW51bmdzLVJlY2h0ZW4uIE9wdGlvbmFsIOKAnkdlc2FtdHZlcmFudHdv +cnRsaWNoIiBmw7xyIFNjaGljaHRiZXNldHp1bmcuPC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZWNodGUtcm9sbGUtY2hldiIgYXJpYS1oaWRk +ZW49InRydWUiPuKWuDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdW1tYXJ5Pgog +ICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWNodGUtcm9sbGUtYm9keSI+CiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWNodGUtcm9sbGUtYWt0aW9u +Ij48YnV0dG9uIGlkPSJidG4tZmFjaGF1ZnNpY2h0LW5ldSIgY2xhc3M9ImJ0biBidG4tZXJmb2xn +Ij5OZXVlciBGYWNoYXVmc2ljaHQtRWludHJhZzwvYnV0dG9uPjwvZGl2PgogICAgICAgICAgICAg +ICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0iYWRtaW4taW5mbyIgZGF0YS1pbmZvLWtleT0iZmFj +aGF1ZnNpY2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNs +YXNzPSJhZG1pbi1pbmZvLWNoZXYiPuKWuDwvc3Bhbj5IaW53ZWlzZSB6dXIgRmFjaGF1ZnNpY2h0 +PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3Nw +YW4+PC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRt +aW4taW5mby1ib2R5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25n +PlJvbGxlbi1IaWVyYXJjaGllOjwvc3Ryb25nPiA8Y29kZT5TdXBlclVzZXIg4oaSIEZhY2hhdWZz +aWNodCAvIERpcmVrdGlvbnNsZWl0dW5nIC8gRsO8aHJ1bmdzc3RlbGxlIOKGkiBVc2VyPC9jb2Rl +Pi4gU3VwZXJVc2VyIHN0aWNodCBhbGxlcy4gV2VyIGluIGtlaW5lciBSb2xsZW4tTGlzdGUgc3Rl +aHQsIHNpZWh0IHdlZGVyIFN0YXRpc3RpayBub2NoIExvZ2J1Y2ggbm9jaCBBZG1pbmlzdHJhdGlv +bi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5TZWhlbi1C +ZXJlaWNoZTwvc3Ryb25nPiAoSGFrZW4gPSBUYWIgaXN0IGbDvHIgZGllc2UgUGVyc29uIHNpY2h0 +YmFyKTo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+QWRtaW5pc3RyYXRpb248L2I+IOKAlCBr +b21wbGV0dGVyIEFkbWluLVRhYi4gPGI+QXVzZ2Vub21tZW46PC9iPiBTdXBlclVzZXItIHVuZCBS +b2xsZW4tTGlzdGVuIChibGVpYmVuIFN1cGVyVXNlci1vbmx5KS48L2xpPgogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGI+U3RhdGlzdGlrPC9iPiwgPGI+TG9nYnVjaDwv +Yj4sIDxiPkJhY2t1cHM8L2I+IOKAlCBqZXdlaWxzIGRlciBnYW56ZSBUYWIuPC9saT4KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIDxwPjxzdHJvbmc+UGxhbnVuZzo8L3N0cm9uZz4gUHJvIEZhY2hhdWZzaWNodCBmZXN0 +bGVnYmFyLCB3ZWxjaGUgUGVyc29uZW4vR3J1cHBlbi9TdGFuZG9ydGUgZWRpdGllcnQgd2VyZGVu +IGTDvHJmZW4g4oCUIGRpZSBlaWdlbmUgWmVpbGUgaXN0IGltbWVyIGltcGxpeml0IGVybGF1YnQu +PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+R2VzYW10dmVy +YW50d29ydHVuZzo8L3N0cm9uZz4gQmVrb21tdCBkZW4gSGVhZGVyLVRhYiA8ZW0+UHLDvGZ1bmc8 +L2VtPiBtaXQgNC1Xb2NoZW4tw5xiZXJzaWNodCBpbmtsLiB2b3JnZWZlcnRpZ3RlciBFLU1haWwg +YW4gYmV0cm9mZmVuZSBQZXJzb25lbi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXRhaWxzPgogICAgICAgICAgICAgICAg +ICAgICAgICA8dGFibGUgY2xhc3M9ImFkbWluLXRhYmVsbGUiIGlkPSJmYWNoYXVmc2ljaHQtdGFi +ZWxsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICA8dGg+TmFtZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5O +Vy1LZW5udW5nPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0 +eWxlPSJ3aWR0aDo2MHB4O3RleHQtYWxpZ246Y2VudGVyIiB0aXRsZT0iQWRtaW4tVGFiIHNlaGVu +Ij5BZG1pbjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHls +ZT0id2lkdGg6NzBweDt0ZXh0LWFsaWduOmNlbnRlciIgdGl0bGU9IkJlcmVpY2gtQS1UYWIgc2Vo +ZW4iIGRhdGEtYmV6PSJmYS5zcGFsdGVBIj5BdXN3ZXJ0dW5nPC90aD4KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo3MHB4O3RleHQtYWxpZ246Y2Vu +dGVyIiB0aXRsZT0iQmVyZWljaC1CLVRhYiBzZWhlbiIgZGF0YS1iZXo9ImZhLnNwYWx0ZUIiPlBy +b3Rva29sbDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHls +ZT0id2lkdGg6NzBweDt0ZXh0LWFsaWduOmNlbnRlciIgdGl0bGU9IkJhY2t1cC1UYWIgc2VoZW4i +PkJhY2t1cHM8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5 +bGU9IndpZHRoOjkwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJHZXNhbXR2ZXJhbnR3b3J0 +bGljaCBmw7xyIGRpZSBCZXNldHp1bmcgYWxsZXIgRGllbnN0ZSI+R2VzYW10dmVyYW50dy48L3Ro +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjIy +MHB4IiB0aXRsZT0iR3JhbnVsYXJlIFNpY2h0YmFya2VpdCBwcm8gU3ViLVRhYiBkZXMgQWRtaW4t +QmVyZWljaHMgKyBwcm8gQmVyZWljaC1BIj5TdWItU2ljaHQ8L3RoPgogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjIwMHB4Ij5QbGFudW5nPC90aD4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo4MHB4 +Ij5Ba3Rpb25lbjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICA8dGJvZHkgaWQ9ImZhY2hhdWZzaWNodC10Ym9keSI+PC90Ym9keT4KICAgICAgICAgICAg +ICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i +cmVjaHRlLWNhcmQtZnVzcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlk +PSJidG4tZmFjaGF1ZnNpY2h0LXNwZWljaGVybiIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciI+RmFj +aGF1ZnNpY2h0IHNwZWljaGVybjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg +PHNwYW4gaWQ9ImZhY2hhdWZzaWNodC1kaXJ0eS1oaW53ZWlzIiBjbGFzcz0icmVjaHRlLWRpcnR5 +LWhpbndlaXMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPuKXjyBVbmdlc3BlaWNoZXJ0ZSDDhG5kZXJ1 +bmdlbjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi10 +ZXN0LXJlZ3VsYWVyIiBjbGFzcz0iYnRuIGJ0bi1zZWsgYnRuLWtsZWluIiBzdHlsZT0ibWFyZ2lu +LWxlZnQ6YXV0byIgdGl0bGU9Ik9iZXJmbMOkY2hlIGF1cyBTaWNodCBlaW5lcyBVc2VycyBvaG5l +IFJvbGxlIHRlc3RlbiAoa2VpbiBTVSwga2VpbmUgRmFjaGF1ZnNpY2h0L0RpcmVrdGlvbnNsZWl0 +dW5nL0bDvGhydW5nc3N0ZWxsZSkiPkFscyBVc2VyIG9obmUgUm9sbGUgdGVzdGVuPC9idXR0b24+ +CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8 +ZGl2IGlkPSJmYWNoYXVmc2ljaHQta2Vpbi1yZWNodCIgY2xhc3M9InZlcnN0ZWNrdCByZWNodGUt +a2Vpbi1yZWNodCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZv +LWJveCIgc3R5bGU9ImJvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWZhcmJlLWZlaGxlcikiPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+S2VpbiBadWdyaWZmOjwvc3Ryb25n +PiBOdXIgU3VwZXJVc2VyIGvDtm5uZW4gRmFjaGF1ZnNpY2h0LUVpbnRyw6RnZSBiZWFyYmVpdGVu +LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAg +ICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj48L2RldGFpbHM+CiAgICAg +ICAgICAgICAgICAgICAgPC9zZWN0aW9uPgoKICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBj +bGFzcz0iYWRtaW4tc2VrdGlvbiByZWNodGUtY2FyZCByZWNodGUtY2FyZC1kbCIgaWQ9ImFkbWlu +LXNla3Rpb24tZGlyZWt0aW9uc2xlaXR1bmciPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGV0 +YWlscyBjbGFzcz0icmVjaHRlLXJvbGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1h +cnkgY2xhc3M9InJlY2h0ZS1yb2xsZS1zdW1tYXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIDxzcGFuIGNsYXNzPSJyZWNodGUtY2FyZC1pY29uIiBhcmlhLWhpZGRlbj0idHJ1ZSI+4piF +PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlY2h0ZS1y +b2xsZS10aXRlbCI+PHN0cm9uZz5EaXJla3Rpb25zbGVpdHVuZzwvc3Ryb25nPjxzcGFuIGNsYXNz +PSJyZWNodGUtY2FyZC1zdWIiPk1pdGdsaWVkZXIgZGVyIERpcmVrdGlvbnNsZWl0dW5nICh6LiBC +LiBML0RpclYsIExQRGluKSDigJQgZ2xlaWNoZSBHcmFudWxhcml0w6R0IHdpZSBGYWNoYXVmc2lj +aHQuPC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNz +PSJyZWNodGUtcm9sbGUtY2hldiIgYXJpYS1oaWRkZW49InRydWUiPuKWuDwvc3Bhbj4KICAgICAg +ICAgICAgICAgICAgICAgICAgPC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2 +IGNsYXNzPSJyZWNodGUtcm9sbGUtYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 +ZGl2IGNsYXNzPSJyZWNodGUtcm9sbGUtYWt0aW9uIj48YnV0dG9uIGlkPSJidG4tZGlyZWt0aW9u +c2xlaXR1bmctbmV1IiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGciPk5ldWVyIERpcmVrdGlvbnNsZWl0 +dW5nLUVpbnRyYWc8L2J1dHRvbj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRldGFp +bHMgY2xhc3M9ImFkbWluLWluZm8iIGRhdGEtaW5mby1rZXk9ImRpcmVrdGlvbnNsZWl0dW5nIj4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1p +bmZvLWNoZXYiPuKWuDwvc3Bhbj5IaW53ZWlzZSB6dXIgRGlyZWt0aW9uc2xlaXR1bmc8c3BhbiBj +bGFzcz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xhcHBlbjwvc3Bhbj48L3N1 +bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi1pbmZv +LWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlBlcnNvbmVuIHdlcmRl +biDDvGJlciBkYXMgRHJvcGRvd24gPGVtPlBlcnNvbjwvZW0+IGRpcmVrdCBhdXMgZGVyIFBlcnNv +bmFsdmVyd2FsdHVuZyBnZXfDpGhsdCDigJQgTmFtZSB1bmQgTlctS2VubnVuZyB3ZXJkZW4gYXV0 +b21hdGlzY2ggw7xiZXJub21tZW4uIFN1Yi1TaWNodC0gdW5kIFBsYW51bmdzLVJlY2h0ZSBmdW5r +dGlvbmllcmVuIHdpZSBiZWkgZGVyIEZhY2hhdWZzaWNodC48L3A+CiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXRhaWxzPgogICAg +ICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImFkbWluLXRhYmVsbGUgcm9sbGVuLXRh +YmVsbGUiIGlkPSJkaXJla3Rpb25zbGVpdHVuZy10YWJlbGxlIj4KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QZXJzb248L3RoPgogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjYwcHg7dGV4dC1h +bGlnbjpjZW50ZXIiIHRpdGxlPSJBZG1pbi1UYWIgc2VoZW4iPkFkbWluPC90aD4KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo3MHB4O3RleHQtYWxp +Z246Y2VudGVyIiB0aXRsZT0iU3RhdGlzdGlrLVRhYiBzZWhlbiI+U3RhdGlzdGlrPC90aD4KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo3MHB4O3Rl +eHQtYWxpZ246Y2VudGVyIiB0aXRsZT0iTG9nYnVjaC1UYWIgc2VoZW4iPkxvZ2J1Y2g8L3RoPgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjcwcHg7 +dGV4dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJCYWNrdXAtVGFiIHNlaGVuIj5CYWNrdXBzPC90aD4K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoyMjBw +eCIgdGl0bGU9IkdyYW51bGFyZSBTaWNodGJhcmtlaXQgcHJvIFN1Yi1UYWIiPlN1Yi1TaWNodDwv dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6 MjAwcHgiPlBsYW51bmc8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 dGggc3R5bGU9IndpZHRoOjgwcHgiPkFrdGlvbmVuPC90aD4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBpZD0iZmFjaGF1ZnNpY2h0LXRib2R5Ij48 -L3Rib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAg -ICAgICAgICA8ZGl2IGNsYXNzPSJyZWNodGUtY2FyZC1mdXNzIj4KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1mYWNoYXVmc2ljaHQtc3BlaWNoZXJuIiBjbGFzcz0i -YnRuIGJ0bi1wcmltYWVyIj5GYWNoYXVmc2ljaHQgc3BlaWNoZXJuPC9idXR0b24+CiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iZmFjaGF1ZnNpY2h0LWRpcnR5LWhpbndlaXMi -IGNsYXNzPSJyZWNodGUtZGlydHktaGlud2VpcyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+4pePIFVu -Z2VzcGVpY2hlcnRlIMOEbmRlcnVuZ2VuPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPGJ1dHRvbiBpZD0iYnRuLXRlc3QtcmVndWxhZXIiIGNsYXNzPSJidG4gYnRuLXNlayBidG4t -a2xlaW4iIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvIiB0aXRsZT0iT2JlcmZsw6RjaGUgYXVzIFNp -Y2h0IGVpbmVzIFVzZXJzIG9obmUgUm9sbGUgdGVzdGVuIChrZWluIFNVLCBrZWluZSBGYWNoYXVm -c2ljaHQvRGlyZWt0aW9uc2xlaXR1bmcvRsO8aHJ1bmdzc3RlbGxlKSI+QWxzIFVzZXIgb2huZSBS -b2xsZSB0ZXN0ZW48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAg -ICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImZhY2hhdWZzaWNodC1rZWluLXJlY2h0IiBjbGFz -cz0idmVyc3RlY2t0IHJlY2h0ZS1rZWluLXJlY2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIDxkaXYgY2xhc3M9ImluZm8tYm94IiBzdHlsZT0iYm9yZGVyLWxlZnQtY29sb3I6dmFyKC0t -ZmFyYmUtZmVobGVyKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5L -ZWluIFp1Z3JpZmY6PC9zdHJvbmc+IE51ciBTdXBlclVzZXIga8O2bm5lbiBGYWNoYXVmc2ljaHQt -RWludHLDpGdlIGJlYXJiZWl0ZW4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4K -ICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwv -ZGl2PjwvZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgICAg -ICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJhZG1pbi1zZWt0aW9uIHJlY2h0ZS1jYXJkIHJlY2h0 -ZS1jYXJkLWRsIiBpZD0iYWRtaW4tc2VrdGlvbi1kaXJla3Rpb25zbGVpdHVuZyI+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJyZWNodGUtcm9sbGUiPgogICAgICAgICAg -ICAgICAgICAgICAgICA8c3VtbWFyeSBjbGFzcz0icmVjaHRlLXJvbGxlLXN1bW1hcnkiPgogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlY2h0ZS1jYXJkLWljb24iIGFy -aWEtaGlkZGVuPSJ0cnVlIj7imIU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -c3BhbiBjbGFzcz0icmVjaHRlLXJvbGxlLXRpdGVsIj48c3Ryb25nPkRpcmVrdGlvbnNsZWl0dW5n -PC9zdHJvbmc+PHNwYW4gY2xhc3M9InJlY2h0ZS1jYXJkLXN1YiI+TWl0Z2xpZWRlciBkZXIgRGly -ZWt0aW9uc2xlaXR1bmcgKHouIEIuIEwvRGlyViwgTFBEaW4pIOKAlCBnbGVpY2hlIEdyYW51bGFy -aXTDpHQgd2llIEZhY2hhdWZzaWNodC48L3NwYW4+PC9zcGFuPgogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPHNwYW4gY2xhc3M9InJlY2h0ZS1yb2xsZS1jaGV2IiBhcmlhLWhpZGRlbj0idHJ1 -ZSI+4pa4PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N1bW1hcnk+CiAgICAgICAg -ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlY2h0ZS1yb2xsZS1ib2R5Ij4KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlY2h0ZS1yb2xsZS1ha3Rpb24iPjxidXR0 -b24gaWQ9ImJ0bi1kaXJla3Rpb25zbGVpdHVuZy1uZXUiIGNsYXNzPSJidG4gYnRuLWVyZm9sZyI+ -TmV1ZXIgRGlyZWt0aW9uc2xlaXR1bmctRWludHJhZzwvYnV0dG9uPjwvZGl2PgogICAgICAgICAg -ICAgICAgICAgICAgICA8ZGV0YWlscyBjbGFzcz0iYWRtaW4taW5mbyIgZGF0YS1pbmZvLWtleT0i -ZGlyZWt0aW9uc2xlaXR1bmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+ -PHNwYW4gY2xhc3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1ciBEaXJl -a3Rpb25zbGVpdHVuZzxzcGFuIGNsYXNzPSJhZG1pbi1pbmZvLWJhZGdlIj5BdWZrbGFwcGVuIC8g -WnVrbGFwcGVuPC9zcGFuPjwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxk -aXYgY2xhc3M9ImFkbWluLWluZm8tYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPHA+UGVyc29uZW4gd2VyZGVuIMO8YmVyIGRhcyBEcm9wZG93biA8ZW0+UGVyc29uPC9lbT4g -ZGlyZWt0IGF1cyBkZXIgUGVyc29uYWx2ZXJ3YWx0dW5nIGdld8OkaGx0IOKAlCBOYW1lIHVuZCBO -Vy1LZW5udW5nIHdlcmRlbiBhdXRvbWF0aXNjaCDDvGJlcm5vbW1lbi4gU3ViLVNpY2h0LSB1bmQg -UGxhbnVuZ3MtUmVjaHRlIGZ1bmt0aW9uaWVyZW4gd2llIGJlaSBkZXIgRmFjaGF1ZnNpY2h0Ljwv -cD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAg -ICAgICA8L2RldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iYWRt -aW4tdGFiZWxsZSByb2xsZW4tdGFiZWxsZSIgaWQ9ImRpcmVrdGlvbnNsZWl0dW5nLXRhYmVsbGUi -PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRo -PlBlcnNvbjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHls -ZT0id2lkdGg6NjBweDt0ZXh0LWFsaWduOmNlbnRlciIgdGl0bGU9IkFkbWluLVRhYiBzZWhlbiI+ -QWRtaW48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9 -IndpZHRoOjcwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJTdGF0aXN0aWstVGFiIHNlaGVu -Ij5TdGF0aXN0aWs8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGgg -c3R5bGU9IndpZHRoOjcwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJMb2didWNoLVRhYiBz -ZWhlbiI+TG9nYnVjaDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0 -aCBzdHlsZT0id2lkdGg6NzBweDt0ZXh0LWFsaWduOmNlbnRlciIgdGl0bGU9IkJhY2t1cC1UYWIg -c2VoZW4iPkJhY2t1cHM8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 -dGggc3R5bGU9IndpZHRoOjIyMHB4IiB0aXRsZT0iR3JhbnVsYXJlIFNpY2h0YmFya2VpdCBwcm8g -U3ViLVRhYiI+U3ViLVNpY2h0PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPHRoIHN0eWxlPSJ3aWR0aDoyMDBweCI+UGxhbnVuZzwvdGg+CiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6ODBweCI+QWt0aW9uZW48L3RoPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJk -aXJla3Rpb25zbGVpdHVuZy10Ym9keSI+PC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAg -PC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVjaHRlLWNhcmQt -ZnVzcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZGlyZWt0 -aW9uc2xlaXR1bmctc3BlaWNoZXJuIiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVyIj5EaXJla3Rpb25z -bGVpdHVuZyBzcGVpY2hlcm48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxz -cGFuIGlkPSJkaXJla3Rpb25zbGVpdHVuZy1kaXJ0eS1oaW53ZWlzIiBjbGFzcz0icmVjaHRlLWRp -cnR5LWhpbndlaXMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPuKXjyBVbmdlc3BlaWNoZXJ0ZSDDhG5k -ZXJ1bmdlbjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAg -ICAgICAgICAgICAgIDxkaXYgaWQ9ImRpcmVrdGlvbnNsZWl0dW5nLWtlaW4tcmVjaHQiIGNsYXNz -PSJ2ZXJzdGVja3QgcmVjaHRlLWtlaW4tcmVjaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgPGRpdiBjbGFzcz0iaW5mby1ib3giIHN0eWxlPSJib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1m -YXJiZS1mZWhsZXIpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPktl -aW4gWnVncmlmZjo8L3N0cm9uZz4gTnVyIFN1cGVyVXNlciBrw7ZubmVuIERpcmVrdGlvbnNsZWl0 -dW5ncy1FaW50csOkZ2UgYmVhcmJlaXRlbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwv -ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAg -ICAgPC9kaXY+PC9kZXRhaWxzPgogICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KCiAgICAg -ICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImFkbWluLXNla3Rpb24gcmVjaHRlLWNhcmQg -cmVjaHRlLWNhcmQtZnMiIGlkPSJhZG1pbi1zZWt0aW9uLWZ1ZWhydW5nc3N0ZWxsZSI+CiAgICAg -ICAgICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJyZWNodGUtcm9sbGUiPgogICAgICAg -ICAgICAgICAgICAgICAgICA8c3VtbWFyeSBjbGFzcz0icmVjaHRlLXJvbGxlLXN1bW1hcnkiPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlY2h0ZS1jYXJkLWljb24i -IGFyaWEtaGlkZGVuPSJ0cnVlIj7il4Y8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICA8c3BhbiBjbGFzcz0icmVjaHRlLXJvbGxlLXRpdGVsIj48c3Ryb25nPkbDvGhydW5nc3N0ZWxs -ZTwvc3Ryb25nPjxzcGFuIGNsYXNzPSJyZWNodGUtY2FyZC1zdWIiPk1pdGFyYmVpdGVuZGUgZGVy -IEbDvGhydW5nc3N0ZWxsZSAoei4gQi4gTC9WSTMgdW5kIFN0YWIpIOKAlCBnbGVpY2hlIEdyYW51 -bGFyaXTDpHQgd2llIEZhY2hhdWZzaWNodC48L3NwYW4+PC9zcGFuPgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlY2h0ZS1yb2xsZS1jaGV2IiBhcmlhLWhpZGRlbj0i -dHJ1ZSI+4pa4PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N1bW1hcnk+CiAgICAg -ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlY2h0ZS1yb2xsZS1ib2R5Ij4KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlY2h0ZS1yb2xsZS1ha3Rpb24iPjxi -dXR0b24gaWQ9ImJ0bi1mdWVocnVuZ3NzdGVsbGUtbmV1IiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGci -Pk5ldWVyIEbDvGhydW5nc3N0ZWxsZS1FaW50cmFnPC9idXR0b24+PC9kaXY+CiAgICAgICAgICAg -ICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJhZG1pbi1pbmZvIiBkYXRhLWluZm8ta2V5PSJm -dWVocnVuZ3NzdGVsbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+PHNw -YW4gY2xhc3M9ImFkbWluLWluZm8tY2hldiI+4pa4PC9zcGFuPkhpbndlaXNlIHp1ciBGw7xocnVu -Z3NzdGVsbGU8c3BhbiBjbGFzcz0iYWRtaW4taW5mby1iYWRnZSI+QXVma2xhcHBlbiAvIFp1a2xh -cHBlbjwvc3Bhbj48L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNs -YXNzPSJhZG1pbi1pbmZvLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxw -PlBlcnNvbmVuIHdlcmRlbiDDvGJlciBkYXMgRHJvcGRvd24gPGVtPlBlcnNvbjwvZW0+IGRpcmVr -dCBhdXMgZGVyIFBlcnNvbmFsdmVyd2FsdHVuZyBnZXfDpGhsdC4gU2NoZW1hIHVuZCBHcmFudWxh -cml0w6R0IGFuYWxvZyB6dXIgRGlyZWt0aW9uc2xlaXR1bmcuPC9wPgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAg -ICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJhZG1pbi10YWJlbGxlIHJvbGxlbi10 -YWJlbGxlIiBpZD0iZnVlaHJ1bmdzc3RlbGxlLXRhYmVsbGUiPgogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBlcnNvbjwvdGg+CiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NjBweDt0ZXh0LWFs -aWduOmNlbnRlciIgdGl0bGU9IkFkbWluLVRhYiBzZWhlbiI+QWRtaW48L3RoPgogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjcwcHg7dGV4dC1hbGln -bjpjZW50ZXIiIHRpdGxlPSJTdGF0aXN0aWstVGFiIHNlaGVuIj5TdGF0aXN0aWs8L3RoPgogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjcwcHg7dGV4 -dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJMb2didWNoLVRhYiBzZWhlbiI+TG9nYnVjaDwvdGg+CiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6NzBweDt0 -ZXh0LWFsaWduOmNlbnRlciIgdGl0bGU9IkJhY2t1cC1UYWIgc2VoZW4iPkJhY2t1cHM8L3RoPgog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjIyMHB4 -IiB0aXRsZT0iR3JhbnVsYXJlIFNpY2h0YmFya2VpdCBwcm8gU3ViLVRhYiI+U3ViLVNpY2h0PC90 -aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoy -MDBweCI+UGxhbnVuZzwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0 -aCBzdHlsZT0id2lkdGg6ODBweCI+QWt0aW9uZW48L3RoPgogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJmdWVocnVuZ3NzdGVsbGUtdGJvZHki -PjwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAg -ICAgICAgICAgIDxkaXYgY2xhc3M9InJlY2h0ZS1jYXJkLWZ1c3MiPgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWZ1ZWhydW5nc3N0ZWxsZS1zcGVpY2hlcm4iIGNs -YXNzPSJidG4gYnRuLXByaW1hZXIiPkbDvGhydW5nc3N0ZWxsZSBzcGVpY2hlcm48L2J1dHRvbj4K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJmdWVocnVuZ3NzdGVsbGUtZGly -dHktaGlud2VpcyIgY2xhc3M9InJlY2h0ZS1kaXJ0eS1oaW53ZWlzIiBzdHlsZT0iZGlzcGxheTpu -b25lIj7il48gVW5nZXNwZWljaGVydGUgw4RuZGVydW5nZW48L3NwYW4+CiAgICAgICAgICAgICAg -ICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJmdWVocnVu -Z3NzdGVsbGUta2Vpbi1yZWNodCIgY2xhc3M9InZlcnN0ZWNrdCByZWNodGUta2Vpbi1yZWNodCI+ -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLWJveCIgc3R5bGU9 -ImJvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWZhcmJlLWZlaGxlcikiPgogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIDxzdHJvbmc+S2VpbiBadWdyaWZmOjwvc3Ryb25nPiBOdXIgU3VwZXJV -c2VyIGvDtm5uZW4gRsO8aHJ1bmdzc3RlbGxlbi1FaW50csOkZ2UgYmVhcmJlaXRlbi4KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rp -dj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+PC9kZXRhaWxzPgogICAgICAgICAgICAg -ICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAg -ICA8IS0tIFRhYjogU3RhbmRhcmRyZWNodGUgcmVndWxhZXJlciBVc2VyIChTVS1vbmx5KSDigJQg -Z3J1bmRzYWV0emxpY2hlCiAgICAgICAgICAgICAgICAgICAgIFBsYW51bmdzcmVjaHRlIGZ1ZXIg -YWxsZSBvaG5lIFJvbGxlIChnZWdlbnNlaXRpZ2UgUGxhbnVuZyBqZQogICAgICAgICAgICAgICAg -ICAgICBEaWVuc3RncnVwcGUvU3RhbmRvcnQpICsgTGlzdGUgZGVyIFVzZXIgbWl0IFp1c2F0enJl -Y2h0ZW4uIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4tdGFiIHZlcnN0ZWNr -dCIgaWQ9ImFkbWluLXRhYi11cGRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxzdHlsZT4KICAg -ICAgICAgICAgICAgICAgICAgICAgI2FkbWluLXRhYi11cGRhdGUgLnVwZGF0ZS1ib3ggeyBwYWRk -aW5nOjE0cHggMTZweDsgYm9yZGVyLXJhZGl1czo4cHg7IGZvbnQtc2l6ZToxNXB4OyBtYXJnaW46 -OHB4IDAgMTRweDsgYm9yZGVyOjFweCBzb2xpZCAjZGRkOyBiYWNrZ3JvdW5kOiNmN2Y3Zjc7IH0K -ICAgICAgICAgICAgICAgICAgICAgICAgI2FkbWluLXRhYi11cGRhdGUgLnVwZGF0ZS1ib3gtb2sg -eyBiYWNrZ3JvdW5kOiNlOGY1ZTk7IGJvcmRlci1jb2xvcjojYTVkNmE3OyBjb2xvcjojMWI1ZTIw -OyB9CiAgICAgICAgICAgICAgICAgICAgICAgICNhZG1pbi10YWItdXBkYXRlIC51cGRhdGUtYm94 -LXdhcm4geyBiYWNrZ3JvdW5kOiNmZmY4ZTE7IGJvcmRlci1jb2xvcjojZmZlMDgyOyBjb2xvcjoj -N2M1ODAwOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICNhZG1pbi10YWItdXBkYXRlIC51cGRh -dGUtYm94LWVyciB7IGJhY2tncm91bmQ6I2ZkZWNlYTsgYm9yZGVyLWNvbG9yOiNmNWM2Y2I7IGNv -bG9yOiNhMzE1MTU7IH0KICAgICAgICAgICAgICAgICAgICAgICAgI2FkbWluLXRhYi11cGRhdGUg -LnVwZGF0ZS1jaGFuZ2Vsb2cgeyBiYWNrZ3JvdW5kOiNmYWZhZmE7IGJvcmRlcjoxcHggc29saWQg -I2VlZTsgYm9yZGVyLXJhZGl1czo4cHg7IHBhZGRpbmc6NnB4IDE2cHg7IG1hcmdpbi1ib3R0b206 -MTRweDsgbWF4LWhlaWdodDoyODBweDsgb3ZlcmZsb3c6YXV0bzsgfQogICAgICAgICAgICAgICAg -ICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAudXBkYXRlLWZpbGVsaXN0IHsgY29sdW1uczoyOyBm -b250LWZhbWlseTptb25vc3BhY2U7IGZvbnQtc2l6ZToxM3B4OyB9CiAgICAgICAgICAgICAgICAg -ICAgICAgICNhZG1pbi10YWItdXBkYXRlICNidG4tdXBkYXRlLXN0YXJ0IHsgYmFja2dyb3VuZDoj -MWE3M2U4OyBjb2xvcjojZmZmOyBib3JkZXI6MDsgcGFkZGluZzoxMHB4IDE4cHg7IGJvcmRlci1y -YWRpdXM6NnB4OyBmb250LXNpemU6MTVweDsgY3Vyc29yOnBvaW50ZXI7IH0KICAgICAgICAgICAg -ICAgICAgICAgICAgI2FkbWluLXRhYi11cGRhdGUgI2J0bi11cGRhdGUtc3RhcnQ6aG92ZXIgeyBi -YWNrZ3JvdW5kOiMxNjY2ZDA7IH0KICAgICAgICAgICAgICAgICAgICAgICAgI2FkbWluLXRhYi11 -cGRhdGUgLnVwZGF0ZS1ha3Rpb24taGlud2VpcyB7IG1hcmdpbi1sZWZ0OjEycHg7IGNvbG9yOiM2 -NjY7IGZvbnQtc2l6ZToxM3B4OyB9CiAgICAgICAgICAgICAgICAgICAgICAgICNhZG1pbi10YWIt -dXBkYXRlIC51cGRhdGUtcHJvZ3Jlc3MtcmFpbCB7IGJhY2tncm91bmQ6I2UwZTBlMDsgYm9yZGVy -LXJhZGl1czo2cHg7IGhlaWdodDoyMHB4OyBvdmVyZmxvdzpoaWRkZW47IG1hcmdpbjoxMnB4IDAg -NnB4OyB9CiAgICAgICAgICAgICAgICAgICAgICAgICNhZG1pbi10YWItdXBkYXRlIC51cGRhdGUt -cHJvZ3Jlc3MtYmFyIHsgYmFja2dyb3VuZDojMWE3M2U4OyBoZWlnaHQ6MTAwJTsgd2lkdGg6MDsg -dHJhbnNpdGlvbjp3aWR0aCAuNHMgZWFzZTsgfQogICAgICAgICAgICAgICAgICAgICAgICAjYWRt -aW4tdGFiLXVwZGF0ZSAudXBkYXRlLXByb2dyZXNzLWRvbmUgeyBiYWNrZ3JvdW5kOiMyZTdkMzI7 -IH0KICAgICAgICAgICAgICAgICAgICAgICAgI2FkbWluLXRhYi11cGRhdGUgLnVwZGF0ZS1wcm9n -cmVzcy1mYWlsIHsgYmFja2dyb3VuZDojYzYyODI4OyB9CiAgICAgICAgICAgICAgICAgICAgICAg -ICNhZG1pbi10YWItdXBkYXRlIC51cGRhdGUtcHJvZ3Jlc3MtdGV4dCB7IGZvbnQtc2l6ZToxNHB4 -OyBtYXJnaW4tYm90dG9tOjEwcHg7IGZvbnQtd2VpZ2h0OjYwMDsgfQogICAgICAgICAgICAgICAg -ICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAudXBkYXRlLWxvZyB7IGJhY2tncm91bmQ6IzFlMWUx -ZTsgY29sb3I6I2Q0ZDRkNDsgZm9udC1zaXplOjEycHg7IHBhZGRpbmc6MTBweDsgYm9yZGVyLXJh -ZGl1czo2cHg7IG1heC1oZWlnaHQ6MjIwcHg7IG92ZXJmbG93OmF1dG87IHdoaXRlLXNwYWNlOnBy -ZS13cmFwOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICNhZG1pbi10YWItdXBkYXRlIC51cGRh -dGUtc2VsZnRlc3QgeyBtYXJnaW46MTJweCAwOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICNh -ZG1pbi10YWItdXBkYXRlIC5zdC1yb3cgeyBwYWRkaW5nOjRweCA4cHg7IGJvcmRlci1yYWRpdXM6 -NHB4OyBtYXJnaW46M3B4IDA7IGZvbnQtc2l6ZToxNHB4OyB9CiAgICAgICAgICAgICAgICAgICAg -ICAgICNhZG1pbi10YWItdXBkYXRlIC5zdC1vayB7IGJhY2tncm91bmQ6I2U4ZjVlOTsgY29sb3I6 -IzFiNWUyMDsgfQogICAgICAgICAgICAgICAgICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAuc3Qt -ZmFpbCB7IGJhY2tncm91bmQ6I2ZkZWNlYTsgY29sb3I6I2EzMTUxNTsgfQogICAgICAgICAgICAg -ICAgICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAuc3QtZGV0YWlsIHsgY29sb3I6Izc3NzsgZm9u -dC1zaXplOjEycHg7IH0KICAgICAgICAgICAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgICAg -ICAgICAgIDxoMj5VcGRhdGVzICZhbXA7IFNlbGJzdHRlc3Q8L2gyPgogICAgICAgICAgICAgICAg -ICAgIDxwIHN0eWxlPSJjb2xvcjojNTU1OyBtYXgtd2lkdGg6NzgwcHg7Ij5QcsO8ZnQgZGFzIHpl -bnRyYWxlIFJlcG9zaXRvcnkgYXVmIGVpbmUgbmV1ZSBWZXJzaW9uLiBWb3IgZGVtIEVpbnNwaWVs -ZW4gd2lyZCBhdXRvbWF0aXNjaCBlaW5lIHZvbGxzdMOkbmRpZ2UgU2ljaGVydW5nIGVyc3RlbGx0 -OyBkYW5hY2ggbMOkdWZ0IGVpbiBTZWxic3R0ZXN0IGFsbGVyIEtlcm5mdW5rdGlvbmVuLCBiZXZv -ciBkYXMgU3lzdGVtIHdpZWRlciBmcmVpZ2VnZWJlbiB3aXJkLiBTY2hsw6RndCBlaW4gVGVzdCBm -ZWhsLCB3aXJkIGF1dG9tYXRpc2NoIGF1ZiBkZW4gdm9yaGVyaWdlbiBTdGFuZCB6dXLDvGNrZ2Vy -b2xsdC48L3A+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0idXBkYXRlLXN0YXR1cy1ib3gi -IGNsYXNzPSJ1cGRhdGUtYm94Ij5TdGF0dXMgd2lyZCBnZWxhZGVuIOKApjwvZGl2PgogICAgICAg -ICAgICAgICAgICAgIDxkaXYgaWQ9InVwZGF0ZS1jaGFuZ2Vsb2ciIGNsYXNzPSJ1cGRhdGUtY2hh -bmdlbG9nIHZlcnN0ZWNrdCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0idXBk -YXRlLWFrdGlvbiIgY2xhc3M9InZlcnN0ZWNrdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxi -dXR0b24gaWQ9ImJ0bi11cGRhdGUtc3RhcnQiIHR5cGU9ImJ1dHRvbiI+VXBkYXRlIGpldHp0IGlu -c3RhbGxpZXJlbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0i -dXBkYXRlLWFrdGlvbi1oaW53ZWlzIj5JbmtsLiBhdXRvbWF0aXNjaGVyIFZvbGxzaWNoZXJ1bmcg -JmFtcDsgU2VsYnN0dGVzdC48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAg -ICAgICAgICAgICAgICAgPGRpdiBpZD0idXBkYXRlLWZvcnRzY2hyaXR0IiBjbGFzcz0idmVyc3Rl -Y2t0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXBkYXRlLXByb2dyZXNz -LXJhaWwiPjxkaXYgaWQ9InVwZGF0ZS1wcm9ncmVzcy1iYXIiIGNsYXNzPSJ1cGRhdGUtcHJvZ3Jl -c3MtYmFyIj48L2Rpdj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0idXBk -YXRlLXByb2dyZXNzLXRleHQiIGNsYXNzPSJ1cGRhdGUtcHJvZ3Jlc3MtdGV4dCI+PC9kaXY+CiAg -ICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InVwZGF0ZS1zZWxmdGVzdCIgY2xhc3M9InVw -ZGF0ZS1zZWxmdGVzdCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgaWQ9InVw -ZGF0ZS1sb2ciIGNsYXNzPSJ1cGRhdGUtbG9nIj48L3ByZT4KICAgICAgICAgICAgICAgICAgICA8 -L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9 -ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItc3RhbmRhcmRyZWNodGUiPgogICAg -ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLWtvcGYiPgogICAgICAgICAgICAgICAg -ICAgICAgICA8aDI+U3RhbmRhcmRyZWNodGUgcmVndWzDpHJlciBVc2VyPC9oMj4KICAgICAgICAg -ICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo2cHggMCAwIDA7Zm9udC1zaXplOjEycHg7 -Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCkiPkdydW5kcmVnZWxuLCBkaWUgZsO8ciA8c3Ryb25nPmFs -bGU8L3N0cm9uZz4gTWl0YXJiZWl0ZW5kZW4gb2huZSBlaWdlbmUgUm9sbGUgZ2VsdGVuIOKAlCB6 -LkIuIOKAnmFsbGUgZWluZXIgRGllbnN0Z3J1cHBlIHBsYW5lbiBzaWNoIGdlZ2Vuc2VpdGlnIiBv -ZGVyIOKAnmFsbGUgZWluZXMgU3RhbmRvcnRzIHBsYW5lbiBzaWNoIGdlZ2Vuc2VpdGlnIi4gRGFy -dW50ZXI6IMOcYmVyc2ljaHQgYWxsZXIgVXNlciwgZGllIGluIGRlciBQZXJzb25hbHZlcndhbHR1 -bmcgPHN0cm9uZz56dXPDpHR6bGljaGU8L3N0cm9uZz4gaW5kaXZpZHVlbGxlIFJlY2h0ZSBiZWtv -bW1lbiBoYWJlbi48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAg -ICAgICAgPGRpdiBpZD0ic3RhbmRhcmRyZWNodGUtaW5oYWx0Ij48L2Rpdj4KICAgICAgICAgICAg -ICAgIDwvZGl2PgoKCiAgICAgICAgICAgIDwvbWFpbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2 -PgoKICAgIDwhLS0gPT09PT09PT09PSBNb2RhbGVyIERpYWxvZyAod2llZGVydmVyd2VuZGJhcikg -PT09PT09PT09PSAtLT4KICAgIDwhLS0gYTExeSAoU3ByaW50IDZhIDIwMjYtMDUtMjkpOiByb2xl -PWRpYWxvZyArIGFyaWEtbW9kYWwgKyBsYWJlbGxlZGJ5CiAgICAgICAgIG1hY2h0IGRlbiBNb2Rh -bC1Lb250ZXh0IGZ1ZXIgU2NyZWVucmVhZGVyIGV4cGxpeml0LiBhcmlhLWhpZGRlbiB3aXJkCiAg -ICAgICAgIHZvbSBtb2RhbFplaWdlbigpLUNvZGUgYmVpbSBPcGVuL0Nsb3NlIGdlc2V0enQuIC0t -PgogICAgPGRpdiBpZD0ibW9kYWwtb3ZlcmxheSIgY2xhc3M9Im1vZGFsIHZlcnN0ZWNrdCIgcm9s -ZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9Im1vZGFsLXRpdGVs -IiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaW5oYWx0IiBp -ZD0ibW9kYWwtYm94Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwta29wZiI+CiAgICAg -ICAgICAgICAgICA8aDIgaWQ9Im1vZGFsLXRpdGVsIj48L2gyPgogICAgICAgICAgICAgICAgPGJ1 -dHRvbiBjbGFzcz0ibW9kYWwtc2NobGllc3NlbiIgaWQ9Im1vZGFsLXNjaGxpZXNzZW4tYnRuIiBh -cmlhLWxhYmVsPSJTY2hsaWXDn2VuIj4mdGltZXM7PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2 -PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1rb2VycGVyIiBpZD0ibW9kYWwta29lcnBl -ciI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZ1c3MiIGlkPSJtb2RhbC1m -dXNzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gQ29uZmlybS1P -dmVybGF5IChTcHJpbnQgNSDigJQgTW9kYWwtU3RhY2sgMjAyNi0wNS0yOSk6CiAgICAgICAgIEVp -Z2VuZXIgQ29udGFpbmVyIG1pdCBob2VoZXJlbSB6LWluZGV4LCBkYW1pdCBiZXN0YWV0aWdlbigp -LURpYWxvZ2UKICAgICAgICAgSU5ORVJIQUxCIGVpbmVzIGdlb2VmZm5ldGVuIEhhdXB0bW9kYWxz -IGVyc2NoZWluZW4ga29lbm5lbiwgb2huZQogICAgICAgICBkZXNzZW4gSW5oYWx0IHp1IHVlYmVy -c2NocmVpYmVuLiBWb3JoZXIgaGFiZW4gQ29uZmlybS1BdWZydWZlCiAgICAgICAgICh6LkIuICJX -aXJrbGljaCBsb2VzY2hlbj8iIGJlaW0gUGVyc29uLUJlYXJiZWl0ZW4pIGRhcyB1bWdlYmVuZGUK -ICAgICAgICAgTW9kYWwgemVyc3RvZXJ0OyBuYWNoICJBYmJyZWNoZW4iIHdhciBkaWUgQmVhcmJl -aXR1bmcgd2VnLiAtLT4KICAgIDxkaXYgaWQ9ImNvbmZpcm0tb3ZlcmxheSIgY2xhc3M9Im1vZGFs -IHZlcnN0ZWNrdCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVk -Ynk9ImNvbmZpcm0tdGl0ZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIiBzdHlsZT0iei1pbmRleDpjYWxj -KHZhcigtLXotbW9kYWwpICsgMTApIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1pbmhhbHQi -IGlkPSJjb25maXJtLWJveCIgc3R5bGU9Im1heC13aWR0aDo0ODBweCI+CiAgICAgICAgICAgIDxk -aXYgY2xhc3M9Im1vZGFsLWtvcGYiPgogICAgICAgICAgICAgICAgPGgyIGlkPSJjb25maXJtLXRp -dGVsIj5CZXN0w6R0aWd1bmc8L2gyPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibW9k -YWwtc2NobGllc3NlbiIgaWQ9ImNvbmZpcm0tc2NobGllc3Nlbi1idG4iIGFyaWEtbGFiZWw9IlNj -aGxpZcOfZW4iPiZ0aW1lczs8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAg -IDxkaXYgY2xhc3M9Im1vZGFsLWtvZXJwZXIiIGlkPSJjb25maXJtLWtvZXJwZXIiPjwvZGl2Pgog -ICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mdXNzIiBpZD0iY29uZmlybS1mdXNzIj48L2Rp -dj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gVG9hc3QtQ29udGFpbmVyIC0t -PgogICAgPGRpdiBpZD0idG9hc3QtY29udGFpbmVyIiByb2xlPSJzdGF0dXMiIGFyaWEtbGl2ZT0i -cG9saXRlIiBhcmlhLWF0b21pYz0iZmFsc2UiPjwvZGl2PgoKICAgIDxzY3JpcHQgdHlwZT0ibW9k -dWxlIiBzcmM9ImFwcC5qcyI+PC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo= +ICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBpZD0iZGlyZWt0aW9uc2xlaXR1bmctdGJv +ZHkiPjwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAg +ICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlY2h0ZS1jYXJkLWZ1c3MiPgogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWRpcmVrdGlvbnNsZWl0dW5nLXNwZWljaGVy +biIgY2xhc3M9ImJ0biBidG4tcHJpbWFlciI+RGlyZWt0aW9uc2xlaXR1bmcgc3BlaWNoZXJuPC9i +dXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iZGlyZWt0aW9uc2xl +aXR1bmctZGlydHktaGlud2VpcyIgY2xhc3M9InJlY2h0ZS1kaXJ0eS1oaW53ZWlzIiBzdHlsZT0i +ZGlzcGxheTpub25lIj7il48gVW5nZXNwZWljaGVydGUgw4RuZGVydW5nZW48L3NwYW4+CiAgICAg +ICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlk +PSJkaXJla3Rpb25zbGVpdHVuZy1rZWluLXJlY2h0IiBjbGFzcz0idmVyc3RlY2t0IHJlY2h0ZS1r +ZWluLXJlY2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8t +Ym94IiBzdHlsZT0iYm9yZGVyLWxlZnQtY29sb3I6dmFyKC0tZmFyYmUtZmVobGVyKSI+CiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5LZWluIFp1Z3JpZmY6PC9zdHJvbmc+ +IE51ciBTdXBlclVzZXIga8O2bm5lbiBEaXJla3Rpb25zbGVpdHVuZ3MtRWludHLDpGdlIGJlYXJi +ZWl0ZW4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAg +ICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvZGV0YWlscz4K +ICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgICAgICAgICAgICAgIDxzZWN0 +aW9uIGNsYXNzPSJhZG1pbi1zZWt0aW9uIHJlY2h0ZS1jYXJkIHJlY2h0ZS1jYXJkLWZzIiBpZD0i +YWRtaW4tc2VrdGlvbi1mdWVocnVuZ3NzdGVsbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8 +ZGV0YWlscyBjbGFzcz0icmVjaHRlLXJvbGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN1 +bW1hcnkgY2xhc3M9InJlY2h0ZS1yb2xsZS1zdW1tYXJ5Ij4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIDxzcGFuIGNsYXNzPSJyZWNodGUtY2FyZC1pY29uIiBhcmlhLWhpZGRlbj0idHJ1ZSI+ +4peGPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlY2h0 +ZS1yb2xsZS10aXRlbCI+PHN0cm9uZz5Gw7xocnVuZ3NzdGVsbGU8L3N0cm9uZz48c3BhbiBjbGFz +cz0icmVjaHRlLWNhcmQtc3ViIj5NaXRhcmJlaXRlbmRlIGRlciBGw7xocnVuZ3NzdGVsbGUgKHou +IEIuIEwvVkkzIHVuZCBTdGFiKSDigJQgZ2xlaWNoZSBHcmFudWxhcml0w6R0IHdpZSBGYWNoYXVm +c2ljaHQuPC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNs +YXNzPSJyZWNodGUtcm9sbGUtY2hldiIgYXJpYS1oaWRkZW49InRydWUiPuKWuDwvc3Bhbj4KICAg +ICAgICAgICAgICAgICAgICAgICAgPC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgICAgICA8 +ZGl2IGNsYXNzPSJyZWNodGUtcm9sbGUtYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICA8ZGl2IGNsYXNzPSJyZWNodGUtcm9sbGUtYWt0aW9uIj48YnV0dG9uIGlkPSJidG4tZnVlaHJ1 +bmdzc3RlbGxlLW5ldSIgY2xhc3M9ImJ0biBidG4tZXJmb2xnIj5OZXVlciBGw7xocnVuZ3NzdGVs +bGUtRWludHJhZzwvYnV0dG9uPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGV0YWls +cyBjbGFzcz0iYWRtaW4taW5mbyIgZGF0YS1pbmZvLWtleT0iZnVlaHJ1bmdzc3RlbGxlIj4KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PjxzcGFuIGNsYXNzPSJhZG1pbi1pbmZv +LWNoZXYiPuKWuDwvc3Bhbj5IaW53ZWlzZSB6dXIgRsO8aHJ1bmdzc3RlbGxlPHNwYW4gY2xhc3M9 +ImFkbWluLWluZm8tYmFkZ2UiPkF1ZmtsYXBwZW4gLyBadWtsYXBwZW48L3NwYW4+PC9zdW1tYXJ5 +PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRtaW4taW5mby1ib2R5 +Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5QZXJzb25lbiB3ZXJkZW4gw7xi +ZXIgZGFzIERyb3Bkb3duIDxlbT5QZXJzb248L2VtPiBkaXJla3QgYXVzIGRlciBQZXJzb25hbHZl +cndhbHR1bmcgZ2V3w6RobHQuIFNjaGVtYSB1bmQgR3JhbnVsYXJpdMOkdCBhbmFsb2cgenVyIERp +cmVrdGlvbnNsZWl0dW5nLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgog +ICAgICAgICAgICAgICAgICAgICAgICA8L2RldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgICAg +IDx0YWJsZSBjbGFzcz0iYWRtaW4tdGFiZWxsZSByb2xsZW4tdGFiZWxsZSIgaWQ9ImZ1ZWhydW5n +c3N0ZWxsZS10YWJlbGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIDx0aD5QZXJzb248L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8dGggc3R5bGU9IndpZHRoOjYwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRpdGxlPSJB +ZG1pbi1UYWIgc2VoZW4iPkFkbWluPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo3MHB4O3RleHQtYWxpZ246Y2VudGVyIiB0aXRsZT0iU3Rh +dGlzdGlrLVRhYiBzZWhlbiI+U3RhdGlzdGlrPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo3MHB4O3RleHQtYWxpZ246Y2VudGVyIiB0aXRs +ZT0iTG9nYnVjaC1UYWIgc2VoZW4iPkxvZ2J1Y2g8L3RoPgogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjcwcHg7dGV4dC1hbGlnbjpjZW50ZXIiIHRp +dGxlPSJCYWNrdXAtVGFiIHNlaGVuIj5CYWNrdXBzPC90aD4KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoyMjBweCIgdGl0bGU9IkdyYW51bGFyZSBT +aWNodGJhcmtlaXQgcHJvIFN1Yi1UYWIiPlN1Yi1TaWNodDwvdGg+CiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MjAwcHgiPlBsYW51bmc8L3RoPgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjgwcHgi +PkFrdGlvbmVuPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIDx0Ym9keSBpZD0iZnVlaHJ1bmdzc3RlbGxlLXRib2R5Ij48L3Rib2R5PgogICAgICAgICAg +ICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz +PSJyZWNodGUtY2FyZC1mdXNzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24g +aWQ9ImJ0bi1mdWVocnVuZ3NzdGVsbGUtc3BlaWNoZXJuIiBjbGFzcz0iYnRuIGJ0bi1wcmltYWVy +Ij5Gw7xocnVuZ3NzdGVsbGUgc3BlaWNoZXJuPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICA8c3BhbiBpZD0iZnVlaHJ1bmdzc3RlbGxlLWRpcnR5LWhpbndlaXMiIGNsYXNzPSJy +ZWNodGUtZGlydHktaGlud2VpcyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+4pePIFVuZ2VzcGVpY2hl +cnRlIMOEbmRlcnVuZ2VuPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAg +ICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iZnVlaHJ1bmdzc3RlbGxlLWtlaW4tcmVjaHQi +IGNsYXNzPSJ2ZXJzdGVja3QgcmVjaHRlLWtlaW4tcmVjaHQiPgogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1ib3giIHN0eWxlPSJib3JkZXItbGVmdC1jb2xvcjp2 +YXIoLS1mYXJiZS1mZWhsZXIpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ry +b25nPktlaW4gWnVncmlmZjo8L3N0cm9uZz4gTnVyIFN1cGVyVXNlciBrw7ZubmVuIEbDvGhydW5n +c3N0ZWxsZW4tRWludHLDpGdlIGJlYXJiZWl0ZW4uCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAg +ICAgICAgIDwvZGl2PjwvZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Cgog +ICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBUYWI6IFN0YW5kYXJk +cmVjaHRlIHJlZ3VsYWVyZXIgVXNlciAoU1Utb25seSkg4oCUIGdydW5kc2FldHpsaWNoZQogICAg +ICAgICAgICAgICAgICAgICBQbGFudW5nc3JlY2h0ZSBmdWVyIGFsbGUgb2huZSBSb2xsZSAoZ2Vn +ZW5zZWl0aWdlIFBsYW51bmcgamUKICAgICAgICAgICAgICAgICAgICAgRGllbnN0Z3J1cHBlL1N0 +YW5kb3J0KSArIExpc3RlIGRlciBVc2VyIG1pdCBadXNhdHpyZWNodGVuLiAtLT4KICAgICAgICAg +ICAgICAgIDxkaXYgY2xhc3M9ImFkbWluLXRhYiB2ZXJzdGVja3QiIGlkPSJhZG1pbi10YWItdXBk +YXRlIj4KICAgICAgICAgICAgICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgICAgICAgICAgICAg +ICNhZG1pbi10YWItdXBkYXRlIC51cGRhdGUtYm94IHsgcGFkZGluZzoxNHB4IDE2cHg7IGJvcmRl +ci1yYWRpdXM6OHB4OyBmb250LXNpemU6MTVweDsgbWFyZ2luOjhweCAwIDE0cHg7IGJvcmRlcjox +cHggc29saWQgI2RkZDsgYmFja2dyb3VuZDojZjdmN2Y3OyB9CiAgICAgICAgICAgICAgICAgICAg +ICAgICNhZG1pbi10YWItdXBkYXRlIC51cGRhdGUtYm94LW9rIHsgYmFja2dyb3VuZDojZThmNWU5 +OyBib3JkZXItY29sb3I6I2E1ZDZhNzsgY29sb3I6IzFiNWUyMDsgfQogICAgICAgICAgICAgICAg +ICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAudXBkYXRlLWJveC13YXJuIHsgYmFja2dyb3VuZDoj +ZmZmOGUxOyBib3JkZXItY29sb3I6I2ZmZTA4MjsgY29sb3I6IzdjNTgwMDsgfQogICAgICAgICAg +ICAgICAgICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAudXBkYXRlLWJveC1lcnIgeyBiYWNrZ3Jv +dW5kOiNmZGVjZWE7IGJvcmRlci1jb2xvcjojZjVjNmNiOyBjb2xvcjojYTMxNTE1OyB9CiAgICAg +ICAgICAgICAgICAgICAgICAgICNhZG1pbi10YWItdXBkYXRlIC51cGRhdGUtY2hhbmdlbG9nIHsg +YmFja2dyb3VuZDojZmFmYWZhOyBib3JkZXI6MXB4IHNvbGlkICNlZWU7IGJvcmRlci1yYWRpdXM6 +OHB4OyBwYWRkaW5nOjZweCAxNnB4OyBtYXJnaW4tYm90dG9tOjE0cHg7IG1heC1oZWlnaHQ6Mjgw +cHg7IG92ZXJmbG93OmF1dG87IH0KICAgICAgICAgICAgICAgICAgICAgICAgI2FkbWluLXRhYi11 +cGRhdGUgLnVwZGF0ZS1maWxlbGlzdCB7IGNvbHVtbnM6MjsgZm9udC1mYW1pbHk6bW9ub3NwYWNl +OyBmb250LXNpemU6MTNweDsgfQogICAgICAgICAgICAgICAgICAgICAgICAjYWRtaW4tdGFiLXVw +ZGF0ZSAjYnRuLXVwZGF0ZS1zdGFydCB7IGJhY2tncm91bmQ6IzFhNzNlODsgY29sb3I6I2ZmZjsg +Ym9yZGVyOjA7IHBhZGRpbmc6MTBweCAxOHB4OyBib3JkZXItcmFkaXVzOjZweDsgZm9udC1zaXpl +OjE1cHg7IGN1cnNvcjpwb2ludGVyOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICNhZG1pbi10 +YWItdXBkYXRlICNidG4tdXBkYXRlLXN0YXJ0OmhvdmVyIHsgYmFja2dyb3VuZDojMTY2NmQwOyB9 +CiAgICAgICAgICAgICAgICAgICAgICAgICNhZG1pbi10YWItdXBkYXRlIC51cGRhdGUtYWt0aW9u +LWhpbndlaXMgeyBtYXJnaW4tbGVmdDoxMnB4OyBjb2xvcjojNjY2OyBmb250LXNpemU6MTNweDsg +fQogICAgICAgICAgICAgICAgICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAudXBkYXRlLXByb2dy +ZXNzLXJhaWwgeyBiYWNrZ3JvdW5kOiNlMGUwZTA7IGJvcmRlci1yYWRpdXM6NnB4OyBoZWlnaHQ6 +MjBweDsgb3ZlcmZsb3c6aGlkZGVuOyBtYXJnaW46MTJweCAwIDZweDsgfQogICAgICAgICAgICAg +ICAgICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAudXBkYXRlLXByb2dyZXNzLWJhciB7IGJhY2tn +cm91bmQ6IzFhNzNlODsgaGVpZ2h0OjEwMCU7IHdpZHRoOjA7IHRyYW5zaXRpb246d2lkdGggLjRz +IGVhc2U7IH0KICAgICAgICAgICAgICAgICAgICAgICAgI2FkbWluLXRhYi11cGRhdGUgLnVwZGF0 +ZS1wcm9ncmVzcy1kb25lIHsgYmFja2dyb3VuZDojMmU3ZDMyOyB9CiAgICAgICAgICAgICAgICAg +ICAgICAgICNhZG1pbi10YWItdXBkYXRlIC51cGRhdGUtcHJvZ3Jlc3MtZmFpbCB7IGJhY2tncm91 +bmQ6I2M2MjgyODsgfQogICAgICAgICAgICAgICAgICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAu +dXBkYXRlLXByb2dyZXNzLXRleHQgeyBmb250LXNpemU6MTRweDsgbWFyZ2luLWJvdHRvbToxMHB4 +OyBmb250LXdlaWdodDo2MDA7IH0KICAgICAgICAgICAgICAgICAgICAgICAgI2FkbWluLXRhYi11 +cGRhdGUgLnVwZGF0ZS1sb2cgeyBiYWNrZ3JvdW5kOiMxZTFlMWU7IGNvbG9yOiNkNGQ0ZDQ7IGZv +bnQtc2l6ZToxMnB4OyBwYWRkaW5nOjEwcHg7IGJvcmRlci1yYWRpdXM6NnB4OyBtYXgtaGVpZ2h0 +OjIyMHB4OyBvdmVyZmxvdzphdXRvOyB3aGl0ZS1zcGFjZTpwcmUtd3JhcDsgfQogICAgICAgICAg +ICAgICAgICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAudXBkYXRlLXNlbGZ0ZXN0IHsgbWFyZ2lu +OjEycHggMDsgfQogICAgICAgICAgICAgICAgICAgICAgICAjYWRtaW4tdGFiLXVwZGF0ZSAuc3Qt +cm93IHsgcGFkZGluZzo0cHggOHB4OyBib3JkZXItcmFkaXVzOjRweDsgbWFyZ2luOjNweCAwOyBm +b250LXNpemU6MTRweDsgfQogICAgICAgICAgICAgICAgICAgICAgICAjYWRtaW4tdGFiLXVwZGF0 +ZSAuc3Qtb2sgeyBiYWNrZ3JvdW5kOiNlOGY1ZTk7IGNvbG9yOiMxYjVlMjA7IH0KICAgICAgICAg +ICAgICAgICAgICAgICAgI2FkbWluLXRhYi11cGRhdGUgLnN0LWZhaWwgeyBiYWNrZ3JvdW5kOiNm +ZGVjZWE7IGNvbG9yOiNhMzE1MTU7IH0KICAgICAgICAgICAgICAgICAgICAgICAgI2FkbWluLXRh +Yi11cGRhdGUgLnN0LWRldGFpbCB7IGNvbG9yOiM3Nzc7IGZvbnQtc2l6ZToxMnB4OyB9CiAgICAg +ICAgICAgICAgICAgICAgPC9zdHlsZT4KICAgICAgICAgICAgICAgICAgICA8aDI+VXBkYXRlcyAm +YW1wOyBTZWxic3R0ZXN0PC9oMj4KICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6 +IzU1NTsgbWF4LXdpZHRoOjc4MHB4OyI+UHLDvGZ0IGRhcyB6ZW50cmFsZSBSZXBvc2l0b3J5IGF1 +ZiBlaW5lIG5ldWUgVmVyc2lvbi4gVm9yIGRlbSBFaW5zcGllbGVuIHdpcmQgYXV0b21hdGlzY2gg +ZWluZSB2b2xsc3TDpG5kaWdlIFNpY2hlcnVuZyBlcnN0ZWxsdDsgZGFuYWNoIGzDpHVmdCBlaW4g +U2VsYnN0dGVzdCBhbGxlciBLZXJuZnVua3Rpb25lbiwgYmV2b3IgZGFzIFN5c3RlbSB3aWVkZXIg +ZnJlaWdlZ2ViZW4gd2lyZC4gU2NobMOkZ3QgZWluIFRlc3QgZmVobCwgd2lyZCBhdXRvbWF0aXNj +aCBhdWYgZGVuIHZvcmhlcmlnZW4gU3RhbmQgenVyw7xja2dlcm9sbHQuPC9wPgogICAgICAgICAg +ICAgICAgICAgIDxkaXYgaWQ9InVwZGF0ZS1zdGF0dXMtYm94IiBjbGFzcz0idXBkYXRlLWJveCI+ +U3RhdHVzIHdpcmQgZ2VsYWRlbiDigKY8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlk +PSJ1cGRhdGUtY2hhbmdlbG9nIiBjbGFzcz0idXBkYXRlLWNoYW5nZWxvZyB2ZXJzdGVja3QiPjwv +ZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InVwZGF0ZS1ha3Rpb24iIGNsYXNzPSJ2 +ZXJzdGVja3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tdXBkYXRl +LXN0YXJ0IiB0eXBlPSJidXR0b24iPlVwZGF0ZSBqZXR6dCBpbnN0YWxsaWVyZW48L2J1dHRvbj4K +ICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InVwZGF0ZS1ha3Rpb24taGlud2Vp +cyI+SW5rbC4gYXV0b21hdGlzY2hlciBWb2xsc2ljaGVydW5nICZhbXA7IFNlbGJzdHRlc3QuPC9z +cGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYg +aWQ9InVwZGF0ZS1mb3J0c2Nocml0dCIgY2xhc3M9InZlcnN0ZWNrdCI+CiAgICAgICAgICAgICAg +ICAgICAgICAgIDxkaXYgY2xhc3M9InVwZGF0ZS1wcm9ncmVzcy1yYWlsIj48ZGl2IGlkPSJ1cGRh +dGUtcHJvZ3Jlc3MtYmFyIiBjbGFzcz0idXBkYXRlLXByb2dyZXNzLWJhciI+PC9kaXY+PC9kaXY+ +CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InVwZGF0ZS1wcm9ncmVzcy10ZXh0IiBj +bGFzcz0idXBkYXRlLXByb2dyZXNzLXRleHQiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAg +ICA8ZGl2IGlkPSJ1cGRhdGUtc2VsZnRlc3QiIGNsYXNzPSJ1cGRhdGUtc2VsZnRlc3QiPjwvZGl2 +PgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGlkPSJ1cGRhdGUtbG9nIiBjbGFzcz0idXBk +YXRlLWxvZyI+PC9wcmU+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAg +ICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZG1pbi10YWIgdmVyc3RlY2t0 +IiBpZD0iYWRtaW4tdGFiLXN0YW5kYXJkcmVjaHRlIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2 +IGNsYXNzPSJhZG1pbi1rb3BmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyPlN0YW5kYXJk +cmVjaHRlIHJlZ3Vsw6RyZXIgVXNlcjwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0 +eWxlPSJtYXJnaW46NnB4IDAgMCAwO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXRleHQtbXV0 +ZWQpIj5HcnVuZHJlZ2VsbiwgZGllIGbDvHIgPHN0cm9uZz5hbGxlPC9zdHJvbmc+IE1pdGFyYmVp +dGVuZGVuIG9obmUgZWlnZW5lIFJvbGxlIGdlbHRlbiDigJQgei5CLiDigJ5hbGxlIGVpbmVyIERp +ZW5zdGdydXBwZSBwbGFuZW4gc2ljaCBnZWdlbnNlaXRpZyIgb2RlciDigJ5hbGxlIGVpbmVzIFN0 +YW5kb3J0cyBwbGFuZW4gc2ljaCBnZWdlbnNlaXRpZyIuIERhcnVudGVyOiDDnGJlcnNpY2h0IGFs +bGVyIFVzZXIsIGRpZSBpbiBkZXIgUGVyc29uYWx2ZXJ3YWx0dW5nIDxzdHJvbmc+enVzw6R0emxp +Y2hlPC9zdHJvbmc+IGluZGl2aWR1ZWxsZSBSZWNodGUgYmVrb21tZW4gaGFiZW4uPC9wPgogICAg +ICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InN0YW5k +YXJkcmVjaHRlLWluaGFsdCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCgogICAgICAg +ICAgICA8L21haW4+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tID09PT09PT09 +PT0gTW9kYWxlciBEaWFsb2cgKHdpZWRlcnZlcndlbmRiYXIpID09PT09PT09PT0gLS0+CiAgICA8 +IS0tIGExMXkgKFNwcmludCA2YSAyMDI2LTA1LTI5KTogcm9sZT1kaWFsb2cgKyBhcmlhLW1vZGFs +ICsgbGFiZWxsZWRieQogICAgICAgICBtYWNodCBkZW4gTW9kYWwtS29udGV4dCBmdWVyIFNjcmVl +bnJlYWRlciBleHBsaXppdC4gYXJpYS1oaWRkZW4gd2lyZAogICAgICAgICB2b20gbW9kYWxaZWln +ZW4oKS1Db2RlIGJlaW0gT3Blbi9DbG9zZSBnZXNldHp0LiAtLT4KICAgIDxkaXYgaWQ9Im1vZGFs +LW92ZXJsYXkiIGNsYXNzPSJtb2RhbCB2ZXJzdGVja3QiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2Rh +bD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJtb2RhbC10aXRlbCIgYXJpYS1oaWRkZW49InRydWUi +PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWluaGFsdCIgaWQ9Im1vZGFsLWJveCI+CiAgICAg +ICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWtvcGYiPgogICAgICAgICAgICAgICAgPGgyIGlkPSJt +b2RhbC10aXRlbCI+PC9oMj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im1vZGFsLXNj +aGxpZXNzZW4iIGlkPSJtb2RhbC1zY2hsaWVzc2VuLWJ0biIgYXJpYS1sYWJlbD0iU2NobGllw59l +biI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBj +bGFzcz0ibW9kYWwta29lcnBlciIgaWQ9Im1vZGFsLWtvZXJwZXIiPjwvZGl2PgogICAgICAgICAg +ICA8ZGl2IGNsYXNzPSJtb2RhbC1mdXNzIiBpZD0ibW9kYWwtZnVzcyI+PC9kaXY+CiAgICAgICAg +PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tIENvbmZpcm0tT3ZlcmxheSAoU3ByaW50IDUg4oCU +IE1vZGFsLVN0YWNrIDIwMjYtMDUtMjkpOgogICAgICAgICBFaWdlbmVyIENvbnRhaW5lciBtaXQg +aG9laGVyZW0gei1pbmRleCwgZGFtaXQgYmVzdGFldGlnZW4oKS1EaWFsb2dlCiAgICAgICAgIElO +TkVSSEFMQiBlaW5lcyBnZW9lZmZuZXRlbiBIYXVwdG1vZGFscyBlcnNjaGVpbmVuIGtvZW5uZW4s +IG9obmUKICAgICAgICAgZGVzc2VuIEluaGFsdCB6dSB1ZWJlcnNjaHJlaWJlbi4gVm9yaGVyIGhh +YmVuIENvbmZpcm0tQXVmcnVmZQogICAgICAgICAoei5CLiAiV2lya2xpY2ggbG9lc2NoZW4/IiBi +ZWltIFBlcnNvbi1CZWFyYmVpdGVuKSBkYXMgdW1nZWJlbmRlCiAgICAgICAgIE1vZGFsIHplcnN0 +b2VydDsgbmFjaCAiQWJicmVjaGVuIiB3YXIgZGllIEJlYXJiZWl0dW5nIHdlZy4gLS0+CiAgICA8 +ZGl2IGlkPSJjb25maXJtLW92ZXJsYXkiIGNsYXNzPSJtb2RhbCB2ZXJzdGVja3QiIHJvbGU9ImRp +YWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJjb25maXJtLXRpdGVsIiBh +cmlhLWhpZGRlbj0idHJ1ZSIgc3R5bGU9InotaW5kZXg6Y2FsYyh2YXIoLS16LW1vZGFsKSArIDEw +KSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaW5oYWx0IiBpZD0iY29uZmlybS1ib3giIHN0 +eWxlPSJtYXgtd2lkdGg6NDgwcHgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1rb3Bm +Ij4KICAgICAgICAgICAgICAgIDxoMiBpZD0iY29uZmlybS10aXRlbCI+QmVzdMOkdGlndW5nPC9o +Mj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im1vZGFsLXNjaGxpZXNzZW4iIGlkPSJj +b25maXJtLXNjaGxpZXNzZW4tYnRuIiBhcmlhLWxhYmVsPSJTY2hsaWXDn2VuIj4mdGltZXM7PC9i +dXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1r +b2VycGVyIiBpZD0iY29uZmlybS1rb2VycGVyIj48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFz +cz0ibW9kYWwtZnVzcyIgaWQ9ImNvbmZpcm0tZnVzcyI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAg +ICA8L2Rpdj4KCiAgICA8IS0tIFRvYXN0LUNvbnRhaW5lciAtLT4KICAgIDxkaXYgaWQ9InRvYXN0 +LWNvbnRhaW5lciIgcm9sZT0ic3RhdHVzIiBhcmlhLWxpdmU9InBvbGl0ZSIgYXJpYS1hdG9taWM9 +ImZhbHNlIj48L2Rpdj4KCiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgc3JjPSJhcHAuanMiPjwv +c2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K ### FILE: info.html | 12765 PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0 Zi04Ij4KPHRpdGxlPlZJMyBER0wtUGxhbnVuZyDigJQgS3VyemluZm9ybWF0aW9uPC90aXRsZT4K @@ -8625,7 +8627,7 @@ bCgnW2RhdGEtc3ItZWRpdF0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpIHsKICAgICAgICBiLmFkZEV2 ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcGVyc29uQmVhcmJlaXRlbkRpYWxvZyhw YXJzZUludChiLmdldEF0dHJpYnV0ZSgnZGF0YS1zci1lZGl0JyksIDEwKSk7IH0pOwogICAgfSk7 Cn0K -### FILE: js/admin_statistik.js | 8259 +### FILE: js/admin_statistik.js | 8558 Ly8gPT09IGFkbWluX3N0YXRpc3Rpay5qcyA9PT0KLy8gU3VwZXJVc2VyLUxheW91dC1SYXN0ZXIg ZnVlciBkZW4gU3RhdGlzdGlrLVRhYi4gT3JkbmV0IEFMTEUgU3RhdGlzdGlrLQovLyBLYWNoZWxu IChmZXN0ZSBQYW5lbHMgKyBzZWxic3RnZWJhdXRlIEJhdWthc3Rlbi1LYWNoZWxuKSBpbiBlaW5l @@ -8638,139 +8640,145 @@ dGlzdGlrTGF5b3V0KS4KLy8KLy8gTXVzdGVyIGZ1ZXIgRHJhZyZEcm9wIHVlYmVybm9tbWVuIGF1 cyBhZG1pbl9jb2Rlcy5qcyAoc2NoaWNodGNvZGVEcmFnVmVyZHJhaHRlbikuCgppbXBvcnQgeyBa IH0gZnJvbSAnLi9jb3JlX3N0YXRlLmpzJzsKaW1wb3J0IHsgZXNjYXBlSFRNTCwgZXNjYXBlQXR0 ciB9IGZyb20gJy4vY29yZV91dGlsLmpzJzsKaW1wb3J0IHsgdG9hc3QgfSBmcm9tICcuL3VpX2Rp -YWxvZy5qcyc7CmltcG9ydCB7IGFwaSB9IGZyb20gJy4vY29yZV9hcGkuanMnOwppbXBvcnQgeyBz -dGF0aXN0aWtUaWxlc0FsbGUsIEJSRUlURV9TUEFOIH0gZnJvbSAnLi9zdGF0aXN0aWsuanMnOwoK -dmFyIEJSRUlURV9SQU5HICA9IHsgZHJpdHRlbDogMCwgaGFsYjogMSwgdm9sbDogMiB9Owp2YXIg -QlJFSVRFX1JFSUhFID0gWyd2b2xsJywgJ2hhbGInLCAnZHJpdHRlbCddOwp2YXIgQlJFSVRFX0xB -QkVMID0geyB2b2xsOiAnMToxIMK3IHZvbGwnLCBoYWxiOiAnMToyIMK3IGhhbGInLCBkcml0dGVs -OiAnMTozIMK3IGRyaXR0ZWwnIH07CgovLyBBa3R1ZWxsZXMgQXJiZWl0cy1MYXlvdXQgKGdlbWlz -Y2h0IGF1cyBaLmFkbWluLnN0YXRpc3Rpa0xheW91dCArIFRpbGUtU3RhbW1kYXRlbikuCnZhciBf -cmFzdGVyID0gW107CgpmdW5jdGlvbiBfZGFyZkVkaXRpZXJlbigpIHsKICAgIHJldHVybiAhISha -LnJlY2h0ZSAmJiBaLnJlY2h0ZS5pc3RTdXBlclVzZXIpOwp9CgpmdW5jdGlvbiBfY2xhbXAoYnJl -aXRlLCBtaW5CcmVpdGUpIHsKICAgIGlmICghQlJFSVRFX1NQQU5bYnJlaXRlXSkgYnJlaXRlID0g -J3ZvbGwnOwogICAgaWYgKCFCUkVJVEVfU1BBTlttaW5CcmVpdGVdKSBtaW5CcmVpdGUgPSAnZHJp -dHRlbCc7CiAgICByZXR1cm4gKEJSRUlURV9SQU5HW2JyZWl0ZV0gPCBCUkVJVEVfUkFOR1ttaW5C -cmVpdGVdKSA/IG1pbkJyZWl0ZSA6IGJyZWl0ZTsKfQoKLy8gTWVyZ2UgZ2VzcGVpY2hlcnRlcyBM -YXlvdXQgKFJlaWhlbmZvbGdlL0JyZWl0ZS9TaWNodGJhcmtlaXQpIG1pdCBkZXIKLy8gdm9sbHN0 -YWVuZGlnZW4gVGlsZS1MaXN0ZSDigJQgbmV1ZSBUaWxlcyBoaW50ZW4gYW5oYWVuZ2VuLCB2ZXJ3 -YWlzdGUgZHJvcHBlbi4KZnVuY3Rpb24gX2JhdWVSYXN0ZXIoKSB7CiAgICB2YXIgdGlsZXMgPSBz -dGF0aXN0aWtUaWxlc0FsbGUoKTsKICAgIHZhciBieUlkID0ge307CiAgICB0aWxlcy5mb3JFYWNo -KGZ1bmN0aW9uKHQpeyBieUlkW3QuaWRdID0gdDsgfSk7CiAgICB2YXIgZ2VzcGVpY2hlcnQgPSAo -Wi5hZG1pbiAmJiBBcnJheS5pc0FycmF5KFouYWRtaW4uc3RhdGlzdGlrTGF5b3V0KSkgPyBaLmFk -bWluLnN0YXRpc3Rpa0xheW91dCA6IFtdOwogICAgdmFyIG91dCA9IFtdLCBnZXNlaGVuID0ge307 -CiAgICBnZXNwZWljaGVydC5mb3JFYWNoKGZ1bmN0aW9uKGUpewogICAgICAgIGlmICghZSB8fCAh -ZS5pZCkgcmV0dXJuOwogICAgICAgIHZhciB0ID0gYnlJZFtlLmlkXTsKICAgICAgICBpZiAoIXQp -IHJldHVybjsKICAgICAgICBvdXQucHVzaCh7CiAgICAgICAgICAgIGlkOiB0LmlkLCB0aXRlbDog -dC50aXRlbCwgbWluQnJlaXRlOiB0Lm1pbkJyZWl0ZSwgaXN0S2FjaGVsOiB0LmlzdEthY2hlbCwK -ICAgICAgICAgICAgYnJlaXRlOiBfY2xhbXAoZS5icmVpdGUgfHwgdC5kZWZhdWx0QnJlaXRlLCB0 -Lm1pbkJyZWl0ZSksCiAgICAgICAgICAgIHNpY2h0YmFyOiBlLnNpY2h0YmFyICE9PSBmYWxzZQog -ICAgICAgIH0pOwogICAgICAgIGdlc2VoZW5bdC5pZF0gPSB0cnVlOwogICAgfSk7CiAgICB0aWxl -cy5mb3JFYWNoKGZ1bmN0aW9uKHQpewogICAgICAgIGlmIChnZXNlaGVuW3QuaWRdKSByZXR1cm47 -CiAgICAgICAgb3V0LnB1c2goewogICAgICAgICAgICBpZDogdC5pZCwgdGl0ZWw6IHQudGl0ZWws -IG1pbkJyZWl0ZTogdC5taW5CcmVpdGUsIGlzdEthY2hlbDogdC5pc3RLYWNoZWwsCiAgICAgICAg -ICAgIGJyZWl0ZTogdC5kZWZhdWx0QnJlaXRlLCBzaWNodGJhcjogdHJ1ZQogICAgICAgIH0pOwog -ICAgfSk7CiAgICByZXR1cm4gb3V0Owp9CgpmdW5jdGlvbiBfcGVyc2lzdGllcmVuKCkgewogICAg -dmFyIG51ciA9IF9yYXN0ZXIubWFwKGZ1bmN0aW9uKGUpeyByZXR1cm4geyBpZDogZS5pZCwgYnJl -aXRlOiBlLmJyZWl0ZSwgc2ljaHRiYXI6IGUuc2ljaHRiYXIgfTsgfSk7CiAgICByZXR1cm4gYXBp -KCcvYXBpL2FkbWluL3N0YXRpc3RpaycsIHsKICAgICAgICBtZXRob2Q6ICdQVVQnLAogICAgICAg -IGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LAogICAgICAg -IGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc3RhdGlzdGlrTGF5b3V0OiBudXIgfSkKICAgIH0pLnRo -ZW4oZnVuY3Rpb24oKXsKICAgICAgICBaLmFkbWluLnN0YXRpc3Rpa0xheW91dCA9IG51cjsKICAg -ICAgICB0b2FzdCgnU3RhdGlzdGlrLUxheW91dCBnZXNwZWljaGVydCcsICdlcmZvbGcnKTsKICAg -IH0pLmNhdGNoKGZ1bmN0aW9uKGUpewogICAgICAgIHRvYXN0KCdTcGVpY2hlcm4gZmVobGdlc2No -bGFnZW46ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsKICAgIH0pOwp9CgpmdW5jdGlvbiBfbmFl -Y2hzdGVCcmVpdGUoY3VyLCBtaW5CcmVpdGUpIHsKICAgIHZhciBlcmxhdWJ0ID0gQlJFSVRFX1JF -SUhFLmZpbHRlcihmdW5jdGlvbihiKXsgcmV0dXJuIEJSRUlURV9SQU5HW2JdID49IEJSRUlURV9S -QU5HW21pbkJyZWl0ZV07IH0pOwogICAgdmFyIGkgPSBlcmxhdWJ0LmluZGV4T2YoY3VyKTsKICAg -IGlmIChpIDwgMCkgaSA9IDA7CiAgICByZXR1cm4gZXJsYXVidFsoaSArIDEpICUgZXJsYXVidC5s -ZW5ndGhdOwp9CgpmdW5jdGlvbiBfdGlsZUh0bWwoZSkgewogICAgdmFyIHNwYW4gPSBCUkVJVEVf -U1BBTltlLmJyZWl0ZV0gfHwgNjsKICAgIHZhciBtaW5IaW53ZWlzID0gKGUubWluQnJlaXRlID09 -PSAndm9sbCcpID8gJyA8c3BhbiBjbGFzcz0ic2wtbWluIj4obnVyIHZvbGwpPC9zcGFuPicgOiAn -JzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0ic2wtdGlsZScgKyAoZS5zaWNodGJhciA/ICcnIDog -JyBzbC11bnNpY2h0YmFyJykgKyAnIiAnICsKICAgICAgICAgICAgJ2RhdGEtdGlsZS1pZD0iJyAr -IGVzY2FwZUF0dHIoZS5pZCkgKyAnIiBkcmFnZ2FibGU9InRydWUiICcgKwogICAgICAgICAgICAn -c3R5bGU9ImdyaWQtY29sdW1uOnNwYW4gJyArIHNwYW4gKyAnIiAnICsKICAgICAgICAgICAgJ3Rp -dGxlPSJLbGljayB3ZWNoc2VsdCBkaWUgQnJlaXRlLCBaaWVoZW4gw6RuZGVydCBkaWUgUmVpaGVu -Zm9sZ2UiPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJzbC10aWxlLWtvcGYiPicgKwogICAgICAg -ICAgICAoZS5pc3RLYWNoZWwgPyAnPHNwYW4gY2xhc3M9InNsLWJhZGdlIj5CYXVrYXN0ZW48L3Nw -YW4+JyA6ICc8c3BhbiBjbGFzcz0ic2wtYmFkZ2Ugc2wtYmFkZ2UtZmVzdCI+UGFuZWw8L3NwYW4+ -JykgKwogICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0ic2wtYXVnZSIgdHlwZT0iYnV0dG9uIiBk -YXRhLXNsLWF1Z2U9IicgKyBlc2NhcGVBdHRyKGUuaWQpICsgJyIgJyArCiAgICAgICAgICAgICAg -ICAndGl0bGU9IicgKyAoZS5zaWNodGJhciA/ICdTaWNodGJhciDigJQgS2xpY2sgYmxlbmRldCBh -dXMnIDogJ0F1c2dlYmxlbmRldCDigJQgS2xpY2sgYmxlbmRldCBlaW4nKSArICciICcgKwogICAg -ICAgICAgICAgICAgJ2FyaWEtbGFiZWw9IlNpY2h0YmFya2VpdCB1bXNjaGFsdGVuIj4nICsgKGUu -c2ljaHRiYXIgPyAnU2ljaHRiYXInIDogJ0F1cycpICsgJzwvYnV0dG9uPicgKwogICAgICAgICc8 -L2Rpdj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0ic2wtdGlsZS10aXRlbCI+JyArIGVzY2FwZUhU -TUwoZS50aXRlbCkgKyAnPC9kaXY+JyArCiAgICAgICAgJzxkaXYgY2xhc3M9InNsLXRpbGUtYnJl -aXRlIj4nICsgZXNjYXBlSFRNTChCUkVJVEVfTEFCRUxbZS5icmVpdGVdIHx8IGUuYnJlaXRlKSAr -IG1pbkhpbndlaXMgKyAnPC9kaXY+JyArCiAgICAnPC9kaXY+JzsKfQoKZXhwb3J0IGZ1bmN0aW9u -IHN0YXRpc3Rpa0xheW91dFJlbmRlcm4oKSB7CiAgICB2YXIgY29udCA9IGRvY3VtZW50LmdldEVs -ZW1lbnRCeUlkKCdzdGF0aXN0aWstbGF5b3V0LWluaGFsdCcpOwogICAgaWYgKCFjb250KSByZXR1 -cm47CiAgICBpZiAoIV9kYXJmRWRpdGllcmVuKCkpIHsKICAgICAgICBjb250LmlubmVySFRNTCA9 -ICc8ZGl2IGNsYXNzPSJhZG1pbi1lbXB0eSI+PGRpdiBjbGFzcz0iYWRtaW4tZW1wdHktdGV4dCI+ -TnVyIFN1cGVyVXNlciBkw7xyZmVuIGRhcyBTdGF0aXN0aWstTGF5b3V0IGFub3JkbmVuLjwvZGl2 -PjwvZGl2Pic7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgX3Jhc3RlciA9IF9iYXVlUmFzdGVy -KCk7CiAgICBpZiAoIV9yYXN0ZXIubGVuZ3RoKSB7CiAgICAgICAgY29udC5pbm5lckhUTUwgPSAn -PGRpdiBjbGFzcz0iYWRtaW4tZW1wdHkiPjxkaXYgY2xhc3M9ImFkbWluLWVtcHR5LXRleHQiPktl -aW5lIFN0YXRpc3Rpay1LYWNoZWxuIHZvcmhhbmRlbi48L2Rpdj48L2Rpdj4nOwogICAgICAgIHJl -dHVybjsKICAgIH0KICAgIGNvbnQuaW5uZXJIVE1MID0KICAgICAgICAnPGRpdiBjbGFzcz0ic2wt -bGVnZW5kZSI+Ni1TcGFsdGVuLVJhc3RlciDigJQgc28gZXJzY2hlaW50IGRlciBTdGF0aXN0aWst -VGFiIGbDvHIgYWxsZS4gJyArCiAgICAgICAgJ0tsaWNrIGF1ZiBlaW5lIEthY2hlbCB3ZWNoc2Vs -dCBkaWUgQnJlaXRlICh2b2xsIOKGkiBoYWxiIOKGkiBkcml0dGVsKSwgWmllaGVuIG9yZG5ldCBu -ZXUsIGRhcyBBdWdlIGJsZW5kZXQgYXVzLjwvZGl2PicgKwogICAgICAgICc8ZGl2IGlkPSJzbC1y -YXN0ZXIiIGNsYXNzPSJzbC1yYXN0ZXIgc3RhdHMtZ3JpZCI+JyArIF9yYXN0ZXIubWFwKF90aWxl -SHRtbCkuam9pbignJykgKyAnPC9kaXY+JzsKICAgIF92ZXJkcmFodGVuKGNvbnQpOwp9CgpmdW5j -dGlvbiBfdmVyZHJhaHRlbihjb250KSB7CiAgICB2YXIgcmFzdGVyID0gZG9jdW1lbnQuZ2V0RWxl -bWVudEJ5SWQoJ3NsLXJhc3RlcicpOwogICAgaWYgKCFyYXN0ZXIpIHJldHVybjsKCiAgICAvLyBL -bGljazogQnJlaXRlIGN5Y2xlbiAoQXVnZS1LbGljayBzZXBhcmF0IGJlaGFuZGVsbikuCiAgICBy -YXN0ZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKXsKICAgICAgICB2YXIg -YXVnZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXNsLWF1Z2VdJyk7CiAgICAgICAgaWYgKGF1 -Z2UpIHsKICAgICAgICAgICAgdmFyIGFpZCA9IGF1Z2UuZ2V0QXR0cmlidXRlKCdkYXRhLXNsLWF1 -Z2UnKTsKICAgICAgICAgICAgdmFyIGFlID0gX3Jhc3Rlci5maWx0ZXIoZnVuY3Rpb24oeCl7IHJl -dHVybiB4LmlkID09PSBhaWQ7IH0pWzBdOwogICAgICAgICAgICBpZiAoYWUpIHsgYWUuc2ljaHRi -YXIgPSAhYWUuc2ljaHRiYXI7IF9wZXJzaXN0aWVyZW4oKS50aGVuKGZ1bmN0aW9uKCl7IHN0YXRp -c3Rpa0xheW91dFJlbmRlcm4oKTsgfSk7IH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0K -ICAgICAgICB2YXIgdGlsZSA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5zbC10aWxlJyk7CiAgICAgICAg -aWYgKCF0aWxlKSByZXR1cm47CiAgICAgICAgdmFyIGlkID0gdGlsZS5nZXRBdHRyaWJ1dGUoJ2Rh -dGEtdGlsZS1pZCcpOwogICAgICAgIHZhciB0ZSA9IF9yYXN0ZXIuZmlsdGVyKGZ1bmN0aW9uKHgp -eyByZXR1cm4geC5pZCA9PT0gaWQ7IH0pWzBdOwogICAgICAgIGlmICghdGUpIHJldHVybjsKICAg -ICAgICB2YXIgbmV1ID0gX25hZWNoc3RlQnJlaXRlKHRlLmJyZWl0ZSwgdGUubWluQnJlaXRlKTsK -ICAgICAgICBpZiAobmV1ID09PSB0ZS5icmVpdGUpIHsKICAgICAgICAgICAgdG9hc3QoJ0RpZXNl -cyBQYW5lbCBpc3QgYXVmIHZvbGxlIEJyZWl0ZSBmZXN0Z2VsZWd0JywgJ2luZm8nKTsKICAgICAg -ICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0ZS5icmVpdGUgPSBuZXU7CiAgICAgICAg -X3BlcnNpc3RpZXJlbigpLnRoZW4oZnVuY3Rpb24oKXsgc3RhdGlzdGlrTGF5b3V0UmVuZGVybigp -OyB9KTsKICAgIH0pOwoKICAgIC8vIERyYWcmRHJvcC1SZWloZW5mb2xnZSAoTXVzdGVyIGF1cyBh -ZG1pbl9jb2Rlcy5qcykuCiAgICB2YXIgZHJhZ0lkID0gbnVsbDsKICAgIHJhc3Rlci5hZGRFdmVu -dExpc3RlbmVyKCdkcmFnc3RhcnQnLCBmdW5jdGlvbihlKXsKICAgICAgICB2YXIgdGlsZSA9IGUu -dGFyZ2V0LmNsb3Nlc3QoJy5zbC10aWxlJyk7CiAgICAgICAgaWYgKCF0aWxlKSByZXR1cm47CiAg -ICAgICAgZHJhZ0lkID0gdGlsZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGlsZS1pZCcpOwogICAgICAg -IHRpbGUuY2xhc3NMaXN0LmFkZCgnc2wtZHJhZ2dpbmcnKTsKICAgICAgICBlLmRhdGFUcmFuc2Zl -ci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnOwogICAgICAgIHRyeSB7IGUuZGF0YVRyYW5zZmVyLnNl -dERhdGEoJ3RleHQvcGxhaW4nLCBkcmFnSWQpOyB9IGNhdGNoIChfKSB7fQogICAgfSk7CiAgICBy -YXN0ZXIuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIGZ1bmN0aW9uKCl7CiAgICAgICAgcmFz -dGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zbC10aWxlJykuZm9yRWFjaChmdW5jdGlvbih0KXsgdC5j -bGFzc0xpc3QucmVtb3ZlKCdzbC1kcmFnZ2luZycsICdzbC1kcm9wLXppZWwnKTsgfSk7CiAgICB9 -KTsKICAgIHJhc3Rlci5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIGZ1bmN0aW9uKGUpewog -ICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICB2YXIgdGlsZSA9IGUudGFyZ2V0LmNs -b3Nlc3QoJy5zbC10aWxlJyk7CiAgICAgICAgcmFzdGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zbC1k -cm9wLXppZWwnKS5mb3JFYWNoKGZ1bmN0aW9uKHQpeyB0LmNsYXNzTGlzdC5yZW1vdmUoJ3NsLWRy -b3AtemllbCcpOyB9KTsKICAgICAgICBpZiAodGlsZSAmJiB0aWxlLmdldEF0dHJpYnV0ZSgnZGF0 -YS10aWxlLWlkJykgIT09IGRyYWdJZCkgdGlsZS5jbGFzc0xpc3QuYWRkKCdzbC1kcm9wLXppZWwn -KTsKICAgIH0pOwogICAgcmFzdGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbihl -KXsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdmFyIHppZWwgPSBlLnRhcmdl -dC5jbG9zZXN0KCcuc2wtdGlsZScpOwogICAgICAgIGlmICghemllbCB8fCAhZHJhZ0lkIHx8IHpp -ZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXRpbGUtaWQnKSA9PT0gZHJhZ0lkKSB7IGRyYWdJZCA9IG51 -bGw7IHJldHVybjsgfQogICAgICAgIHZhciB6aWVsSWQgPSB6aWVsLmdldEF0dHJpYnV0ZSgnZGF0 -YS10aWxlLWlkJyk7CiAgICAgICAgdmFyIHZvbklkeCA9IF9yYXN0ZXIuZmluZEluZGV4KGZ1bmN0 -aW9uKHgpeyByZXR1cm4geC5pZCA9PT0gZHJhZ0lkOyB9KTsKICAgICAgICB2YXIgYmlzSWR4ID0g -X3Jhc3Rlci5maW5kSW5kZXgoZnVuY3Rpb24oeCl7IHJldHVybiB4LmlkID09PSB6aWVsSWQ7IH0p -OwogICAgICAgIGlmICh2b25JZHggPCAwIHx8IGJpc0lkeCA8IDApIHsgZHJhZ0lkID0gbnVsbDsg -cmV0dXJuOyB9CiAgICAgICAgdmFyIG1vdmVkID0gX3Jhc3Rlci5zcGxpY2Uodm9uSWR4LCAxKVsw -XTsKICAgICAgICAvLyBOYWNoIEVudGZlcm5lbiBnZ2YuIFppZWxpbmRleCBrb3JyaWdpZXJlbi4K -ICAgICAgICBiaXNJZHggPSBfcmFzdGVyLmZpbmRJbmRleChmdW5jdGlvbih4KXsgcmV0dXJuIHgu -aWQgPT09IHppZWxJZDsgfSk7CiAgICAgICAgX3Jhc3Rlci5zcGxpY2UoYmlzSWR4LCAwLCBtb3Zl -ZCk7CiAgICAgICAgZHJhZ0lkID0gbnVsbDsKICAgICAgICBfcGVyc2lzdGllcmVuKCkudGhlbihm -dW5jdGlvbigpeyBzdGF0aXN0aWtMYXlvdXRSZW5kZXJuKCk7IH0pOwogICAgfSk7Cn0K +YWxvZy5qcyc7CmltcG9ydCB7IGFwaSB9IGZyb20gJy4vY29yZV9hcGkuanMnOwovLyBXSUNIVElH +OiBOSUNIVCBhdXMgc3RhdGlzdGlrLmpzIGltcG9ydGllcmVuIOKAlCBkYXMgTW9kdWwgaXN0IHNl +cnZlci1zZWl0aWcKLy8gR0FURS00MDQtZ2VzY2h1ZXR6dCAoa2VpbiBTdGF0aXN0aWstUmVjaHQp +IHVuZCB3dWVyZGUgZnVlciByZWd1bGFlcmUgVXNlciBkaWUKLy8gZ2VzYW10ZSBFUy1Nb2R1bC1L +ZXR0ZSAoYXBwLmpzIC0+IGFkbWluLmpzIC0+IGhpZXIpIGJyZWNoZW4uIERlciBLYWNoZWwtCi8v +IEthdGFsb2cgbGllZ3Qgc2VpdCB2MS40LjUgaW4gZGVyIHVuZ2VHQVRFdGVuIEVuZ2luZS4KaW1w +b3J0IHsgc3RhdGlzdGlrVGlsZXNBbGxlLCBCUkVJVEVfU1BBTiB9IGZyb20gJy4vc3RhdGlzdGlr +X2VuZ2luZS5qcyc7Cgp2YXIgQlJFSVRFX1JBTkcgID0geyBkcml0dGVsOiAwLCBoYWxiOiAxLCB2 +b2xsOiAyIH07CnZhciBCUkVJVEVfUkVJSEUgPSBbJ3ZvbGwnLCAnaGFsYicsICdkcml0dGVsJ107 +CnZhciBCUkVJVEVfTEFCRUwgPSB7IHZvbGw6ICcxOjEgwrcgdm9sbCcsIGhhbGI6ICcxOjIgwrcg +aGFsYicsIGRyaXR0ZWw6ICcxOjMgwrcgZHJpdHRlbCcgfTsKCi8vIEFrdHVlbGxlcyBBcmJlaXRz +LUxheW91dCAoZ2VtaXNjaHQgYXVzIFouYWRtaW4uc3RhdGlzdGlrTGF5b3V0ICsgVGlsZS1TdGFt +bWRhdGVuKS4KdmFyIF9yYXN0ZXIgPSBbXTsKCmZ1bmN0aW9uIF9kYXJmRWRpdGllcmVuKCkgewog +ICAgcmV0dXJuICEhKFoucmVjaHRlICYmIFoucmVjaHRlLmlzdFN1cGVyVXNlcik7Cn0KCmZ1bmN0 +aW9uIF9jbGFtcChicmVpdGUsIG1pbkJyZWl0ZSkgewogICAgaWYgKCFCUkVJVEVfU1BBTlticmVp +dGVdKSBicmVpdGUgPSAndm9sbCc7CiAgICBpZiAoIUJSRUlURV9TUEFOW21pbkJyZWl0ZV0pIG1p +bkJyZWl0ZSA9ICdkcml0dGVsJzsKICAgIHJldHVybiAoQlJFSVRFX1JBTkdbYnJlaXRlXSA8IEJS +RUlURV9SQU5HW21pbkJyZWl0ZV0pID8gbWluQnJlaXRlIDogYnJlaXRlOwp9CgovLyBNZXJnZSBn +ZXNwZWljaGVydGVzIExheW91dCAoUmVpaGVuZm9sZ2UvQnJlaXRlL1NpY2h0YmFya2VpdCkgbWl0 +IGRlcgovLyB2b2xsc3RhZW5kaWdlbiBUaWxlLUxpc3RlIOKAlCBuZXVlIFRpbGVzIGhpbnRlbiBh +bmhhZW5nZW4sIHZlcndhaXN0ZSBkcm9wcGVuLgpmdW5jdGlvbiBfYmF1ZVJhc3RlcigpIHsKICAg +IHZhciB0aWxlcyA9IHN0YXRpc3Rpa1RpbGVzQWxsZSgpOwogICAgdmFyIGJ5SWQgPSB7fTsKICAg +IHRpbGVzLmZvckVhY2goZnVuY3Rpb24odCl7IGJ5SWRbdC5pZF0gPSB0OyB9KTsKICAgIHZhciBn +ZXNwZWljaGVydCA9IChaLmFkbWluICYmIEFycmF5LmlzQXJyYXkoWi5hZG1pbi5zdGF0aXN0aWtM +YXlvdXQpKSA/IFouYWRtaW4uc3RhdGlzdGlrTGF5b3V0IDogW107CiAgICB2YXIgb3V0ID0gW10s +IGdlc2VoZW4gPSB7fTsKICAgIGdlc3BlaWNoZXJ0LmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAg +ICAgaWYgKCFlIHx8ICFlLmlkKSByZXR1cm47CiAgICAgICAgdmFyIHQgPSBieUlkW2UuaWRdOwog +ICAgICAgIGlmICghdCkgcmV0dXJuOwogICAgICAgIG91dC5wdXNoKHsKICAgICAgICAgICAgaWQ6 +IHQuaWQsIHRpdGVsOiB0LnRpdGVsLCBtaW5CcmVpdGU6IHQubWluQnJlaXRlLCBpc3RLYWNoZWw6 +IHQuaXN0S2FjaGVsLAogICAgICAgICAgICBicmVpdGU6IF9jbGFtcChlLmJyZWl0ZSB8fCB0LmRl +ZmF1bHRCcmVpdGUsIHQubWluQnJlaXRlKSwKICAgICAgICAgICAgc2ljaHRiYXI6IGUuc2ljaHRi +YXIgIT09IGZhbHNlCiAgICAgICAgfSk7CiAgICAgICAgZ2VzZWhlblt0LmlkXSA9IHRydWU7CiAg +ICB9KTsKICAgIHRpbGVzLmZvckVhY2goZnVuY3Rpb24odCl7CiAgICAgICAgaWYgKGdlc2VoZW5b +dC5pZF0pIHJldHVybjsKICAgICAgICBvdXQucHVzaCh7CiAgICAgICAgICAgIGlkOiB0LmlkLCB0 +aXRlbDogdC50aXRlbCwgbWluQnJlaXRlOiB0Lm1pbkJyZWl0ZSwgaXN0S2FjaGVsOiB0LmlzdEth +Y2hlbCwKICAgICAgICAgICAgYnJlaXRlOiB0LmRlZmF1bHRCcmVpdGUsIHNpY2h0YmFyOiB0cnVl +CiAgICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiBvdXQ7Cn0KCmZ1bmN0aW9uIF9wZXJzaXN0 +aWVyZW4oKSB7CiAgICB2YXIgbnVyID0gX3Jhc3Rlci5tYXAoZnVuY3Rpb24oZSl7IHJldHVybiB7 +IGlkOiBlLmlkLCBicmVpdGU6IGUuYnJlaXRlLCBzaWNodGJhcjogZS5zaWNodGJhciB9OyB9KTsK +ICAgIHJldHVybiBhcGkoJy9hcGkvYWRtaW4vc3RhdGlzdGlrJywgewogICAgICAgIG1ldGhvZDog +J1BVVCcsCiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pz +b24nIH0sCiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzdGF0aXN0aWtMYXlvdXQ6IG51 +ciB9KQogICAgfSkudGhlbihmdW5jdGlvbigpewogICAgICAgIFouYWRtaW4uc3RhdGlzdGlrTGF5 +b3V0ID0gbnVyOwogICAgICAgIHRvYXN0KCdTdGF0aXN0aWstTGF5b3V0IGdlc3BlaWNoZXJ0Jywg +J2VyZm9sZycpOwogICAgfSkuY2F0Y2goZnVuY3Rpb24oZSl7CiAgICAgICAgdG9hc3QoJ1NwZWlj +aGVybiBmZWhsZ2VzY2hsYWdlbjogJyArIGUubWVzc2FnZSwgJ2ZlaGxlcicpOwogICAgfSk7Cn0K +CmZ1bmN0aW9uIF9uYWVjaHN0ZUJyZWl0ZShjdXIsIG1pbkJyZWl0ZSkgewogICAgdmFyIGVybGF1 +YnQgPSBCUkVJVEVfUkVJSEUuZmlsdGVyKGZ1bmN0aW9uKGIpeyByZXR1cm4gQlJFSVRFX1JBTkdb +Yl0gPj0gQlJFSVRFX1JBTkdbbWluQnJlaXRlXTsgfSk7CiAgICB2YXIgaSA9IGVybGF1YnQuaW5k +ZXhPZihjdXIpOwogICAgaWYgKGkgPCAwKSBpID0gMDsKICAgIHJldHVybiBlcmxhdWJ0WyhpICsg +MSkgJSBlcmxhdWJ0Lmxlbmd0aF07Cn0KCmZ1bmN0aW9uIF90aWxlSHRtbChlKSB7CiAgICB2YXIg +c3BhbiA9IEJSRUlURV9TUEFOW2UuYnJlaXRlXSB8fCA2OwogICAgdmFyIG1pbkhpbndlaXMgPSAo +ZS5taW5CcmVpdGUgPT09ICd2b2xsJykgPyAnIDxzcGFuIGNsYXNzPSJzbC1taW4iPihudXIgdm9s +bCk8L3NwYW4+JyA6ICcnOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJzbC10aWxlJyArIChlLnNp +Y2h0YmFyID8gJycgOiAnIHNsLXVuc2ljaHRiYXInKSArICciICcgKwogICAgICAgICAgICAnZGF0 +YS10aWxlLWlkPSInICsgZXNjYXBlQXR0cihlLmlkKSArICciIGRyYWdnYWJsZT0idHJ1ZSIgJyAr +CiAgICAgICAgICAgICdzdHlsZT0iZ3JpZC1jb2x1bW46c3BhbiAnICsgc3BhbiArICciICcgKwog +ICAgICAgICAgICAndGl0bGU9IktsaWNrIHdlY2hzZWx0IGRpZSBCcmVpdGUsIFppZWhlbiDDpG5k +ZXJ0IGRpZSBSZWloZW5mb2xnZSI+JyArCiAgICAgICAgJzxkaXYgY2xhc3M9InNsLXRpbGUta29w +ZiI+JyArCiAgICAgICAgICAgIChlLmlzdEthY2hlbCA/ICc8c3BhbiBjbGFzcz0ic2wtYmFkZ2Ui +PkJhdWthc3Rlbjwvc3Bhbj4nIDogJzxzcGFuIGNsYXNzPSJzbC1iYWRnZSBzbC1iYWRnZS1mZXN0 +Ij5QYW5lbDwvc3Bhbj4nKSArCiAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJzbC1hdWdlIiB0 +eXBlPSJidXR0b24iIGRhdGEtc2wtYXVnZT0iJyArIGVzY2FwZUF0dHIoZS5pZCkgKyAnIiAnICsK +ICAgICAgICAgICAgICAgICd0aXRsZT0iJyArIChlLnNpY2h0YmFyID8gJ1NpY2h0YmFyIOKAlCBL +bGljayBibGVuZGV0IGF1cycgOiAnQXVzZ2VibGVuZGV0IOKAlCBLbGljayBibGVuZGV0IGVpbicp +ICsgJyIgJyArCiAgICAgICAgICAgICAgICAnYXJpYS1sYWJlbD0iU2ljaHRiYXJrZWl0IHVtc2No +YWx0ZW4iPicgKyAoZS5zaWNodGJhciA/ICdTaWNodGJhcicgOiAnQXVzJykgKyAnPC9idXR0b24+ +JyArCiAgICAgICAgJzwvZGl2PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJzbC10aWxlLXRpdGVs +Ij4nICsgZXNjYXBlSFRNTChlLnRpdGVsKSArICc8L2Rpdj4nICsKICAgICAgICAnPGRpdiBjbGFz +cz0ic2wtdGlsZS1icmVpdGUiPicgKyBlc2NhcGVIVE1MKEJSRUlURV9MQUJFTFtlLmJyZWl0ZV0g +fHwgZS5icmVpdGUpICsgbWluSGlud2VpcyArICc8L2Rpdj4nICsKICAgICc8L2Rpdj4nOwp9Cgpl +eHBvcnQgZnVuY3Rpb24gc3RhdGlzdGlrTGF5b3V0UmVuZGVybigpIHsKICAgIHZhciBjb250ID0g +ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXRpc3Rpay1sYXlvdXQtaW5oYWx0Jyk7CiAgICBp +ZiAoIWNvbnQpIHJldHVybjsKICAgIGlmICghX2RhcmZFZGl0aWVyZW4oKSkgewogICAgICAgIGNv +bnQuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImFkbWluLWVtcHR5Ij48ZGl2IGNsYXNzPSJhZG1p +bi1lbXB0eS10ZXh0Ij5OdXIgU3VwZXJVc2VyIGTDvHJmZW4gZGFzIFN0YXRpc3Rpay1MYXlvdXQg +YW5vcmRuZW4uPC9kaXY+PC9kaXY+JzsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBfcmFzdGVy +ID0gX2JhdWVSYXN0ZXIoKTsKICAgIGlmICghX3Jhc3Rlci5sZW5ndGgpIHsKICAgICAgICBjb250 +LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJhZG1pbi1lbXB0eSI+PGRpdiBjbGFzcz0iYWRtaW4t +ZW1wdHktdGV4dCI+S2VpbmUgU3RhdGlzdGlrLUthY2hlbG4gdm9yaGFuZGVuLjwvZGl2PjwvZGl2 +Pic7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgY29udC5pbm5lckhUTUwgPQogICAgICAgICc8 +ZGl2IGNsYXNzPSJzbC1sZWdlbmRlIj42LVNwYWx0ZW4tUmFzdGVyIOKAlCBzbyBlcnNjaGVpbnQg +ZGVyIFN0YXRpc3Rpay1UYWIgZsO8ciBhbGxlLiAnICsKICAgICAgICAnS2xpY2sgYXVmIGVpbmUg +S2FjaGVsIHdlY2hzZWx0IGRpZSBCcmVpdGUgKHZvbGwg4oaSIGhhbGIg4oaSIGRyaXR0ZWwpLCBa +aWVoZW4gb3JkbmV0IG5ldSwgZGFzIEF1Z2UgYmxlbmRldCBhdXMuPC9kaXY+JyArCiAgICAgICAg +JzxkaXYgaWQ9InNsLXJhc3RlciIgY2xhc3M9InNsLXJhc3RlciBzdGF0cy1ncmlkIj4nICsgX3Jh +c3Rlci5tYXAoX3RpbGVIdG1sKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgX3ZlcmRyYWh0ZW4o +Y29udCk7Cn0KCmZ1bmN0aW9uIF92ZXJkcmFodGVuKGNvbnQpIHsKICAgIHZhciByYXN0ZXIgPSBk +b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2wtcmFzdGVyJyk7CiAgICBpZiAoIXJhc3RlcikgcmV0 +dXJuOwoKICAgIC8vIEtsaWNrOiBCcmVpdGUgY3ljbGVuIChBdWdlLUtsaWNrIHNlcGFyYXQgYmVo +YW5kZWxuKS4KICAgIHJhc3Rlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUp +ewogICAgICAgIHZhciBhdWdlID0gZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtc2wtYXVnZV0nKTsK +ICAgICAgICBpZiAoYXVnZSkgewogICAgICAgICAgICB2YXIgYWlkID0gYXVnZS5nZXRBdHRyaWJ1 +dGUoJ2RhdGEtc2wtYXVnZScpOwogICAgICAgICAgICB2YXIgYWUgPSBfcmFzdGVyLmZpbHRlcihm +dW5jdGlvbih4KXsgcmV0dXJuIHguaWQgPT09IGFpZDsgfSlbMF07CiAgICAgICAgICAgIGlmIChh +ZSkgeyBhZS5zaWNodGJhciA9ICFhZS5zaWNodGJhcjsgX3BlcnNpc3RpZXJlbigpLnRoZW4oZnVu +Y3Rpb24oKXsgc3RhdGlzdGlrTGF5b3V0UmVuZGVybigpOyB9KTsgfQogICAgICAgICAgICByZXR1 +cm47CiAgICAgICAgfQogICAgICAgIHZhciB0aWxlID0gZS50YXJnZXQuY2xvc2VzdCgnLnNsLXRp +bGUnKTsKICAgICAgICBpZiAoIXRpbGUpIHJldHVybjsKICAgICAgICB2YXIgaWQgPSB0aWxlLmdl +dEF0dHJpYnV0ZSgnZGF0YS10aWxlLWlkJyk7CiAgICAgICAgdmFyIHRlID0gX3Jhc3Rlci5maWx0 +ZXIoZnVuY3Rpb24oeCl7IHJldHVybiB4LmlkID09PSBpZDsgfSlbMF07CiAgICAgICAgaWYgKCF0 +ZSkgcmV0dXJuOwogICAgICAgIHZhciBuZXUgPSBfbmFlY2hzdGVCcmVpdGUodGUuYnJlaXRlLCB0 +ZS5taW5CcmVpdGUpOwogICAgICAgIGlmIChuZXUgPT09IHRlLmJyZWl0ZSkgewogICAgICAgICAg +ICB0b2FzdCgnRGllc2VzIFBhbmVsIGlzdCBhdWYgdm9sbGUgQnJlaXRlIGZlc3RnZWxlZ3QnLCAn +aW5mbycpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRlLmJyZWl0ZSA9 +IG5ldTsKICAgICAgICBfcGVyc2lzdGllcmVuKCkudGhlbihmdW5jdGlvbigpeyBzdGF0aXN0aWtM +YXlvdXRSZW5kZXJuKCk7IH0pOwogICAgfSk7CgogICAgLy8gRHJhZyZEcm9wLVJlaWhlbmZvbGdl +IChNdXN0ZXIgYXVzIGFkbWluX2NvZGVzLmpzKS4KICAgIHZhciBkcmFnSWQgPSBudWxsOwogICAg +cmFzdGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGZ1bmN0aW9uKGUpewogICAgICAg +IHZhciB0aWxlID0gZS50YXJnZXQuY2xvc2VzdCgnLnNsLXRpbGUnKTsKICAgICAgICBpZiAoIXRp +bGUpIHJldHVybjsKICAgICAgICBkcmFnSWQgPSB0aWxlLmdldEF0dHJpYnV0ZSgnZGF0YS10aWxl +LWlkJyk7CiAgICAgICAgdGlsZS5jbGFzc0xpc3QuYWRkKCdzbC1kcmFnZ2luZycpOwogICAgICAg +IGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7CiAgICAgICAgdHJ5IHsgZS5k +YXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC9wbGFpbicsIGRyYWdJZCk7IH0gY2F0Y2ggKF8pIHt9 +CiAgICB9KTsKICAgIHJhc3Rlci5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgZnVuY3Rpb24o +KXsKICAgICAgICByYXN0ZXIucXVlcnlTZWxlY3RvckFsbCgnLnNsLXRpbGUnKS5mb3JFYWNoKGZ1 +bmN0aW9uKHQpeyB0LmNsYXNzTGlzdC5yZW1vdmUoJ3NsLWRyYWdnaW5nJywgJ3NsLWRyb3Atemll +bCcpOyB9KTsKICAgIH0pOwogICAgcmFzdGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywg +ZnVuY3Rpb24oZSl7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHZhciB0aWxl +ID0gZS50YXJnZXQuY2xvc2VzdCgnLnNsLXRpbGUnKTsKICAgICAgICByYXN0ZXIucXVlcnlTZWxl +Y3RvckFsbCgnLnNsLWRyb3AtemllbCcpLmZvckVhY2goZnVuY3Rpb24odCl7IHQuY2xhc3NMaXN0 +LnJlbW92ZSgnc2wtZHJvcC16aWVsJyk7IH0pOwogICAgICAgIGlmICh0aWxlICYmIHRpbGUuZ2V0 +QXR0cmlidXRlKCdkYXRhLXRpbGUtaWQnKSAhPT0gZHJhZ0lkKSB0aWxlLmNsYXNzTGlzdC5hZGQo +J3NsLWRyb3AtemllbCcpOwogICAgfSk7CiAgICByYXN0ZXIuYWRkRXZlbnRMaXN0ZW5lcignZHJv +cCcsIGZ1bmN0aW9uKGUpewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICB2YXIg +emllbCA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5zbC10aWxlJyk7CiAgICAgICAgaWYgKCF6aWVsIHx8 +ICFkcmFnSWQgfHwgemllbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGlsZS1pZCcpID09PSBkcmFnSWQp +IHsgZHJhZ0lkID0gbnVsbDsgcmV0dXJuOyB9CiAgICAgICAgdmFyIHppZWxJZCA9IHppZWwuZ2V0 +QXR0cmlidXRlKCdkYXRhLXRpbGUtaWQnKTsKICAgICAgICB2YXIgdm9uSWR4ID0gX3Jhc3Rlci5m +aW5kSW5kZXgoZnVuY3Rpb24oeCl7IHJldHVybiB4LmlkID09PSBkcmFnSWQ7IH0pOwogICAgICAg +IHZhciBiaXNJZHggPSBfcmFzdGVyLmZpbmRJbmRleChmdW5jdGlvbih4KXsgcmV0dXJuIHguaWQg +PT09IHppZWxJZDsgfSk7CiAgICAgICAgaWYgKHZvbklkeCA8IDAgfHwgYmlzSWR4IDwgMCkgeyBk +cmFnSWQgPSBudWxsOyByZXR1cm47IH0KICAgICAgICB2YXIgbW92ZWQgPSBfcmFzdGVyLnNwbGlj +ZSh2b25JZHgsIDEpWzBdOwogICAgICAgIC8vIE5hY2ggRW50ZmVybmVuIGdnZi4gWmllbGluZGV4 +IGtvcnJpZ2llcmVuLgogICAgICAgIGJpc0lkeCA9IF9yYXN0ZXIuZmluZEluZGV4KGZ1bmN0aW9u +KHgpeyByZXR1cm4geC5pZCA9PT0gemllbElkOyB9KTsKICAgICAgICBfcmFzdGVyLnNwbGljZShi +aXNJZHgsIDAsIG1vdmVkKTsKICAgICAgICBkcmFnSWQgPSBudWxsOwogICAgICAgIF9wZXJzaXN0 +aWVyZW4oKS50aGVuKGZ1bmN0aW9uKCl7IHN0YXRpc3Rpa0xheW91dFJlbmRlcm4oKTsgfSk7CiAg +ICB9KTsKfQo= ### FILE: js/admin_statistik_builder.js | 30494 Ly8gPT09IGFkbWluX3N0YXRpc3Rpa19idWlsZGVyLmpzID09PQovLyBTdGF0aXN0aWstQnVpbGRl ciBpbSBBZG1pbiAoVGFiICJTdGF0aXN0aWstQnVpbGRlciIsIHVudGVyIFN0YXRpc3Rpay1MYXlv @@ -14283,339 +14291,337 @@ YW1pdCBpbW1lciBhdWYgZGVyIFBsYW51bmdzYW5zaWNodAogICAgLy8gYW4sIHdhZWhyZW5kIGVp biBJbi1UYWItUmVmcmVzaCBkaWUgQW5zaWNodCBoYWVsdC4KICAgIHRyeSB7IHNlc3Npb25TdG9y YWdlLnNldEl0ZW0oJ3ZpMy5ha3RpdmVBbnNpY2h0JywgbmFtZSk7IH0gY2F0Y2ggKGUpIHsgLyog aWdub3JlICovIH0KfQo= -### FILE: js/hinweise.js | 19061 -Ly8gPT09IGhpbndlaXNlLmpzID09PQovLyBJbi1BcHAtSGlud2Vpcy1TeXN0ZW0gKEJhbm5lciBv -YmVuICsgQmFkZ2UgYW0gVXNlci1OYW1lbiArIE1vZGFsLVNlaXRlKS4KLy8KLy8gRXJzZXR6dCBz -ZWl0IDIwMjYtMDUtMjAgYWxsZSBSb3V0aW5lLW1haWx0by1UcmlnZ2VyIChLcmFua21lbGR1bmcs -Ci8vIElkZW50aXRhZXRzLUFlbmRlcnVuZywgQmFja3VwLVJlc3RvcmUsIFBsYW51bmctUmVzZXQs -IFJvbGxlbi1BZW5kZXJ1bmcKLy8gb2huZSBWZXJhbnR3b3J0dW5ncy1VZWJlcmdhbmcpLiBTaWNo -dGJhciBudXIgZnVlciBTdXBlclVzZXIgKyBHZXNhbXQtCi8vIHZlcmFudHdvcnRsaWNoZS4KLy8K -Ly8gRGF0ZW4ga29tbWVuIHZvbSBTZXJ2ZXIgKC9hcGkvaGlud2Vpc2UpLiBQcm8tVXNlci1MZXNl -c3RhdHVzIGxpZWd0Ci8vIGluIGRhdGEvaGlud2Vpc2UuanNvbiwgQmFubmVyLURpc21pc3MgbGFl -dWZ0IGNsaWVudC1zZWl0aWcgcGVyCi8vIHNlc3Npb25TdG9yYWdlIChrb21tdCBiZWkgUmVsb2Fk -IG1pdCBuZXVlbSBIaW53ZWlzIHdpZWRlcikuCgppbXBvcnQgeyBaIH0gZnJvbSAnLi9jb3JlX3N0 -YXRlLmpzJzsKaW1wb3J0IHsgYXBpLCBhcGlQb3N0IH0gZnJvbSAnLi9jb3JlX2FwaS5qcyc7Cmlt -cG9ydCB7IGVzY2FwZUhUTUwsIGVzY2FwZUF0dHIsIGRhdHVtRm9ybWF0REUgfSBmcm9tICcuL2Nv -cmVfdXRpbC5qcyc7CmltcG9ydCB7IG1vZGFsWmVpZ2VuLCBtb2RhbFNjaGxpZXNzZW4sIHRvYXN0 -LCBiZXN0YWV0aWdlbiB9IGZyb20gJy4vdWlfZGlhbG9nLmpzJzsKaW1wb3J0IHsgdGFnRGV0YWls -TW9kYWxaZWlnZW4gfSBmcm9tICcuL2Jlc2V0enVuZy5qcyc7Cgp2YXIgQkFOTkVSX0RJU01JU1Nf -S0VZID0gJ2hpbndlaXNfYmFubmVyX2Rpc21pc3NlZF9pZHMnOwoKLy8gTGVzYmFyZSBCZXplaWNo -bnVuZ2VuIHBybyBUeXAuIFdpcmQgaW0gQmFubmVyLVRleHQgdW5kIGluIGRlcgovLyBNb2RhbC1U -YWJlbGxlIHZlcndlbmRldC4KdmFyIFRZUF9MQUJFTCA9IHsKICAgIGlkZW50aXRhZXRfZ2VhZW5k -ZXJ0OiAgICAnSWRlbnRpdMOkdCBnZcOkbmRlcnQnLAogICAgcm9sbGVfZ2VhZW5kZXJ0OiAgICAg -ICAgICdSb2xsZSBnZcOkbmRlcnQnLAogICAgYmFja3VwX3dpZWRlcmhlcmdlc3RlbGx0OidCYWNr -dXAgd2llZGVyaGVyZ2VzdGVsbHQnLAogICAgcGxhbnVuZ19yZXNldDogICAgICAgICAgICdQbGFu -dW5nIHp1csO8Y2tnZXNldHp0JywKICAgIGtyYW5rbWVsZHVuZzogICAgICAgICAgICAnS3Jhbmtt -ZWxkdW5nJywKICAgIHBlcnNvbl9uZXU6ICAgICAgICAgICAgICAnUGVyc29uIG5ldSBhbmdlbGVn -dCcsCiAgICBwZXJzb25faW5ha3RpdjogICAgICAgICAgJ1BlcnNvbiBpbmFrdGl2IGdlc2V0enQn -LAogICAgZ2VidXJ0c3RhZzogICAgICAgICAgICAgICdHZWJ1cnRzdGFnJywKICAgIHNjaGljaHRf -ZWRpdF9uYWhlOiAgICAgICAnU2NoaWNodC3DhG5kZXJ1bmcgbmFoZSBhbSBEYXR1bScKfTsKCi8v -IExvZXN0IGVpbmUgQXVzbG9lc2VyLUtlbm51bmcgKHouQi4gIlBPTElaRUlcTlcwNTU4MDEiIG9k -ZXIgIlBPTElaRUkvTlcwNTU4MDEiKQovLyBhdWYgZWluZW4gbGVzYmFyZW4gUGVyc29uZW5uYW1l -biBhdWYuIFN1Y2h0IHVlYmVyIHAubndLZW5udW5nIGluIGRlciB2b2xsZW4KLy8gUGVyc29uZW5s -aXN0ZSAoaW5rbC4gaW5ha3RpdmVyKS4gRmFlbGx0IGF1ZiBkaWUgcmVpbmUgS2VubnVuZyAob2hu -ZSBEb21hZW5lKQovLyB6dXJ1ZWNrLCB3ZW5uIGtlaW5lIFBlcnNvbiBwYXNzdCDigJQgc28gc3Rl -aHQgZGEgbmllIG1laHIgbnVyIFxEb21hZW5lXEtlbm51bmcuCmZ1bmN0aW9uIGF1c2xvZXNlckFu -emVpZ2UoYXVzbG9lc2VyKSB7CiAgICBpZiAoIWF1c2xvZXNlcikgcmV0dXJuICcnOwogICAgdmFy -IHJvaCA9IFN0cmluZyhhdXNsb2VzZXIpLnRyaW0oKTsKICAgIHZhciBrZW5udW5nID0gcm9oLnJl -cGxhY2UoL14uKltcXC9dLywgJycpLnRyaW0oKTsgICAgICAvLyBEb21hZW5lbi1QcmFlZml4IHdl -ZwogICAgdmFyIHppZWwgPSAoa2VubnVuZyB8fCByb2gpLnRvVXBwZXJDYXNlKCk7CiAgICB2YXIg -cGVyc29uZW4gPSAoWi5wbGFudW5nICYmIFoucGxhbnVuZy5wZXJzb25lbikgfHwgW107CiAgICBm -b3IgKHZhciBpID0gMDsgaSA8IHBlcnNvbmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHAg -PSBwZXJzb25lbltpXTsKICAgICAgICB2YXIgbmsgPSBTdHJpbmcocC5ud0tlbm51bmcgfHwgJycp -LnJlcGxhY2UoL14uKltcXC9dLywgJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpOwogICAgICAgIGlm -IChuayAmJiBuayA9PT0gemllbCkgewogICAgICAgICAgICB2YXIgbmFtZSA9IChwLm5hbWUgfHwg -JycpICsgKHAudm9ybmFtZSA/ICgnLCAnICsgcC52b3JuYW1lKSA6ICcnKTsKICAgICAgICAgICAg -dmFyIGRnID0gcC5kaWVuc3RncmFkID8gKHAuZGllbnN0Z3JhZCArICcgJykgOiAnJzsKICAgICAg -ICAgICAgcmV0dXJuIChkZyArIG5hbWUpLnRyaW0oKSB8fCAoa2VubnVuZyB8fCByb2gpOwogICAg -ICAgIH0KICAgIH0KICAgIHJldHVybiBrZW5udW5nIHx8IHJvaDsKfQoKLy8gQWt0dWVsbGVyIFVz -ZXIgaXN0IFNVIG9kZXIgR2VzYW10dmVyYW50d29ydGxpY2g/IEhpbndlaXNlIHNpbmQgbnVyCi8v -IGZ1ZXIgZGllc2VuIEVtcGZhZW5nZXJrcmVpcyBzaWNodGJhci4KZXhwb3J0IGZ1bmN0aW9uIGhp -bndlaXNlU2ljaHRiYXIoKSB7CiAgICB2YXIgciA9IFoucmVjaHRlIHx8IHt9OwogICAgcmV0dXJu -ICEhKHIuaXN0U3VwZXJVc2VyIHx8IHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpOwp9CgovLyBF -aW5lIE1pbmktTG9naWsgZnVlciBkZW4gQmFubmVyLURpc21pc3M6IFVzZXIga2xpY2t0IGRhcyBC -YW5uZXIgd2VnLAovLyBtZXJrZW4gd2lyIHVucyBkaWUgYWt0dWVsbCBhbmdlemVpZ3RlbiBJRHMg -aW4gc2Vzc2lvblN0b3JhZ2UuIEVyc3QKLy8gd2VubiBlaW4gTkVVRVIgSGlud2VpcyBkYXp1a29t -bXQsIHRhdWNodCBkYXMgQmFubmVyIHdpZWRlciBhdWYuCmZ1bmN0aW9uIGRpc21pc3NlZElkc0xl -c2VuKCkgewogICAgdHJ5IHsKICAgICAgICB2YXIgcmF3ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRl -bShCQU5ORVJfRElTTUlTU19LRVkpOwogICAgICAgIGlmICghcmF3KSByZXR1cm4gW107CiAgICAg -ICAgdmFyIGFyciA9IEpTT04ucGFyc2UocmF3KTsKICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJh -eShhcnIpID8gYXJyIDogW107CiAgICB9IGNhdGNoIChlKSB7IHJldHVybiBbXTsgfQp9CmZ1bmN0 -aW9uIGRpc21pc3NlZElkc1NjaHJlaWJlbihpZHMpIHsKICAgIHRyeSB7IHNlc3Npb25TdG9yYWdl -LnNldEl0ZW0oQkFOTkVSX0RJU01JU1NfS0VZLCBKU09OLnN0cmluZ2lmeShpZHMpKTsgfSBjYXRj -aCAoZSkge30KfQpmdW5jdGlvbiBhbGxlQWt0dWVsbGVuSWRzR2VzZWhlbigpIHsKICAgIHZhciBo -aW4gPSBaLmhpbndlaXNlIHx8IFtdOwogICAgaWYgKGhpbi5sZW5ndGggPT09IDApIHJldHVybiB0 -cnVlOwogICAgdmFyIGdlcyA9IGRpc21pc3NlZElkc0xlc2VuKCk7CiAgICBmb3IgKHZhciBpID0g -MDsgaSA8IGhpbi5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChnZXMuaW5kZXhPZihoaW5baV0u -aWQpIDwgMCkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCi8vIEhvbHQg -ZGllIG9mZmVuZW4gSGlud2Vpc2Ugdm9tIFNlcnZlci4gTGllZmVydCBpbW1lciBlaW4gUHJvbWlz -ZSwKLy8gZGFtaXQgZGVyIEF1ZnJ1ZmVyIC50aGVuIGFuaGFlbmdlbiBrYW5uLgpleHBvcnQgZnVu -Y3Rpb24gaGlud2Vpc2VMYWRlbigpIHsKICAgIGlmICghaGlud2Vpc2VTaWNodGJhcigpKSB7CiAg -ICAgICAgWi5oaW53ZWlzZSA9IFtdOwogICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10p -OwogICAgfQogICAgcmV0dXJuIGFwaSgnL2FwaS9oaW53ZWlzZScpLnRoZW4oZnVuY3Rpb24ocikg -ewogICAgICAgIFouaGlud2Vpc2UgPSAociAmJiByLmhpbndlaXNlKSA/IHIuaGlud2Vpc2UgOiBb -XTsKICAgICAgICByZXR1cm4gWi5oaW53ZWlzZTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsK -ICAgICAgICAvLyBCZWkgTmV0endlcmtmZWhsZXIgc3RpbGxzY2h3ZWlnZW5kIGxlZXIgbGFzc2Vu -IOKAlCBCYW5uZXIgZGFyZgogICAgICAgIC8vIG5pY2h0IGF1cyBWZXJzZWhlbiAiYWxsZXMgb2th -eSIgc3VnZ2VyaWVyZW4sIGRlc2hhbGIgYmVoYWx0ZW4KICAgICAgICAvLyB3aXIgZGVuIHZvcmhl -cmlnZW4gU3RhbmQuIENvbnNvbGUuZXJyb3IgZnVlciBEZWJ1Z2dpbmcuCiAgICAgICAgaWYgKHdp -bmRvdy5jb25zb2xlKSBjb25zb2xlLmVycm9yKCdoaW53ZWlzZUxhZGVuOicsIGUpOwogICAgICAg -IHJldHVybiBaLmhpbndlaXNlIHx8IFtdOwogICAgfSk7Cn0KCi8vIFJlbmRlcnQgQmFubmVyICsg -QmFkZ2UuIElkZW1wb3RlbnQ7IGJlaSBqZWRlbSBIaW53ZWlzZS1VcGRhdGUgYXVmcnVmZW4uCmV4 -cG9ydCBmdW5jdGlvbiBoaW53ZWlzZUFuemVpZ2VBa3R1YWxpc2llcmVuKCkgewogICAgaGlud2Vp -c2VCYWRnZVJlbmRlcm4oKTsKICAgIGhpbndlaXNlQmFubmVyUmVuZGVybigpOwp9CgpleHBvcnQg -ZnVuY3Rpb24gaGlud2Vpc2VCYWRnZVJlbmRlcm4oKSB7CiAgICB2YXIgZWwgPSBkb2N1bWVudC5n -ZXRFbGVtZW50QnlJZCgnaGlud2Vpcy1iYWRnZScpOwogICAgaWYgKCFlbCkgcmV0dXJuOwogICAg -dmFyIGhpbiA9IFouaGlud2Vpc2UgfHwgW107CiAgICBpZiAoIWhpbndlaXNlU2ljaHRiYXIoKSB8 -fCBoaW4ubGVuZ3RoID09PSAwKSB7CiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgndmVyc3RlY2t0 -Jyk7CiAgICAgICAgZWwudGV4dENvbnRlbnQgPSAnJzsKICAgICAgICByZXR1cm47CiAgICB9CiAg -ICBlbC5jbGFzc0xpc3QucmVtb3ZlKCd2ZXJzdGVja3QnKTsKICAgIGVsLnRleHRDb250ZW50ID0g -U3RyaW5nKGhpbi5sZW5ndGgpOwogICAgZWwudGl0bGUgPSBoaW4ubGVuZ3RoICsgJyBvZmZlbmUg -SGlud2VpcycgKyAoaGluLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2UnKSArICcg4oCUIEtsaWNrIHp1 -bSBBbnplaWdlbic7Cn0KCmV4cG9ydCBmdW5jdGlvbiBoaW53ZWlzZUJhbm5lclJlbmRlcm4oKSB7 -CiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGlud2Vpcy1iYW5uZXInKTsK -ICAgIGlmICghZWwpIHJldHVybjsKICAgIHZhciBoaW4gPSBaLmhpbndlaXNlIHx8IFtdOwogICAg -aWYgKCFoaW53ZWlzZVNpY2h0YmFyKCkgfHwgaGluLmxlbmd0aCA9PT0gMCB8fCBhbGxlQWt0dWVs -bGVuSWRzR2VzZWhlbigpKSB7CiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgndmVyc3RlY2t0Jyk7 -CiAgICAgICAgZWwuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZWwu -Y2xhc3NMaXN0LnJlbW92ZSgndmVyc3RlY2t0Jyk7CiAgICB2YXIgdHh0ID0gJ0R1IGhhc3QgJyAr -IGhpbi5sZW5ndGggKyAnIG5ldWUgSGlud2VpcycgKyAoaGluLmxlbmd0aCA9PT0gMSA/ICcnIDog -J2UnKSArICcuJzsKICAgIGVsLmlubmVySFRNTCA9CiAgICAgICAgJzxzcGFuIGNsYXNzPSJoaW53 -ZWlzLWJhbm5lci10ZXh0Ij4nICsgZXNjYXBlSFRNTCh0eHQpICsgJzwvc3Bhbj4nICsKICAgICAg -ICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hZXIgYnRuLWtsZWlu -IiBpZD0iaGlud2Vpcy1iYW5uZXItYW56ZWlnZW4iPkFuemVpZ2VuPC9idXR0b24+JyArCiAgICAg -ICAgJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iaGlud2Vpcy1iYW5uZXItc2NobGllc3Nl -biIgaWQ9ImhpbndlaXMtYmFubmVyLWRpc21pc3MiIGFyaWEtbGFiZWw9IkJhbm5lciBhdXNibGVu -ZGVuIiB0aXRsZT0iQmFubmVyIGJpcyB6dW0gbsOkY2hzdGVuIG5ldWVuIEhpbndlaXMgYXVzYmxl -bmRlbiI+w5c8L2J1dHRvbj4nOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpbndlaXMt -YmFubmVyLWFuemVpZ2VuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsK -ICAgICAgICBoaW53ZWlzZU1vZGFsT2VmZm5lbigpOwogICAgfSk7CiAgICBkb2N1bWVudC5nZXRF -bGVtZW50QnlJZCgnaGlud2Vpcy1iYW5uZXItZGlzbWlzcycpLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns -aWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGlkcyA9IGhpbi5tYXAoZnVuY3Rpb24oaCkg -eyByZXR1cm4gaC5pZDsgfSk7CiAgICAgICAgZGlzbWlzc2VkSWRzU2NocmVpYmVuKGlkcyk7CiAg -ICAgICAgaGlud2Vpc2VCYW5uZXJSZW5kZXJuKCk7CiAgICB9KTsKfQoKLy8gRm9ybWF0aWVydCBk -ZW4gS29udGV4dCBlaW5lcyBIaW53ZWlzZXMgbGVzYmFyIChlaW5lIGt1cnplIGRldXRzY2hlCi8v -IEJlc2NocmVpYnVuZykuIFBybyBUeXAgYW5nZXBhc3N0LCBnZW5lcmlzY2hlciBGYWxsYmFjayB6 -ZWlndCBrZXk9dmFsdWUuCmZ1bmN0aW9uIGtvbnRleHRGb3JtYXQoZWludHJhZykgewogICAgdmFy -IGsgPSBlaW50cmFnLmtvbnRleHQgfHwge307CiAgICB2YXIgdCA9IGVpbnRyYWcudHlwOwogICAg -dmFyIHA7CiAgICBpZiAodCA9PT0gJ2lkZW50aXRhZXRfZ2VhZW5kZXJ0JykgewogICAgICAgIHJl -dHVybiAnUGVyc29uIDxzdHJvbmc+JyArIGVzY2FwZUhUTUwoay5wZXJzb25fbmFtZSB8fCAoJyMn -ICsgay5wZXJzb25faWQpKSArICc8L3N0cm9uZz46IEZlbGQgPGVtPicgKwogICAgICAgICAgICBl -c2NhcGVIVE1MKGsuZmVsZCB8fCAnPycpICsgJzwvZW0+ICZuYnNwOzxzcGFuIHN0eWxlPSJjb2xv -cjp2YXIoLS10ZXh0LW11dGVkKSI+JyArCiAgICAgICAgICAgIGVzY2FwZUhUTUwoay5hbHRlcl93 -ZXJ0IHx8ICcobGVlciknKSArICcgJnJhcnI7ICcgKyBlc2NhcGVIVE1MKGsubmV1ZXJfd2VydCB8 -fCAnKGxlZXIpJykgKyAnPC9zcGFuPic7CiAgICB9CiAgICBpZiAodCA9PT0gJ3JvbGxlX2dlYWVu -ZGVydCcpIHsKICAgICAgICByZXR1cm4gJ1JvbGxlIDxzdHJvbmc+JyArIGVzY2FwZUhUTUwoay5y -b2xsZSB8fCAnPycpICsgJzwvc3Ryb25nPiBiZWkgPHN0cm9uZz4nICsKICAgICAgICAgICAgZXNj -YXBlSFRNTChrLnBlcnNvbl9uYW1lIHx8IGsubndLZW5udW5nIHx8ICc/JykgKyAnPC9zdHJvbmc+ -OiAnICsKICAgICAgICAgICAgZXNjYXBlSFRNTChrLnJpY2h0dW5nIHx8IChrLmFsdCArICcgJnJh -cnI7ICcgKyBrLm5ldSkgfHwgJycpOwogICAgfQogICAgaWYgKHQgPT09ICdiYWNrdXBfd2llZGVy -aGVyZ2VzdGVsbHQnKSB7CiAgICAgICAgcmV0dXJuICdCYWNrdXAgPHN0cm9uZz4nICsgZXNjYXBl -SFRNTChrLmJhY2t1cCB8fCAnPycpICsgJzwvc3Ryb25nPiB3aWVkZXJoZXJnZXN0ZWxsdC4nOwog -ICAgfQogICAgaWYgKHQgPT09ICdwbGFudW5nX3Jlc2V0JykgewogICAgICAgIHJldHVybiAnUGxh -bnVuZyB3dXJkZSB6dXLDvGNrZ2VzZXR6dCcgKyAoay5hbnphaGwgPyAnICgnICsgay5hbnphaGwg -KyAnIEVpbnRyw6RnZSkuJyA6ICcuJyk7CiAgICB9CiAgICBpZiAodCA9PT0gJ2tyYW5rbWVsZHVu -ZycpIHsKICAgICAgICBwID0gZXNjYXBlSFRNTChrLnBlcnNvbl9uYW1lIHx8ICgnIycgKyBrLnBl -cnNvbl9pZCkpOwogICAgICAgIHZhciBkID0gay5kYXR1bSA/IGRhdHVtRm9ybWF0REUoay5kYXR1 -bSkgOiAnPyc7CiAgICAgICAgdmFyIHNjID0gay5zY2hpY2h0Q29kZSA/ICcgKCcgKyBlc2NhcGVI -VE1MKGsuc2NoaWNodENvZGUpICsgJyknIDogJyc7CiAgICAgICAgcmV0dXJuICc8c3Ryb25nPicg -KyBwICsgJzwvc3Ryb25nPiBrcmFuayBhbSA8c3Ryb25nPicgKyBlc2NhcGVIVE1MKGQpICsgJzwv -c3Ryb25nPicgKyBzYzsKICAgIH0KICAgIGlmICh0ID09PSAncGVyc29uX25ldScpIHsKICAgICAg -ICByZXR1cm4gJ05ldWUgUGVyc29uOiA8c3Ryb25nPicgKyBlc2NhcGVIVE1MKGsucGVyc29uX25h -bWUgfHwgJz8nKSArICc8L3N0cm9uZz4nOwogICAgfQogICAgaWYgKHQgPT09ICdwZXJzb25faW5h -a3RpdicpIHsKICAgICAgICByZXR1cm4gJ1BlcnNvbiA8c3Ryb25nPicgKyBlc2NhcGVIVE1MKGsu -cGVyc29uX25hbWUgfHwgJz8nKSArICc8L3N0cm9uZz4gaXN0IG5pY2h0IG1laHIgYWt0aXYuJzsK -ICAgIH0KICAgIGlmICh0ID09PSAnZ2VidXJ0c3RhZycpIHsKICAgICAgICByZXR1cm4gJ0dlYnVy -dHN0YWc6IDxzdHJvbmc+JyArIGVzY2FwZUhUTUwoay5wZXJzb25fbmFtZSB8fCAnPycpICsgJzwv -c3Ryb25nPiBhbSAnICsgZXNjYXBlSFRNTChrLmRhdHVtIHx8ICc/Jyk7CiAgICB9CiAgICBpZiAo -dCA9PT0gJ3NjaGljaHRfZWRpdF9uYWhlJykgewogICAgICAgIHJldHVybiAnU2NoaWNodC3DhG5k -ZXJ1bmcgYW0gPHN0cm9uZz4nICsgZXNjYXBlSFRNTChrLmRhdHVtIHx8ICc/JykgKyAnPC9zdHJv -bmc+IGbDvHIgPHN0cm9uZz4nICsKICAgICAgICAgICAgZXNjYXBlSFRNTChrLnBlcnNvbl9uYW1l -IHx8ICgnIycgKyBrLnBlcnNvbl9pZCkpICsgJzwvc3Ryb25nPic7CiAgICB9CiAgICAvLyBHZW5l -cmlzY2hlciBGYWxsYmFjawogICAgdmFyIHBhaXJzID0gW107CiAgICBPYmplY3Qua2V5cyhrKS5m -b3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgICAgIHBhaXJzLnB1c2goZXNjYXBlSFRNTChrZXkp -ICsgJz0nICsgZXNjYXBlSFRNTChTdHJpbmcoa1trZXldKSkpOwogICAgfSk7CiAgICByZXR1cm4g -cGFpcnMuam9pbignLCAnKSB8fCAnPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtbXV0ZWQp -Ij4oa2VpbiBLb250ZXh0KTwvc3Bhbj4nOwp9CgpmdW5jdGlvbiB6ZWl0Rm9ybWF0KGlzbykgewog -ICAgaWYgKCFpc28pIHJldHVybiAnJzsKICAgIHRyeSB7CiAgICAgICAgdmFyIGQgPSBuZXcgRGF0 -ZShpc28pOwogICAgICAgIHZhciBkZCA9IFN0cmluZyhkLmdldERhdGUoKSkucGFkU3RhcnQoMiwg -JzAnKTsKICAgICAgICB2YXIgbW0gPSBTdHJpbmcoZC5nZXRNb250aCgpICsgMSkucGFkU3RhcnQo -MiwgJzAnKTsKICAgICAgICB2YXIgaGggPSBTdHJpbmcoZC5nZXRIb3VycygpKS5wYWRTdGFydCgy -LCAnMCcpOwogICAgICAgIHZhciBtaSA9IFN0cmluZyhkLmdldE1pbnV0ZXMoKSkucGFkU3RhcnQo -MiwgJzAnKTsKICAgICAgICByZXR1cm4gZGQgKyAnLicgKyBtbSArICcuICcgKyBoaCArICc6JyAr -IG1pOwogICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gaXNvOyB9Cn0KCi8vIE9lZmZuZXQgZWluIE1v -ZGFsIG1pdCBkZXIgSGlud2Vpcy1MaXN0ZS4gUHJvIEVpbnRyYWc6IFR5cCwgWmVpdCwKLy8gQXVz -bG9lc2VyLCBLb250ZXh0LCAiVmVyc3RhbmRlbiItQnV0dG9uLiBLcmFua21lbGR1bmdlbiBiZWtv -bW1lbgovLyB6dXNhZXR6bGljaCBlaW5lbiBCdXR0b24gIkthbmRpZGF0ZW4gYW5zY2hyZWliZW4i -IChQaGFzZSA2IHdpcmVkKS4KZXhwb3J0IGZ1bmN0aW9uIGhpbndlaXNlTW9kYWxPZWZmbmVuKCkg -ewogICAgaWYgKCFoaW53ZWlzZVNpY2h0YmFyKCkpIHJldHVybjsKICAgIHZhciBoaW4gPSBaLmhp -bndlaXNlIHx8IFtdOwogICAgaWYgKGhpbi5sZW5ndGggPT09IDApIHsKICAgICAgICB0b2FzdCgn -S2VpbmUgb2ZmZW5lbiBIaW53ZWlzZS4nLCAnaW5mbycpOwogICAgICAgIHJldHVybjsKICAgIH0K -ICAgIHZhciByb3dzID0gaGluLm1hcChmdW5jdGlvbihoKSB7CiAgICAgICAgdmFyIHR5cExhYmVs -ID0gVFlQX0xBQkVMW2gudHlwXSB8fCBoLnR5cDsKICAgICAgICB2YXIgY3R4ID0ga29udGV4dEZv -cm1hdChoKTsKICAgICAgICB2YXIga3JCdG4gPSAnJzsKICAgICAgICBpZiAoaC50eXAgPT09ICdr -cmFua21lbGR1bmcnKSB7CiAgICAgICAgICAgIC8vIFBoYXNlIDYgd2lyaW5nOiBkZXJ6ZWl0IG51 -ciBlaW4gU3R1Yiwgc2NocmVpYnQgaW4gdG9hc3QuCiAgICAgICAgICAgIGtyQnRuID0gJzxidXR0 -b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWsgYnRuLWtsZWluIiBkYXRhLWFrdGlv -bj0ia2FuZGlkYXRlbiIgZGF0YS1pZD0iJyArIGguaWQgKwogICAgICAgICAgICAgICAgJyIgdGl0 -bGU9IkthbmRpZGF0ZW4gZsO8ciBkaWUgYXVzZ2VmYWxsZW5lIFNjaGljaHQgYW5zY2hyZWliZW4i -PkthbmRpZGF0ZW4gYW5zY2hyZWliZW48L2J1dHRvbj4nOwogICAgICAgIH0KICAgICAgICByZXR1 -cm4gJzx0ciBkYXRhLWhpbndlaXMtaWQ9IicgKyBoLmlkICsgJyI+JyArCiAgICAgICAgICAgICc8 -dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO3doaXRlLXNw -YWNlOm5vd3JhcCI+JyArIGVzY2FwZUhUTUwoemVpdEZvcm1hdChoLmVyc3RlbGx0QW0pKSArICc8 -L3RkPicgKwogICAgICAgICAgICAnPHRkPjxzdHJvbmc+JyArIGVzY2FwZUhUTUwodHlwTGFiZWwp -ICsgJzwvc3Ryb25nPjwvdGQ+JyArCiAgICAgICAgICAgICc8dGQgc3R5bGU9ImZvbnQtc2l6ZTox -MXB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpIiB0aXRsZT0iJyArIGVzY2FwZUF0dHIoaC5hdXNs -b2VzZXIgfHwgJycpICsgJyI+JyArIGVzY2FwZUhUTUwoYXVzbG9lc2VyQW56ZWlnZShoLmF1c2xv -ZXNlcikpICsgJzwvdGQ+JyArCiAgICAgICAgICAgICc8dGQ+JyArIGN0eCArICc8L3RkPicgKwog -ICAgICAgICAgICAnPHRkIHN0eWxlPSJ3aGl0ZS1zcGFjZTpub3dyYXAiPjxkaXYgc3R5bGU9ImRp -c3BsYXk6ZmxleDtnYXA6NnB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZCI+JyArCiAgICAgICAg -ICAgICAgICBrckJ0biArCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNs -YXNzPSJidG4gYnRuLWVyZm9sZyBidG4ta2xlaW4iIGRhdGEtYWt0aW9uPSJrZW5udG5pcyIgZGF0 -YS1pZD0iJyArIGguaWQgKyAnIj5WZXJzdGFuZGVuPC9idXR0b24+JyArCiAgICAgICAgICAgICc8 -L2Rpdj48L3RkPicgKwogICAgICAgICc8L3RyPic7CiAgICB9KS5qb2luKCcnKTsKICAgIHZhciBr -b2VycGVyID0KICAgICAgICAnPHAgc3R5bGU9Im1hcmdpbjowIDAgMTJweDtjb2xvcjp2YXIoLS10 -ZXh0LW11dGVkKSI+T2ZmZW5lIEhpbndlaXNlIGbDvHIgU3VwZXJVc2VyIHVuZCBHZXNhbXR2ZXJh -bnR3b3J0bGljaGUuIE1pdCA8ZW0+VmVyc3RhbmRlbjwvZW0+IHZlcnNjaHdpbmRldCBlaW4gZWlu -emVsbmVyIEVpbnRyYWcgYXVzIGRlaW5lciBMaXN0ZTsgaW0gTG9nYnVjaCBibGVpYnQgZXIgZXJo -YWx0ZW4uPC9wPicgKwogICAgICAgICc8dGFibGUgY2xhc3M9ImFkbWluLXRhYmVsbGUgaGlud2Vp -cy1tb2RhbC10YWJlbGxlIj4nICsKICAgICAgICAgICAgJzx0aGVhZD48dHI+JyArCiAgICAgICAg -ICAgICAgICAnPHRoIHN0eWxlPSJ3aWR0aDo5MHB4Ij5XYW5uPC90aD4nICsKICAgICAgICAgICAg -ICAgICc8dGggc3R5bGU9IndpZHRoOjE2MHB4Ij5UeXA8L3RoPicgKwogICAgICAgICAgICAgICAg -Jzx0aCBzdHlsZT0id2lkdGg6MTUwcHgiPkF1c2dlbMO2c3Qgdm9uPC90aD4nICsKICAgICAgICAg -ICAgICAgICc8dGg+RGV0YWlsczwvdGg+JyArCiAgICAgICAgICAgICAgICAnPHRoIHN0eWxlPSJ3 -aWR0aDoyNDBweDt0ZXh0LWFsaWduOnJpZ2h0Ij5Ba3Rpb248L3RoPicgKwogICAgICAgICAgICAn -PC90cj48L3RoZWFkPicgKwogICAgICAgICAgICAnPHRib2R5PicgKyByb3dzICsgJzwvdGJvZHk+ -JyArCiAgICAgICAgJzwvdGFibGU+JzsKICAgIC8vIEJlaSBtZWhyZXJlbiBIaW53ZWlzZW4genVz -YWV0emxpY2ggZWluIFNhbW1lbC1BYm5pY2tlbiBhbmJpZXRlbiDigJQgZGllCiAgICAvLyBlaW56 -ZWxuZSBLZW5udG5pc25haG1lIHBybyBaZWlsZSBibGVpYnQgdW52ZXJhZW5kZXJ0IGVyaGFsdGVu -LgogICAgdmFyIGZ1c3MgPQogICAgICAgIChoaW4ubGVuZ3RoID4gMSA/ICc8YnV0dG9uIHR5cGU9 -ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZXJmb2xnIiBpZD0iaGlud2Vpcy1hbGxlLWtlbm50bmlz -Ij5BbGxlIHp1ciBLZW5udG5pcyBuZWhtZW48L2J1dHRvbj4nIDogJycpICsKICAgICAgICAnPGJ1 -dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlayIgaWQ9ImhpbndlaXMtbW9kYWwt -c2NobGllc3NlbiI+U2NobGllw59lbjwvYnV0dG9uPic7CiAgICBtb2RhbFplaWdlbignSGlud2Vp -c2UgKCcgKyBoaW4ubGVuZ3RoICsgJyknLCBrb2VycGVyLCBmdXNzLCBudWxsLCBudWxsLCB7IHJl -aW5lckRpYWxvZzogdHJ1ZSB9KTsKICAgIC8vIFN0YW5kYXJkYnJlaXRlICg2MjAgcHgpIGlzdCBo -aWVyIHp1IGVuZyDigJQgVGFiZWxsZSBicmF1Y2h0IGRpZSBncm9zc2UKICAgIC8vIFZhcmlhbnRl -IChhbmFsb2cgRS1NYWlsLVZvcmxhZ2VuLU1vZGFsKS4KICAgIHZhciBtaSA9IGRvY3VtZW50LnF1 -ZXJ5U2VsZWN0b3IoJyNtb2RhbC1vdmVybGF5IC5tb2RhbC1pbmhhbHQnKTsKICAgIGlmIChtaSkg -bWkuY2xhc3NMaXN0LmFkZCgnbW9kYWwtaW5oYWx0LWdyb3NzJyk7CiAgICBkb2N1bWVudC5nZXRF -bGVtZW50QnlJZCgnaGlud2Vpcy1tb2RhbC1zY2hsaWVzc2VuJykuYWRkRXZlbnRMaXN0ZW5lcign -Y2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICBtb2RhbFNjaGxpZXNzZW4odHJ1ZSk7CiAgICB9 -KTsKICAgIHZhciBhbGxlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpbndlaXMtYWxs -ZS1rZW5udG5pcycpOwogICAgaWYgKGFsbGVCdG4pIGFsbGVCdG4uYWRkRXZlbnRMaXN0ZW5lcign -Y2xpY2snLCBoaW53ZWlzZUFsbGVLZW5udG5pc25laG1lbik7CiAgICAvLyBBY3Rpb24tQnV0dG9u -cyBpbiBkZXIgVGFiZWxsZSBkZWxlZ2llcmVuCiAgICB2YXIgdGJvZHkgPSBkb2N1bWVudC5xdWVy -eVNlbGVjdG9yKCcuaGlud2Vpcy1tb2RhbC10YWJlbGxlIHRib2R5Jyk7CiAgICBpZiAodGJvZHkp -IHRib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgIHZh -ciBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCdidXR0b25bZGF0YS1ha3Rpb25dJyk7CiAgICAgICAg -aWYgKCFidG4pIHJldHVybjsKICAgICAgICB2YXIgaWQgPSBwYXJzZUludChidG4uZ2V0QXR0cmli -dXRlKCdkYXRhLWlkJyksIDEwKTsKICAgICAgICB2YXIgYWt0aW9uID0gYnRuLmdldEF0dHJpYnV0 -ZSgnZGF0YS1ha3Rpb24nKTsKICAgICAgICBpZiAoYWt0aW9uID09PSAna2VubnRuaXMnKSB7CiAg -ICAgICAgICAgIGhpbndlaXNLZW5udG5pc25laG1lbihpZCk7CiAgICAgICAgfSBlbHNlIGlmIChh -a3Rpb24gPT09ICdrYW5kaWRhdGVuJykgewogICAgICAgICAgICAvLyBQaGFzZSA2ICgyMDI2LTA1 -LTIxKTogYXVzIGRlbSBLcmFua21lbGR1bmdzLUhpbndlaXMgZGlyZWt0IGlucwogICAgICAgICAg -ICAvLyBUYWctRGV0YWlsLU1vZGFsIHNwcmluZ2VuLiBEZXIgZG9ydCB2b3JoYW5kZW5lIFNjaGlj -aHQtQmxvY2sKICAgICAgICAgICAgLy8gKEZydWVoL1NwYWV0L05hY2h0KSB6ZWlndCBhdXRvbWF0 -aXNjaCBkZW4gIkthbmRpZGF0ZW4gYW5zY2hyZWliZW4iLQogICAgICAgICAgICAvLyBCdXR0b24g -YmVpIDwyIFBlcnNvbmVuLgogICAgICAgICAgICB2YXIgaCA9IChaLmhpbndlaXNlIHx8IFtdKS5m -aW5kKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHguaWQgPT09IGlkOyB9KTsKICAgICAgICAgICAgaWYg -KCFoIHx8ICFoLmtvbnRleHQgfHwgIWgua29udGV4dC5kYXR1bSkgewogICAgICAgICAgICAgICAg -dG9hc3QoJ0hpbndlaXMgaGF0IGtlaW4gRGF0dW0gaGludGVybGVndC4nLCAnd2FybnVuZycpOwog -ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1vZGFsU2No -bGllc3Nlbih0cnVlKTsKICAgICAgICAgICAgdGFnRGV0YWlsTW9kYWxaZWlnZW4oaC5rb250ZXh0 -LmRhdHVtKTsKICAgICAgICB9CiAgICB9KTsKfQoKLy8gU1UtSGlud2Vpc2UtUHJvdG9rb2xsIChQ -aGFzZSA3LCAyMDI2LTA1LTIxKS4gVGFiZWxsZSBhbGxlciBha3RpdmVuCi8vIEhpbndlaXNlIG1p -dCBFbXBmYWVuZ2VyLUxlc2VzdGF0dXMuIE51ciBmdWVyIFN1cGVyVXNlciB6dWdhZW5nbGljaC4K -Ly8gRmlsdGVyIG5hY2ggVHlwIHVuZCBEYXR1bXMtUmFuZ2Ugd2VyZGVuIGNsaWVudC1zZWl0aWcg -YW5nZXdlbmRldC4KZXhwb3J0IGZ1bmN0aW9uIGhpbndlaXNlUHJvdG9rb2xsUmVuZGVybigpIHsK -ICAgIHZhciB0Ym9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoaW53ZWlzZS1wcm90b2tv -bGwtdGJvZHknKTsKICAgIGlmICghdGJvZHkpIHJldHVybjsKICAgIHZhciByZWNodGUgPSBaLnJl -Y2h0ZSB8fCB7fTsKICAgIGlmICghcmVjaHRlLmlzdFN1cGVyVXNlcikgewogICAgICAgIHRib2R5 -LmlubmVySFRNTCA9ICc8dHI+PHRkIGNvbHNwYW49IjUiIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0 -LW11dGVkKTt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjE2cHgiPk51ciBmw7xyIFN1cGVyVXNl -ciBzaWNodGJhci48L3RkPjwvdHI+JzsKICAgICAgICByZXR1cm47CiAgICB9CiAgICB0Ym9keS5p -bm5lckhUTUwgPSAnPHRyPjx0ZCBjb2xzcGFuPSI1IiBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1t -dXRlZCk7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoxNnB4Ij5MYWRlIOKApjwvdGQ+PC90cj4n -OwogICAgYXBpKCcvYXBpL2hpbndlaXNlL3VlYmVyc2ljaHQnKS50aGVuKGZ1bmN0aW9uKHIpIHsK -ICAgICAgICB2YXIgYWxsZSA9IChyICYmIHIuaGlud2Vpc2UpID8gci5oaW53ZWlzZSA6IFtdOwog -ICAgICAgIHZhciBmaWx0ZXJUeXAgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hwLWZpbHRl -ci10eXAnKSB8fCB7fSkudmFsdWUgfHwgJyc7CiAgICAgICAgdmFyIGZpbHRlclZvbiA9IChkb2N1 -bWVudC5nZXRFbGVtZW50QnlJZCgnaHAtZmlsdGVyLXZvbicpIHx8IHt9KS52YWx1ZSB8fCAnJzsK -ICAgICAgICB2YXIgZmlsdGVyQmlzID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdocC1maWx0 -ZXItYmlzJykgfHwge30pLnZhbHVlIHx8ICcnOwogICAgICAgIHZhciBnZWZpbHRlcnQgPSBhbGxl -LmZpbHRlcihmdW5jdGlvbihoKSB7CiAgICAgICAgICAgIGlmIChmaWx0ZXJUeXAgJiYgaC50eXAg -IT09IGZpbHRlclR5cCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB2YXIgZCA9IChoLmVyc3Rl -bGx0QW0gfHwgJycpLnNsaWNlKDAsIDEwKTsKICAgICAgICAgICAgaWYgKGZpbHRlclZvbiAmJiBk -IDwgZmlsdGVyVm9uKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGlmIChmaWx0ZXJCaXMgJiYg -ZCA+IGZpbHRlckJpcykgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg -ICAgICB9KTsKICAgICAgICBpZiAoZ2VmaWx0ZXJ0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgICAg -ICB0Ym9keS5pbm5lckhUTUwgPSAnPHRyPjx0ZCBjb2xzcGFuPSI1IiBzdHlsZT0iY29sb3I6dmFy -KC0tdGV4dC1tdXRlZCk7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoxNnB4Ij5LZWluZSBIaW53 -ZWlzZSBpbSBha3R1ZWxsZW4gRmlsdGVyLjwvdGQ+PC90cj4nOwogICAgICAgICAgICByZXR1cm47 -CiAgICAgICAgfQogICAgICAgIHRib2R5LmlubmVySFRNTCA9IGdlZmlsdGVydC5tYXAoZnVuY3Rp -b24oaCkgewogICAgICAgICAgICB2YXIgdHlwTGFiZWwgPSBUWVBfTEFCRUxbaC50eXBdIHx8IGgu -dHlwOwogICAgICAgICAgICB2YXIga24gPSBoLmtlbm50bmlzbmFobWVuIHx8IHt9OwogICAgICAg -ICAgICB2YXIgZW1wZkh0bWwgPSBPYmplY3Qua2V5cyhrbikubWFwKGZ1bmN0aW9uKGspIHsKICAg -ICAgICAgICAgICAgIHZhciB0cyA9IGtuW2tdOwogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9 -IHRzCiAgICAgICAgICAgICAgICAgICAgPyAnPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWZhcmJl -LWVyZm9sZykiPicgKyBlc2NhcGVIVE1MKHplaXRGb3JtYXQodHMpKSArICc8L3NwYW4+JwogICAg -ICAgICAgICAgICAgICAgIDogJzxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1mYXJiZS1mZWhsZXIp -O2ZvbnQtd2VpZ2h0OjYwMCI+b2ZmZW48L3NwYW4+JzsKICAgICAgICAgICAgICAgIHJldHVybiAn -PGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHgiPjxzdHJvbmc+JyArIGVzY2FwZUhUTUwoaykgKyAn -PC9zdHJvbmc+OiAnICsgc3RhdHVzICsgJzwvZGl2Pic7CiAgICAgICAgICAgIH0pLmpvaW4oJycp -OwogICAgICAgICAgICByZXR1cm4gJzx0cj4nICsKICAgICAgICAgICAgICAgICc8dGQgc3R5bGU9 -ImZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO3doaXRlLXNwYWNlOm5vd3Jh -cCI+JyArIGVzY2FwZUhUTUwoemVpdEZvcm1hdChoLmVyc3RlbGx0QW0pKSArICc8L3RkPicgKwog -ICAgICAgICAgICAgICAgJzx0ZD48c3Ryb25nPicgKyBlc2NhcGVIVE1MKHR5cExhYmVsKSArICc8 -L3N0cm9uZz48L3RkPicgKwogICAgICAgICAgICAgICAgJzx0ZCBzdHlsZT0iZm9udC1zaXplOjEx -cHgiIHRpdGxlPSInICsgZXNjYXBlQXR0cihoLmF1c2xvZXNlciB8fCAnJykgKyAnIj4nICsgZXNj -YXBlSFRNTChhdXNsb2VzZXJBbnplaWdlKGguYXVzbG9lc2VyKSkgKyAnPC90ZD4nICsKICAgICAg -ICAgICAgICAgICc8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4Ij4nICsga29udGV4dEZvcm1hdCho -KSArICc8L3RkPicgKwogICAgICAgICAgICAgICAgJzx0ZD4nICsgZW1wZkh0bWwgKyAnPC90ZD4n -ICsKICAgICAgICAgICAgJzwvdHI+JzsKICAgICAgICB9KS5qb2luKCcnKTsKICAgIH0pLmNhdGNo -KGZ1bmN0aW9uKGUpIHsKICAgICAgICB0Ym9keS5pbm5lckhUTUwgPSAnPHRyPjx0ZCBjb2xzcGFu -PSI1IiBzdHlsZT0iY29sb3I6dmFyKC0tZmFyYmUtZmVobGVyKTtwYWRkaW5nOjE2cHgiPkZlaGxl -ciBiZWltIExhZGVuOiAnICsgZXNjYXBlSFRNTChlLm1lc3NhZ2UpICsgJzwvdGQ+PC90cj4nOwog -ICAgfSk7Cn0KCi8vIE1hcmtpZXJ0IGVpbmVuIEhpbndlaXMgYWxzIGdlbGVzZW4gKHNlcnZlci1z -ZWl0aWcpIHVuZCBlbnRmZXJudCBpaG4KLy8gYXVzIGRlciBsb2thbGVuIExpc3RlLiBXZW5uIGRp -ZSBMaXN0ZSBkYWR1cmNoIGxlZXIgd2lyZCwgc2NobGllc3N0Ci8vIHNpY2ggZGFzIE1vZGFsIHZv -biBhbGxlaW5lLgpleHBvcnQgZnVuY3Rpb24gaGlud2Vpc0tlbm50bmlzbmVobWVuKGlkKSB7CiAg -ICBhcGlQb3N0KCcvYXBpL2hpbndlaXNlLycgKyBpZCArICcva2VubnRuaXMnLCB7fSkudGhlbihm -dW5jdGlvbigpIHsKICAgICAgICBaLmhpbndlaXNlID0gKFouaGlud2Vpc2UgfHwgW10pLmZpbHRl -cihmdW5jdGlvbihoKSB7IHJldHVybiBoLmlkICE9PSBpZDsgfSk7CiAgICAgICAgLy8gQXVzIGRl -bSBNb2RhbCBkaWUgWmVpbGUgZW50ZmVybmVuCiAgICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LnF1 -ZXJ5U2VsZWN0b3IoJ3RyW2RhdGEtaGlud2Vpcy1pZD0iJyArIGlkICsgJyJdJyk7CiAgICAgICAg -aWYgKHJvdykgcm93LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocm93KTsKICAgICAgICBoaW53ZWlz -ZUFuemVpZ2VBa3R1YWxpc2llcmVuKCk7CiAgICAgICAgaWYgKFouaGlud2Vpc2UubGVuZ3RoID09 -PSAwKSB7CiAgICAgICAgICAgIG1vZGFsU2NobGllc3Nlbih0cnVlKTsKICAgICAgICAgICAgdG9h -c3QoJ0FsbGUgSGlud2Vpc2UgYWJnZWFyYmVpdGV0LicsICdlcmZvbGcnKTsKICAgICAgICB9CiAg -ICB9KS5jYXRjaChmdW5jdGlvbihlKSB7CiAgICAgICAgdG9hc3QoJ0ZlaGxlcjogJyArIGUubWVz -c2FnZSwgJ2ZlaGxlcicpOwogICAgfSk7Cn0KCi8vIE5pbW10IEFMTEUgYWt0dWVsbCBvZmZlbmVu -IEhpbndlaXNlIGF1ZiBlaW5tYWwgenVyIEtlbm50bmlzIChTYW1tZWwtQWt0aW9uCi8vIGltIE1v -ZGFsLCBudXIgYmVpID4xIEhpbndlaXMgYW5nZWJvdGVuKS4gRGllIGVpbnplbG5lIEtlbm50bmlz -bmFobWUgcHJvCi8vIFplaWxlIGJsZWlidCBkYXZvbiB1bmJlcnVlaHJ0LiBFcyBnaWJ0IHNlcnZl -ci1zZWl0aWcga2VpbmVuIEJ1bGstRW5kcG9pbnQg4oCUCi8vIGRhaGVyIE4gcGFyYWxsZWxlIFBP -U1RzOyB0ZWlsLWZlaGxnZXNjaGxhZ2VuZSBFaW50cmFlZ2UgYmxlaWJlbiBpbiBkZXIgTGlzdGUu -CmV4cG9ydCBmdW5jdGlvbiBoaW53ZWlzZUFsbGVLZW5udG5pc25laG1lbigpIHsKICAgIHZhciBp -ZHMgPSAoWi5oaW53ZWlzZSB8fCBbXSkubWFwKGZ1bmN0aW9uKGgpIHsgcmV0dXJuIGguaWQ7IH0p -OwogICAgaWYgKCFpZHMubGVuZ3RoKSByZXR1cm47CiAgICBiZXN0YWV0aWdlbignQWxsZSAnICsg -aWRzLmxlbmd0aCArICcgSGlud2Vpc2UgenVyIEtlbm50bmlzIG5laG1lbj9cblxuU2llIHZlcnNj -aHdpbmRlbiBhdXMgZGVpbmVyIExpc3RlIOKAlCBpbSBMb2didWNoIGJsZWliZW4gc2llIGVyaGFs -dGVuLicsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBmZWhsZXIgPSBbXTsKICAgICAgICBQcm9t -aXNlLmFsbChpZHMubWFwKGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgICAgIHJldHVybiBhcGlQb3N0 -KCcvYXBpL2hpbndlaXNlLycgKyBpZCArICcva2VubnRuaXMnLCB7fSkudGhlbihmdW5jdGlvbigp -IHsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd0cltk -YXRhLWhpbndlaXMtaWQ9IicgKyBpZCArICciXScpOwogICAgICAgICAgICAgICAgaWYgKHJvdyAm -JiByb3cucGFyZW50Tm9kZSkgcm93LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocm93KTsKICAgICAg -ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7IGZlaGxlci5wdXNoKGlkKTsgfSk7CiAgICAgICAg -fSkpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIFouaGlud2Vpc2UgPSAoWi5oaW53ZWlz -ZSB8fCBbXSkuZmlsdGVyKGZ1bmN0aW9uKGgpIHsgcmV0dXJuIGZlaGxlci5pbmRleE9mKGguaWQp -ID49IDA7IH0pOwogICAgICAgICAgICBoaW53ZWlzZUFuemVpZ2VBa3R1YWxpc2llcmVuKCk7CiAg -ICAgICAgICAgIGlmIChaLmhpbndlaXNlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAg -bW9kYWxTY2hsaWVzc2VuKHRydWUpOwogICAgICAgICAgICAgICAgdG9hc3QoJ0FsbGUgSGlud2Vp -c2UgenVyIEtlbm50bmlzIGdlbm9tbWVuLicsICdlcmZvbGcnKTsKICAgICAgICAgICAgfSBlbHNl -IHsKICAgICAgICAgICAgICAgIHRvYXN0KGZlaGxlci5sZW5ndGggKyAnIEhpbndlaXMoZSkga29u -bnRlbiBuaWNodCBnZXNwZWljaGVydCB3ZXJkZW4g4oCUIGJpdHRlIGVybmV1dCB2ZXJzdWNoZW4u -JywgJ3dhcm51bmcnKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSwgeyBqYVRleHQ6 -ICdBbGxlIGFibmlja2VuJyB9KTsKfQo= +### FILE: js/hinweise.js | 18931 +Ly8gPT09IGhpbndlaXNlLmpzID09PQovLyBJbi1BcHAtSGlud2Vpcy1TeXN0ZW0gKEJhZGdlIGFt +IFVzZXItTmFtZW4gKyBIaW53ZWlzLU1vZGFsKS4KLy8KLy8gRXJzZXR6dCBzZWl0IDIwMjYtMDUt +MjAgYWxsZSBSb3V0aW5lLW1haWx0by1UcmlnZ2VyIChLcmFua21lbGR1bmcsCi8vIElkZW50aXRh +ZXRzLUFlbmRlcnVuZywgQmFja3VwLVJlc3RvcmUsIFBsYW51bmctUmVzZXQsIFJvbGxlbi1BZW5k +ZXJ1bmcKLy8gb2huZSBWZXJhbnR3b3J0dW5ncy1VZWJlcmdhbmcpLiBTaWNodGJhciBudXIgZnVl +ciBTdXBlclVzZXIgKyBHZXNhbXQtCi8vIHZlcmFudHdvcnRsaWNoZS4KLy8KLy8gRGF0ZW4ga29t +bWVuIHZvbSBTZXJ2ZXIgKC9hcGkvaGlud2Vpc2UpLiBQcm8tVXNlci1MZXNlc3RhdHVzIGxpZWd0 +Ci8vIGluIGRhdGEvaGlud2Vpc2UuanNvbi4KLy8KLy8gVUktTW9kZWxsIChzZWl0IHYxLjQuNSk6 +IEtFSU4gcm90ZXIgSGVhZGVyLUJhbm5lciBtZWhyIChkZXIgbGFnIGltIEZsb3cKLy8gdWViZXIg +ZGVtIEhlYWRlciB1bmQgdmVyc2Nob2IgZGllIEhvZWhlbnJlY2hudW5nIGRlcyBQbGFudW5ncy1H +cmlkcywgc29kYXNzCi8vIGRpZSB1bnRlcnN0ZSBaZWlsZSBuaWNodCBtZWhyIGVycmVpY2hiYXIg +d2FyKS4gU3RhdHRkZXNzZW4gb2VmZm5ldCBzaWNoIGJlaW0KLy8gTG9naW4gYXV0b21hdGlzY2gg +ZWluIEhpbndlaXMtTW9kYWwgKGhpbndlaXNlQXV0b09lZmZuZW4pLiBXaXJkIGVzIGdlc2NobG9z +c2VuLwovLyBhdWZnZXNjaG9iZW4sIGJsZWliZW4gZGllIEhpbndlaXNlIG1pdCBkZW0gcm90ZW4g +WmFlaGxlci1CYWRnZSBhbSBOYW1lbiBzaWNodGJhcgovLyB1bmQgZGFzIE1vZGFsIG9lZmZuZXQg +c2ljaCBiZWltIG5hZWNoc3RlbiBMb2dpbiB2b24gc2VsYnN0IHdpZWRlci4KCmltcG9ydCB7IFog +fSBmcm9tICcuL2NvcmVfc3RhdGUuanMnOwppbXBvcnQgeyBhcGksIGFwaVBvc3QgfSBmcm9tICcu +L2NvcmVfYXBpLmpzJzsKaW1wb3J0IHsgZXNjYXBlSFRNTCwgZXNjYXBlQXR0ciwgZGF0dW1Gb3Jt +YXRERSB9IGZyb20gJy4vY29yZV91dGlsLmpzJzsKaW1wb3J0IHsgbW9kYWxaZWlnZW4sIG1vZGFs +U2NobGllc3NlbiwgdG9hc3QsIGJlc3RhZXRpZ2VuIH0gZnJvbSAnLi91aV9kaWFsb2cuanMnOwpp +bXBvcnQgeyB0YWdEZXRhaWxNb2RhbFplaWdlbiB9IGZyb20gJy4vYmVzZXR6dW5nLmpzJzsKCi8v +IExlc2JhcmUgQmV6ZWljaG51bmdlbiBwcm8gVHlwLiBXaXJkIGluIGRlciBNb2RhbC1UYWJlbGxl +IHZlcndlbmRldC4KdmFyIFRZUF9MQUJFTCA9IHsKICAgIGlkZW50aXRhZXRfZ2VhZW5kZXJ0OiAg +ICAnSWRlbnRpdMOkdCBnZcOkbmRlcnQnLAogICAgcm9sbGVfZ2VhZW5kZXJ0OiAgICAgICAgICdS +b2xsZSBnZcOkbmRlcnQnLAogICAgYmFja3VwX3dpZWRlcmhlcmdlc3RlbGx0OidCYWNrdXAgd2ll +ZGVyaGVyZ2VzdGVsbHQnLAogICAgcGxhbnVuZ19yZXNldDogICAgICAgICAgICdQbGFudW5nIHp1 +csO8Y2tnZXNldHp0JywKICAgIGtyYW5rbWVsZHVuZzogICAgICAgICAgICAnS3JhbmttZWxkdW5n +JywKICAgIHBlcnNvbl9uZXU6ICAgICAgICAgICAgICAnUGVyc29uIG5ldSBhbmdlbGVndCcsCiAg +ICBwZXJzb25faW5ha3RpdjogICAgICAgICAgJ1BlcnNvbiBpbmFrdGl2IGdlc2V0enQnLAogICAg +Z2VidXJ0c3RhZzogICAgICAgICAgICAgICdHZWJ1cnRzdGFnJywKICAgIHNjaGljaHRfZWRpdF9u +YWhlOiAgICAgICAnU2NoaWNodC3DhG5kZXJ1bmcgbmFoZSBhbSBEYXR1bScKfTsKCi8vIExvZXN0 +IGVpbmUgQXVzbG9lc2VyLUtlbm51bmcgKHouQi4gIlBPTElaRUlcTlcwNTU4MDEiIG9kZXIgIlBP +TElaRUkvTlcwNTU4MDEiKQovLyBhdWYgZWluZW4gbGVzYmFyZW4gUGVyc29uZW5uYW1lbiBhdWYu +IFN1Y2h0IHVlYmVyIHAubndLZW5udW5nIGluIGRlciB2b2xsZW4KLy8gUGVyc29uZW5saXN0ZSAo +aW5rbC4gaW5ha3RpdmVyKS4gRmFlbGx0IGF1ZiBkaWUgcmVpbmUgS2VubnVuZyAob2huZSBEb21h +ZW5lKQovLyB6dXJ1ZWNrLCB3ZW5uIGtlaW5lIFBlcnNvbiBwYXNzdCDigJQgc28gc3RlaHQgZGEg +bmllIG1laHIgbnVyIFxEb21hZW5lXEtlbm51bmcuCmZ1bmN0aW9uIGF1c2xvZXNlckFuemVpZ2Uo +YXVzbG9lc2VyKSB7CiAgICBpZiAoIWF1c2xvZXNlcikgcmV0dXJuICcnOwogICAgdmFyIHJvaCA9 +IFN0cmluZyhhdXNsb2VzZXIpLnRyaW0oKTsKICAgIHZhciBrZW5udW5nID0gcm9oLnJlcGxhY2Uo +L14uKltcXC9dLywgJycpLnRyaW0oKTsgICAgICAvLyBEb21hZW5lbi1QcmFlZml4IHdlZwogICAg +dmFyIHppZWwgPSAoa2VubnVuZyB8fCByb2gpLnRvVXBwZXJDYXNlKCk7CiAgICB2YXIgcGVyc29u +ZW4gPSAoWi5wbGFudW5nICYmIFoucGxhbnVuZy5wZXJzb25lbikgfHwgW107CiAgICBmb3IgKHZh +ciBpID0gMDsgaSA8IHBlcnNvbmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHAgPSBwZXJz +b25lbltpXTsKICAgICAgICB2YXIgbmsgPSBTdHJpbmcocC5ud0tlbm51bmcgfHwgJycpLnJlcGxh +Y2UoL14uKltcXC9dLywgJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpOwogICAgICAgIGlmIChuayAm +JiBuayA9PT0gemllbCkgewogICAgICAgICAgICB2YXIgbmFtZSA9IChwLm5hbWUgfHwgJycpICsg +KHAudm9ybmFtZSA/ICgnLCAnICsgcC52b3JuYW1lKSA6ICcnKTsKICAgICAgICAgICAgdmFyIGRn +ID0gcC5kaWVuc3RncmFkID8gKHAuZGllbnN0Z3JhZCArICcgJykgOiAnJzsKICAgICAgICAgICAg +cmV0dXJuIChkZyArIG5hbWUpLnRyaW0oKSB8fCAoa2VubnVuZyB8fCByb2gpOwogICAgICAgIH0K +ICAgIH0KICAgIHJldHVybiBrZW5udW5nIHx8IHJvaDsKfQoKLy8gQWt0dWVsbGVyIFVzZXIgaXN0 +IFNVIG9kZXIgR2VzYW10dmVyYW50d29ydGxpY2g/IEhpbndlaXNlIHNpbmQgbnVyCi8vIGZ1ZXIg +ZGllc2VuIEVtcGZhZW5nZXJrcmVpcyBzaWNodGJhci4KZXhwb3J0IGZ1bmN0aW9uIGhpbndlaXNl +U2ljaHRiYXIoKSB7CiAgICB2YXIgciA9IFoucmVjaHRlIHx8IHt9OwogICAgcmV0dXJuICEhKHIu +aXN0U3VwZXJVc2VyIHx8IHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpOwp9CgovLyBIb2x0IGRp +ZSBvZmZlbmVuIEhpbndlaXNlIHZvbSBTZXJ2ZXIuIExpZWZlcnQgaW1tZXIgZWluIFByb21pc2Us +Ci8vIGRhbWl0IGRlciBBdWZydWZlciAudGhlbiBhbmhhZW5nZW4ga2Fubi4KZXhwb3J0IGZ1bmN0 +aW9uIGhpbndlaXNlTGFkZW4oKSB7CiAgICBpZiAoIWhpbndlaXNlU2ljaHRiYXIoKSkgewogICAg +ICAgIFouaGlud2Vpc2UgPSBbXTsKICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTsK +ICAgIH0KICAgIHJldHVybiBhcGkoJy9hcGkvaGlud2Vpc2UnKS50aGVuKGZ1bmN0aW9uKHIpIHsK +ICAgICAgICBaLmhpbndlaXNlID0gKHIgJiYgci5oaW53ZWlzZSkgPyByLmhpbndlaXNlIDogW107 +CiAgICAgICAgcmV0dXJuIFouaGlud2Vpc2U7CiAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7CiAg +ICAgICAgLy8gQmVpIE5ldHp3ZXJrZmVobGVyIHN0aWxsc2Nod2VpZ2VuZCBsZWVyIGxhc3NlbiDi +gJQgZGVyIFphZWhsZXItQmFkZ2UKICAgICAgICAvLyBkYXJmIG5pY2h0IGF1cyBWZXJzZWhlbiAi +YWxsZXMgb2theSIgc3VnZ2VyaWVyZW4sIGRlc2hhbGIgYmVoYWx0ZW4KICAgICAgICAvLyB3aXIg +ZGVuIHZvcmhlcmlnZW4gU3RhbmQuIENvbnNvbGUuZXJyb3IgZnVlciBEZWJ1Z2dpbmcuCiAgICAg +ICAgaWYgKHdpbmRvdy5jb25zb2xlKSBjb25zb2xlLmVycm9yKCdoaW53ZWlzZUxhZGVuOicsIGUp +OwogICAgICAgIHJldHVybiBaLmhpbndlaXNlIHx8IFtdOwogICAgfSk7Cn0KCi8vIEFrdHVhbGlz +aWVydCBkaWUgQW56ZWlnZSAoWmFlaGxlci1CYWRnZSBhbSBOYW1lbikuIElkZW1wb3RlbnQ7IGJl +aSBqZWRlbQovLyBIaW53ZWlzZS1VcGRhdGUgYXVmcnVmZW4uIE9lZmZuZXQgYmV3dXNzdCBOSUNI +VCBkYXMgTW9kYWwg4oCUIGRhcyBwYXNzaWVydCBudXIKLy8gZWlubWFsaWcgYmVpbSBMb2dpbiB1 +ZWJlciBoaW53ZWlzZUF1dG9PZWZmbmVuKCkuCmV4cG9ydCBmdW5jdGlvbiBoaW53ZWlzZUFuemVp +Z2VBa3R1YWxpc2llcmVuKCkgewogICAgaGlud2Vpc2VCYWRnZVJlbmRlcm4oKTsKfQoKZXhwb3J0 +IGZ1bmN0aW9uIGhpbndlaXNlQmFkZ2VSZW5kZXJuKCkgewogICAgdmFyIGVsID0gZG9jdW1lbnQu +Z2V0RWxlbWVudEJ5SWQoJ2hpbndlaXMtYmFkZ2UnKTsKICAgIGlmICghZWwpIHJldHVybjsKICAg +IHZhciBoaW4gPSBaLmhpbndlaXNlIHx8IFtdOwogICAgaWYgKCFoaW53ZWlzZVNpY2h0YmFyKCkg +fHwgaGluLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3ZlcnN0ZWNr +dCcpOwogICAgICAgIGVsLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgcmV0dXJuOwogICAgfQog +ICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgndmVyc3RlY2t0Jyk7CiAgICBlbC50ZXh0Q29udGVudCA9 +IFN0cmluZyhoaW4ubGVuZ3RoKTsKICAgIGVsLnRpdGxlID0gaGluLmxlbmd0aCArICcgb2ZmZW5l +IEhpbndlaXMnICsgKGhpbi5sZW5ndGggPT09IDEgPyAnJyA6ICdlJykgKyAnIOKAlCBLbGljayB6 +dW0gQW56ZWlnZW4nOwp9CgovLyBCZWltIExvZ2luIGVpbm1hbCBhdXRvbWF0aXNjaCBkYXMgSGlu +d2Vpcy1Nb2RhbCBvZWZmbmVuIChtaXQga2xlaW5lcgovLyBWZXJ6b2VnZXJ1bmcsIGRhbWl0IGRl +ciBCZWdydWVzc3VuZ3MtVG9hc3Qgdm9yaGVyIHNpY2h0YmFyIGlzdCkuIE51ciwgd2VubgovLyBl +cyB1ZWJlcmhhdXB0IG9mZmVuZSBIaW53ZWlzZSBmdWVyIFNVL0dlc2FtdHZlcmFudHdvcnRsaWNo +ZSBnaWJ0LiBXaXJkIGRhcwovLyBNb2RhbCBhdWZnZXNjaG9iZW4vZ2VzY2hsb3NzZW4sIGJsZWli +ZW4gZGllIEhpbndlaXNlIGVyaGFsdGVuIHVuZCBkaWVzZXMKLy8gQXV0by1PZWZmbmVuIGdyZWlm +dCBiZWltIG5hZWNoc3RlbiBMb2dpbiBlcm5ldXQuCmV4cG9ydCBmdW5jdGlvbiBoaW53ZWlzZUF1 +dG9PZWZmbmVuKCkgewogICAgaWYgKCFoaW53ZWlzZVNpY2h0YmFyKCkpIHJldHVybjsKICAgIGlm +ICghKFouaGlud2Vpc2UgJiYgWi5oaW53ZWlzZS5sZW5ndGgpKSByZXR1cm47CiAgICBzZXRUaW1l +b3V0KGZ1bmN0aW9uKCkgewogICAgICAgIC8vIFN0YW5kIGthbm4gc2ljaCBpbiBkZXIgVmVyem9l +Z2VydW5nIGdlYWVuZGVydCBoYWJlbiAoU3luYykg4oCUIGVybmV1dCBwcnVlZmVuLgogICAgICAg +IGlmIChoaW53ZWlzZVNpY2h0YmFyKCkgJiYgWi5oaW53ZWlzZSAmJiBaLmhpbndlaXNlLmxlbmd0 +aCkgewogICAgICAgICAgICBoaW53ZWlzZU1vZGFsT2VmZm5lbigpOwogICAgICAgIH0KICAgIH0s +IDkwMCk7Cn0KCi8vIEZvcm1hdGllcnQgZGVuIEtvbnRleHQgZWluZXMgSGlud2Vpc2VzIGxlc2Jh +ciAoZWluZSBrdXJ6ZSBkZXV0c2NoZQovLyBCZXNjaHJlaWJ1bmcpLiBQcm8gVHlwIGFuZ2VwYXNz +dCwgZ2VuZXJpc2NoZXIgRmFsbGJhY2sgemVpZ3Qga2V5PXZhbHVlLgpmdW5jdGlvbiBrb250ZXh0 +Rm9ybWF0KGVpbnRyYWcpIHsKICAgIHZhciBrID0gZWludHJhZy5rb250ZXh0IHx8IHt9OwogICAg +dmFyIHQgPSBlaW50cmFnLnR5cDsKICAgIHZhciBwOwogICAgaWYgKHQgPT09ICdpZGVudGl0YWV0 +X2dlYWVuZGVydCcpIHsKICAgICAgICByZXR1cm4gJ1BlcnNvbiA8c3Ryb25nPicgKyBlc2NhcGVI +VE1MKGsucGVyc29uX25hbWUgfHwgKCcjJyArIGsucGVyc29uX2lkKSkgKyAnPC9zdHJvbmc+OiBG +ZWxkIDxlbT4nICsKICAgICAgICAgICAgZXNjYXBlSFRNTChrLmZlbGQgfHwgJz8nKSArICc8L2Vt +PiAmbmJzcDs8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tdGV4dC1tdXRlZCkiPicgKwogICAgICAg +ICAgICBlc2NhcGVIVE1MKGsuYWx0ZXJfd2VydCB8fCAnKGxlZXIpJykgKyAnICZyYXJyOyAnICsg +ZXNjYXBlSFRNTChrLm5ldWVyX3dlcnQgfHwgJyhsZWVyKScpICsgJzwvc3Bhbj4nOwogICAgfQog +ICAgaWYgKHQgPT09ICdyb2xsZV9nZWFlbmRlcnQnKSB7CiAgICAgICAgcmV0dXJuICdSb2xsZSA8 +c3Ryb25nPicgKyBlc2NhcGVIVE1MKGsucm9sbGUgfHwgJz8nKSArICc8L3N0cm9uZz4gYmVpIDxz +dHJvbmc+JyArCiAgICAgICAgICAgIGVzY2FwZUhUTUwoay5wZXJzb25fbmFtZSB8fCBrLm53S2Vu +bnVuZyB8fCAnPycpICsgJzwvc3Ryb25nPjogJyArCiAgICAgICAgICAgIGVzY2FwZUhUTUwoay5y +aWNodHVuZyB8fCAoay5hbHQgKyAnICZyYXJyOyAnICsgay5uZXUpIHx8ICcnKTsKICAgIH0KICAg +IGlmICh0ID09PSAnYmFja3VwX3dpZWRlcmhlcmdlc3RlbGx0JykgewogICAgICAgIHJldHVybiAn +QmFja3VwIDxzdHJvbmc+JyArIGVzY2FwZUhUTUwoay5iYWNrdXAgfHwgJz8nKSArICc8L3N0cm9u +Zz4gd2llZGVyaGVyZ2VzdGVsbHQuJzsKICAgIH0KICAgIGlmICh0ID09PSAncGxhbnVuZ19yZXNl +dCcpIHsKICAgICAgICByZXR1cm4gJ1BsYW51bmcgd3VyZGUgenVyw7xja2dlc2V0enQnICsgKGsu +YW56YWhsID8gJyAoJyArIGsuYW56YWhsICsgJyBFaW50csOkZ2UpLicgOiAnLicpOwogICAgfQog +ICAgaWYgKHQgPT09ICdrcmFua21lbGR1bmcnKSB7CiAgICAgICAgcCA9IGVzY2FwZUhUTUwoay5w +ZXJzb25fbmFtZSB8fCAoJyMnICsgay5wZXJzb25faWQpKTsKICAgICAgICB2YXIgZCA9IGsuZGF0 +dW0gPyBkYXR1bUZvcm1hdERFKGsuZGF0dW0pIDogJz8nOwogICAgICAgIHZhciBzYyA9IGsuc2No +aWNodENvZGUgPyAnICgnICsgZXNjYXBlSFRNTChrLnNjaGljaHRDb2RlKSArICcpJyA6ICcnOwog +ICAgICAgIHJldHVybiAnPHN0cm9uZz4nICsgcCArICc8L3N0cm9uZz4ga3JhbmsgYW0gPHN0cm9u +Zz4nICsgZXNjYXBlSFRNTChkKSArICc8L3N0cm9uZz4nICsgc2M7CiAgICB9CiAgICBpZiAodCA9 +PT0gJ3BlcnNvbl9uZXUnKSB7CiAgICAgICAgcmV0dXJuICdOZXVlIFBlcnNvbjogPHN0cm9uZz4n +ICsgZXNjYXBlSFRNTChrLnBlcnNvbl9uYW1lIHx8ICc/JykgKyAnPC9zdHJvbmc+JzsKICAgIH0K +ICAgIGlmICh0ID09PSAncGVyc29uX2luYWt0aXYnKSB7CiAgICAgICAgcmV0dXJuICdQZXJzb24g +PHN0cm9uZz4nICsgZXNjYXBlSFRNTChrLnBlcnNvbl9uYW1lIHx8ICc/JykgKyAnPC9zdHJvbmc+ +IGlzdCBuaWNodCBtZWhyIGFrdGl2Lic7CiAgICB9CiAgICBpZiAodCA9PT0gJ2dlYnVydHN0YWcn +KSB7CiAgICAgICAgcmV0dXJuICdHZWJ1cnRzdGFnOiA8c3Ryb25nPicgKyBlc2NhcGVIVE1MKGsu +cGVyc29uX25hbWUgfHwgJz8nKSArICc8L3N0cm9uZz4gYW0gJyArIGVzY2FwZUhUTUwoay5kYXR1 +bSB8fCAnPycpOwogICAgfQogICAgaWYgKHQgPT09ICdzY2hpY2h0X2VkaXRfbmFoZScpIHsKICAg +ICAgICByZXR1cm4gJ1NjaGljaHQtw4RuZGVydW5nIGFtIDxzdHJvbmc+JyArIGVzY2FwZUhUTUwo +ay5kYXR1bSB8fCAnPycpICsgJzwvc3Ryb25nPiBmw7xyIDxzdHJvbmc+JyArCiAgICAgICAgICAg +IGVzY2FwZUhUTUwoay5wZXJzb25fbmFtZSB8fCAoJyMnICsgay5wZXJzb25faWQpKSArICc8L3N0 +cm9uZz4nOwogICAgfQogICAgLy8gR2VuZXJpc2NoZXIgRmFsbGJhY2sKICAgIHZhciBwYWlycyA9 +IFtdOwogICAgT2JqZWN0LmtleXMoaykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgICBw +YWlycy5wdXNoKGVzY2FwZUhUTUwoa2V5KSArICc9JyArIGVzY2FwZUhUTUwoU3RyaW5nKGtba2V5 +XSkpKTsKICAgIH0pOwogICAgcmV0dXJuIHBhaXJzLmpvaW4oJywgJykgfHwgJzxzcGFuIHN0eWxl +PSJjb2xvcjp2YXIoLS10ZXh0LW11dGVkKSI+KGtlaW4gS29udGV4dCk8L3NwYW4+JzsKfQoKZnVu +Y3Rpb24gemVpdEZvcm1hdChpc28pIHsKICAgIGlmICghaXNvKSByZXR1cm4gJyc7CiAgICB0cnkg +ewogICAgICAgIHZhciBkID0gbmV3IERhdGUoaXNvKTsKICAgICAgICB2YXIgZGQgPSBTdHJpbmco +ZC5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICAgICAgdmFyIG1tID0gU3RyaW5nKGQu +Z2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICAgICAgdmFyIGhoID0gU3RyaW5n +KGQuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKTsKICAgICAgICB2YXIgbWkgPSBTdHJpbmco +ZC5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICAgICAgcmV0dXJuIGRkICsgJy4n +ICsgbW0gKyAnLiAnICsgaGggKyAnOicgKyBtaTsKICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGlz +bzsgfQp9CgovLyBPZWZmbmV0IGVpbiBNb2RhbCBtaXQgZGVyIEhpbndlaXMtTGlzdGUuIFBybyBF +aW50cmFnOiBUeXAsIFplaXQsCi8vIEF1c2xvZXNlciwgS29udGV4dCwgIlZlcnN0YW5kZW4iLUJ1 +dHRvbi4gS3JhbmttZWxkdW5nZW4gYmVrb21tZW4KLy8genVzYWV0emxpY2ggZWluZW4gQnV0dG9u +ICJLYW5kaWRhdGVuIGFuc2NocmVpYmVuIiAoUGhhc2UgNiB3aXJlZCkuCmV4cG9ydCBmdW5jdGlv +biBoaW53ZWlzZU1vZGFsT2VmZm5lbigpIHsKICAgIGlmICghaGlud2Vpc2VTaWNodGJhcigpKSBy +ZXR1cm47CiAgICB2YXIgaGluID0gWi5oaW53ZWlzZSB8fCBbXTsKICAgIGlmIChoaW4ubGVuZ3Ro +ID09PSAwKSB7CiAgICAgICAgdG9hc3QoJ0tlaW5lIG9mZmVuZW4gSGlud2Vpc2UuJywgJ2luZm8n +KTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgcm93cyA9IGhpbi5tYXAoZnVuY3Rpb24o +aCkgewogICAgICAgIHZhciB0eXBMYWJlbCA9IFRZUF9MQUJFTFtoLnR5cF0gfHwgaC50eXA7CiAg +ICAgICAgdmFyIGN0eCA9IGtvbnRleHRGb3JtYXQoaCk7CiAgICAgICAgdmFyIGtyQnRuID0gJyc7 +CiAgICAgICAgaWYgKGgudHlwID09PSAna3JhbmttZWxkdW5nJykgewogICAgICAgICAgICAvLyBQ +aGFzZSA2IHdpcmluZzogZGVyemVpdCBudXIgZWluIFN0dWIsIHNjaHJlaWJ0IGluIHRvYXN0Lgog +ICAgICAgICAgICBrckJ0biA9ICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4t +c2VrIGJ0bi1rbGVpbiIgZGF0YS1ha3Rpb249ImthbmRpZGF0ZW4iIGRhdGEtaWQ9IicgKyBoLmlk +ICsKICAgICAgICAgICAgICAgICciIHRpdGxlPSJLYW5kaWRhdGVuIGbDvHIgZGllIGF1c2dlZmFs +bGVuZSBTY2hpY2h0IGFuc2NocmVpYmVuIj5LYW5kaWRhdGVuIGFuc2NocmVpYmVuPC9idXR0b24+ +JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICc8dHIgZGF0YS1oaW53ZWlzLWlkPSInICsgaC5p +ZCArICciPicgKwogICAgICAgICAgICAnPHRkIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2 +YXIoLS10ZXh0LW11dGVkKTt3aGl0ZS1zcGFjZTpub3dyYXAiPicgKyBlc2NhcGVIVE1MKHplaXRG +b3JtYXQoaC5lcnN0ZWxsdEFtKSkgKyAnPC90ZD4nICsKICAgICAgICAgICAgJzx0ZD48c3Ryb25n +PicgKyBlc2NhcGVIVE1MKHR5cExhYmVsKSArICc8L3N0cm9uZz48L3RkPicgKwogICAgICAgICAg +ICAnPHRkIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKSIgdGl0 +bGU9IicgKyBlc2NhcGVBdHRyKGguYXVzbG9lc2VyIHx8ICcnKSArICciPicgKyBlc2NhcGVIVE1M +KGF1c2xvZXNlckFuemVpZ2UoaC5hdXNsb2VzZXIpKSArICc8L3RkPicgKwogICAgICAgICAgICAn +PHRkPicgKyBjdHggKyAnPC90ZD4nICsKICAgICAgICAgICAgJzx0ZCBzdHlsZT0id2hpdGUtc3Bh +Y2U6bm93cmFwIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjZweDtqdXN0aWZ5LWNvbnRl +bnQ6ZmxleC1lbmQiPicgKwogICAgICAgICAgICAgICAga3JCdG4gKwogICAgICAgICAgICAgICAg +JzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1lcmZvbGcgYnRuLWtsZWluIiBk +YXRhLWFrdGlvbj0ia2VubnRuaXMiIGRhdGEtaWQ9IicgKyBoLmlkICsgJyI+VmVyc3RhbmRlbjwv +YnV0dG9uPicgKwogICAgICAgICAgICAnPC9kaXY+PC90ZD4nICsKICAgICAgICAnPC90cj4nOwog +ICAgfSkuam9pbignJyk7CiAgICB2YXIga29lcnBlciA9CiAgICAgICAgJzxwIHN0eWxlPSJtYXJn +aW46MCAwIDEycHg7Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCkiPk9mZmVuZSBIaW53ZWlzZSBmw7xy +IFN1cGVyVXNlciB1bmQgR2VzYW10dmVyYW50d29ydGxpY2hlLiBNaXQgPGVtPlZlcnN0YW5kZW48 +L2VtPiB2ZXJzY2h3aW5kZXQgZWluIGVpbnplbG5lciBFaW50cmFnIGF1cyBkZWluZXIgTGlzdGU7 +IGltIExvZ2J1Y2ggYmxlaWJ0IGVyIGVyaGFsdGVuLiBNaXQgPGVtPkF1ZnNjaGllYmVuPC9lbT4g +YmxlaWJ0IGFsbGVzIG9mZmVuIChyb3RlciBaw6RobGVyIGFtIE5hbWVuKSB1bmQgZGllc2Ugw5xi +ZXJzaWNodCDDtmZmbmV0IHNpY2ggYmVpbSBuw6RjaHN0ZW4gTG9naW4gdm9uIHNlbGJzdCB3aWVk +ZXIuPC9wPicgKwogICAgICAgICc8dGFibGUgY2xhc3M9ImFkbWluLXRhYmVsbGUgaGlud2Vpcy1t +b2RhbC10YWJlbGxlIj4nICsKICAgICAgICAgICAgJzx0aGVhZD48dHI+JyArCiAgICAgICAgICAg +ICAgICAnPHRoIHN0eWxlPSJ3aWR0aDo5MHB4Ij5XYW5uPC90aD4nICsKICAgICAgICAgICAgICAg +ICc8dGggc3R5bGU9IndpZHRoOjE2MHB4Ij5UeXA8L3RoPicgKwogICAgICAgICAgICAgICAgJzx0 +aCBzdHlsZT0id2lkdGg6MTUwcHgiPkF1c2dlbMO2c3Qgdm9uPC90aD4nICsKICAgICAgICAgICAg +ICAgICc8dGg+RGV0YWlsczwvdGg+JyArCiAgICAgICAgICAgICAgICAnPHRoIHN0eWxlPSJ3aWR0 +aDoyNDBweDt0ZXh0LWFsaWduOnJpZ2h0Ij5Ba3Rpb248L3RoPicgKwogICAgICAgICAgICAnPC90 +cj48L3RoZWFkPicgKwogICAgICAgICAgICAnPHRib2R5PicgKyByb3dzICsgJzwvdGJvZHk+JyAr +CiAgICAgICAgJzwvdGFibGU+JzsKICAgIC8vIEJlaSBtZWhyZXJlbiBIaW53ZWlzZW4genVzYWV0 +emxpY2ggZWluIFNhbW1lbC1BYm5pY2tlbiBhbmJpZXRlbiDigJQgZGllCiAgICAvLyBlaW56ZWxu +ZSBLZW5udG5pc25haG1lIHBybyBaZWlsZSBibGVpYnQgdW52ZXJhZW5kZXJ0IGVyaGFsdGVuLiAi +QXVmc2NoaWViZW4iCiAgICAvLyBzY2hsaWVzc3QgZGFzIE1vZGFsLCBvaG5lIGV0d2FzIGFienVu +aWNrZW46IGRpZSBIaW53ZWlzZSBibGVpYmVuIG1pdCBkZW0KICAgIC8vIHJvdGVuIFphZWhsZXIg +YW0gTmFtZW4gc2ljaHRiYXIgdW5kIGRhcyBNb2RhbCBvZWZmbmV0IHNpY2ggYmVpbSBuYWVjaHN0 +ZW4KICAgIC8vIExvZ2luIHZvbiBzZWxic3Qgd2llZGVyIChIb3Zlci1UaXRlbCArIGZsdWVjaHRp +Z2VyIFRvYXN0IGVya2xhZXJlbiBkYXMpLgogICAgdmFyIGZ1c3MgPQogICAgICAgIChoaW4ubGVu +Z3RoID4gMSA/ICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZXJmb2xnIiBp +ZD0iaGlud2Vpcy1hbGxlLWtlbm50bmlzIj5BbGxlIHp1ciBLZW5udG5pcyBuZWhtZW48L2J1dHRv +bj4nIDogJycpICsKICAgICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRu +LXNlayIgaWQ9ImhpbndlaXMtbW9kYWwtYXVmc2NoaWViZW4iICcgKwogICAgICAgICAgICAndGl0 +bGU9IkJsZWlidCBvZmZlbiAocm90ZXIgWsOkaGxlciBhbSBOYW1lbiBvYmVuIHJlY2h0cykgdW5k +IMO2ZmZuZXQgc2ljaCBiZWltIG7DpGNoc3RlbiBMb2dpbiBhdXRvbWF0aXNjaCB3aWVkZXIuIj5B +dWZzY2hpZWJlbjwvYnV0dG9uPic7CiAgICBtb2RhbFplaWdlbignSGlud2Vpc2UgKCcgKyBoaW4u +bGVuZ3RoICsgJyknLCBrb2VycGVyLCBmdXNzLCBudWxsLCBudWxsLCB7IHJlaW5lckRpYWxvZzog +dHJ1ZSB9KTsKICAgIC8vIFN0YW5kYXJkYnJlaXRlICg2MjAgcHgpIGlzdCBoaWVyIHp1IGVuZyDi +gJQgVGFiZWxsZSBicmF1Y2h0IGRpZSBncm9zc2UKICAgIC8vIFZhcmlhbnRlIChhbmFsb2cgRS1N +YWlsLVZvcmxhZ2VuLU1vZGFsKS4KICAgIHZhciBtaSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io +JyNtb2RhbC1vdmVybGF5IC5tb2RhbC1pbmhhbHQnKTsKICAgIGlmIChtaSkgbWkuY2xhc3NMaXN0 +LmFkZCgnbW9kYWwtaW5oYWx0LWdyb3NzJyk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn +aGlud2Vpcy1tb2RhbC1hdWZzY2hpZWJlbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVu +Y3Rpb24oKSB7CiAgICAgICAgbW9kYWxTY2hsaWVzc2VuKHRydWUpOwogICAgICAgIC8vIEZsdWVj +aHRpZ2VyIEhpbndlaXM6IG51ciB3ZW5uIHdpcmtsaWNoIG5vY2ggZXR3YXMgb2ZmZW4gaXN0Lgog +ICAgICAgIGlmIChaLmhpbndlaXNlICYmIFouaGlud2Vpc2UubGVuZ3RoKSB7CiAgICAgICAgICAg +IHRvYXN0KCdBdWZnZXNjaG9iZW4g4oCUIGRlciByb3RlIFrDpGhsZXIgYmxlaWJ0IGFtIE5hbWVu +LiBCZWltIG7DpGNoc3RlbiBMb2dpbiDDtmZmbmV0IHNpY2ggZGllc2Ugw5xiZXJzaWNodCB3aWVk +ZXIgdm9uIHNlbGJzdC4nLCAnaW5mbycpOwogICAgICAgIH0KICAgIH0pOwogICAgdmFyIGFsbGVC +dG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGlud2Vpcy1hbGxlLWtlbm50bmlzJyk7CiAg +ICBpZiAoYWxsZUJ0bikgYWxsZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhpbndlaXNl +QWxsZUtlbm50bmlzbmVobWVuKTsKICAgIC8vIEFjdGlvbi1CdXR0b25zIGluIGRlciBUYWJlbGxl +IGRlbGVnaWVyZW4KICAgIHZhciB0Ym9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oaW53 +ZWlzLW1vZGFsLXRhYmVsbGUgdGJvZHknKTsKICAgIGlmICh0Ym9keSkgdGJvZHkuYWRkRXZlbnRM +aXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGJ0biA9IGUudGFyZ2V0 +LmNsb3Nlc3QoJ2J1dHRvbltkYXRhLWFrdGlvbl0nKTsKICAgICAgICBpZiAoIWJ0bikgcmV0dXJu +OwogICAgICAgIHZhciBpZCA9IHBhcnNlSW50KGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKSwg +MTApOwogICAgICAgIHZhciBha3Rpb24gPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWFrdGlvbicp +OwogICAgICAgIGlmIChha3Rpb24gPT09ICdrZW5udG5pcycpIHsKICAgICAgICAgICAgaGlud2Vp +c0tlbm50bmlzbmVobWVuKGlkKTsKICAgICAgICB9IGVsc2UgaWYgKGFrdGlvbiA9PT0gJ2thbmRp +ZGF0ZW4nKSB7CiAgICAgICAgICAgIC8vIFBoYXNlIDYgKDIwMjYtMDUtMjEpOiBhdXMgZGVtIEty +YW5rbWVsZHVuZ3MtSGlud2VpcyBkaXJla3QgaW5zCiAgICAgICAgICAgIC8vIFRhZy1EZXRhaWwt +TW9kYWwgc3ByaW5nZW4uIERlciBkb3J0IHZvcmhhbmRlbmUgU2NoaWNodC1CbG9jawogICAgICAg +ICAgICAvLyAoRnJ1ZWgvU3BhZXQvTmFjaHQpIHplaWd0IGF1dG9tYXRpc2NoIGRlbiAiS2FuZGlk +YXRlbiBhbnNjaHJlaWJlbiItCiAgICAgICAgICAgIC8vIEJ1dHRvbiBiZWkgPDIgUGVyc29uZW4u +CiAgICAgICAgICAgIHZhciBoID0gKFouaGlud2Vpc2UgfHwgW10pLmZpbmQoZnVuY3Rpb24oeCkg +eyByZXR1cm4geC5pZCA9PT0gaWQ7IH0pOwogICAgICAgICAgICBpZiAoIWggfHwgIWgua29udGV4 +dCB8fCAhaC5rb250ZXh0LmRhdHVtKSB7CiAgICAgICAgICAgICAgICB0b2FzdCgnSGlud2VpcyBo +YXQga2VpbiBEYXR1bSBoaW50ZXJsZWd0LicsICd3YXJudW5nJyk7CiAgICAgICAgICAgICAgICBy +ZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbW9kYWxTY2hsaWVzc2VuKHRydWUpOwog +ICAgICAgICAgICB0YWdEZXRhaWxNb2RhbFplaWdlbihoLmtvbnRleHQuZGF0dW0pOwogICAgICAg +IH0KICAgIH0pOwp9CgovLyBTVS1IaW53ZWlzZS1Qcm90b2tvbGwgKFBoYXNlIDcsIDIwMjYtMDUt +MjEpLiBUYWJlbGxlIGFsbGVyIGFrdGl2ZW4KLy8gSGlud2Vpc2UgbWl0IEVtcGZhZW5nZXItTGVz +ZXN0YXR1cy4gTnVyIGZ1ZXIgU3VwZXJVc2VyIHp1Z2FlbmdsaWNoLgovLyBGaWx0ZXIgbmFjaCBU +eXAgdW5kIERhdHVtcy1SYW5nZSB3ZXJkZW4gY2xpZW50LXNlaXRpZyBhbmdld2VuZGV0LgpleHBv +cnQgZnVuY3Rpb24gaGlud2Vpc2VQcm90b2tvbGxSZW5kZXJuKCkgewogICAgdmFyIHRib2R5ID0g +ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpbndlaXNlLXByb3Rva29sbC10Ym9keScpOwogICAg +aWYgKCF0Ym9keSkgcmV0dXJuOwogICAgdmFyIHJlY2h0ZSA9IFoucmVjaHRlIHx8IHt9OwogICAg +aWYgKCFyZWNodGUuaXN0U3VwZXJVc2VyKSB7CiAgICAgICAgdGJvZHkuaW5uZXJIVE1MID0gJzx0 +cj48dGQgY29sc3Bhbj0iNSIgc3R5bGU9ImNvbG9yOnZhcigtLXRleHQtbXV0ZWQpO3RleHQtYWxp +Z246Y2VudGVyO3BhZGRpbmc6MTZweCI+TnVyIGbDvHIgU3VwZXJVc2VyIHNpY2h0YmFyLjwvdGQ+ +PC90cj4nOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIHRib2R5LmlubmVySFRNTCA9ICc8dHI+ +PHRkIGNvbHNwYW49IjUiIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTt0ZXh0LWFsaWdu +OmNlbnRlcjtwYWRkaW5nOjE2cHgiPkxhZGUg4oCmPC90ZD48L3RyPic7CiAgICBhcGkoJy9hcGkv +aGlud2Vpc2UvdWViZXJzaWNodCcpLnRoZW4oZnVuY3Rpb24ocikgewogICAgICAgIHZhciBhbGxl +ID0gKHIgJiYgci5oaW53ZWlzZSkgPyByLmhpbndlaXNlIDogW107CiAgICAgICAgdmFyIGZpbHRl +clR5cCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHAtZmlsdGVyLXR5cCcpIHx8IHt9KS52 +YWx1ZSB8fCAnJzsKICAgICAgICB2YXIgZmlsdGVyVm9uID0gKGRvY3VtZW50LmdldEVsZW1lbnRC +eUlkKCdocC1maWx0ZXItdm9uJykgfHwge30pLnZhbHVlIHx8ICcnOwogICAgICAgIHZhciBmaWx0 +ZXJCaXMgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hwLWZpbHRlci1iaXMnKSB8fCB7fSku +dmFsdWUgfHwgJyc7CiAgICAgICAgdmFyIGdlZmlsdGVydCA9IGFsbGUuZmlsdGVyKGZ1bmN0aW9u +KGgpIHsKICAgICAgICAgICAgaWYgKGZpbHRlclR5cCAmJiBoLnR5cCAhPT0gZmlsdGVyVHlwKSBy +ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHZhciBkID0gKGguZXJzdGVsbHRBbSB8fCAnJykuc2xp +Y2UoMCwgMTApOwogICAgICAgICAgICBpZiAoZmlsdGVyVm9uICYmIGQgPCBmaWx0ZXJWb24pIHJl +dHVybiBmYWxzZTsKICAgICAgICAgICAgaWYgKGZpbHRlckJpcyAmJiBkID4gZmlsdGVyQmlzKSBy +ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pOwogICAgICAg +IGlmIChnZWZpbHRlcnQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHRib2R5LmlubmVySFRN +TCA9ICc8dHI+PHRkIGNvbHNwYW49IjUiIHN0eWxlPSJjb2xvcjp2YXIoLS10ZXh0LW11dGVkKTt0 +ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjE2cHgiPktlaW5lIEhpbndlaXNlIGltIGFrdHVlbGxl +biBGaWx0ZXIuPC90ZD48L3RyPic7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAg +ICAgdGJvZHkuaW5uZXJIVE1MID0gZ2VmaWx0ZXJ0Lm1hcChmdW5jdGlvbihoKSB7CiAgICAgICAg +ICAgIHZhciB0eXBMYWJlbCA9IFRZUF9MQUJFTFtoLnR5cF0gfHwgaC50eXA7CiAgICAgICAgICAg +IHZhciBrbiA9IGgua2VubnRuaXNuYWhtZW4gfHwge307CiAgICAgICAgICAgIHZhciBlbXBmSHRt +bCA9IE9iamVjdC5rZXlzKGtuKS5tYXAoZnVuY3Rpb24oaykgewogICAgICAgICAgICAgICAgdmFy +IHRzID0ga25ba107CiAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gdHMKICAgICAgICAgICAg +ICAgICAgICA/ICc8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZmFyYmUtZXJmb2xnKSI+JyArIGVz +Y2FwZUhUTUwoemVpdEZvcm1hdCh0cykpICsgJzwvc3Bhbj4nCiAgICAgICAgICAgICAgICAgICAg +OiAnPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWZhcmJlLWZlaGxlcik7Zm9udC13ZWlnaHQ6NjAw +Ij5vZmZlbjwvc3Bhbj4nOwogICAgICAgICAgICAgICAgcmV0dXJuICc8ZGl2IHN0eWxlPSJmb250 +LXNpemU6MTFweCI+PHN0cm9uZz4nICsgZXNjYXBlSFRNTChrKSArICc8L3N0cm9uZz46ICcgKyBz +dGF0dXMgKyAnPC9kaXY+JzsKICAgICAgICAgICAgfSkuam9pbignJyk7CiAgICAgICAgICAgIHJl +dHVybiAnPHRyPicgKwogICAgICAgICAgICAgICAgJzx0ZCBzdHlsZT0iZm9udC1zaXplOjExcHg7 +Y29sb3I6dmFyKC0tdGV4dC1tdXRlZCk7d2hpdGUtc3BhY2U6bm93cmFwIj4nICsgZXNjYXBlSFRN +TCh6ZWl0Rm9ybWF0KGguZXJzdGVsbHRBbSkpICsgJzwvdGQ+JyArCiAgICAgICAgICAgICAgICAn +PHRkPjxzdHJvbmc+JyArIGVzY2FwZUhUTUwodHlwTGFiZWwpICsgJzwvc3Ryb25nPjwvdGQ+JyAr +CiAgICAgICAgICAgICAgICAnPHRkIHN0eWxlPSJmb250LXNpemU6MTFweCIgdGl0bGU9IicgKyBl +c2NhcGVBdHRyKGguYXVzbG9lc2VyIHx8ICcnKSArICciPicgKyBlc2NhcGVIVE1MKGF1c2xvZXNl +ckFuemVpZ2UoaC5hdXNsb2VzZXIpKSArICc8L3RkPicgKwogICAgICAgICAgICAgICAgJzx0ZCBz +dHlsZT0iZm9udC1zaXplOjExcHgiPicgKyBrb250ZXh0Rm9ybWF0KGgpICsgJzwvdGQ+JyArCiAg +ICAgICAgICAgICAgICAnPHRkPicgKyBlbXBmSHRtbCArICc8L3RkPicgKwogICAgICAgICAgICAn +PC90cj4nOwogICAgICAgIH0pLmpvaW4oJycpOwogICAgfSkuY2F0Y2goZnVuY3Rpb24oZSkgewog +ICAgICAgIHRib2R5LmlubmVySFRNTCA9ICc8dHI+PHRkIGNvbHNwYW49IjUiIHN0eWxlPSJjb2xv +cjp2YXIoLS1mYXJiZS1mZWhsZXIpO3BhZGRpbmc6MTZweCI+RmVobGVyIGJlaW0gTGFkZW46ICcg +KyBlc2NhcGVIVE1MKGUubWVzc2FnZSkgKyAnPC90ZD48L3RyPic7CiAgICB9KTsKfQoKLy8gTWFy +a2llcnQgZWluZW4gSGlud2VpcyBhbHMgZ2VsZXNlbiAoc2VydmVyLXNlaXRpZykgdW5kIGVudGZl +cm50IGlobgovLyBhdXMgZGVyIGxva2FsZW4gTGlzdGUuIFdlbm4gZGllIExpc3RlIGRhZHVyY2gg +bGVlciB3aXJkLCBzY2hsaWVzc3QKLy8gc2ljaCBkYXMgTW9kYWwgdm9uIGFsbGVpbmUuCmV4cG9y +dCBmdW5jdGlvbiBoaW53ZWlzS2VubnRuaXNuZWhtZW4oaWQpIHsKICAgIGFwaVBvc3QoJy9hcGkv +aGlud2Vpc2UvJyArIGlkICsgJy9rZW5udG5pcycsIHt9KS50aGVuKGZ1bmN0aW9uKCkgewogICAg +ICAgIFouaGlud2Vpc2UgPSAoWi5oaW53ZWlzZSB8fCBbXSkuZmlsdGVyKGZ1bmN0aW9uKGgpIHsg +cmV0dXJuIGguaWQgIT09IGlkOyB9KTsKICAgICAgICAvLyBBdXMgZGVtIE1vZGFsIGRpZSBaZWls +ZSBlbnRmZXJuZW4KICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndHJb +ZGF0YS1oaW53ZWlzLWlkPSInICsgaWQgKyAnIl0nKTsKICAgICAgICBpZiAocm93KSByb3cucGFy +ZW50Tm9kZS5yZW1vdmVDaGlsZChyb3cpOwogICAgICAgIGhpbndlaXNlQW56ZWlnZUFrdHVhbGlz +aWVyZW4oKTsKICAgICAgICBpZiAoWi5oaW53ZWlzZS5sZW5ndGggPT09IDApIHsKICAgICAgICAg +ICAgbW9kYWxTY2hsaWVzc2VuKHRydWUpOwogICAgICAgICAgICB0b2FzdCgnQWxsZSBIaW53ZWlz +ZSBhYmdlYXJiZWl0ZXQuJywgJ2VyZm9sZycpOwogICAgICAgIH0KICAgIH0pLmNhdGNoKGZ1bmN0 +aW9uKGUpIHsKICAgICAgICB0b2FzdCgnRmVobGVyOiAnICsgZS5tZXNzYWdlLCAnZmVobGVyJyk7 +CiAgICB9KTsKfQoKLy8gTmltbXQgQUxMRSBha3R1ZWxsIG9mZmVuZW4gSGlud2Vpc2UgYXVmIGVp +bm1hbCB6dXIgS2VubnRuaXMgKFNhbW1lbC1Ba3Rpb24KLy8gaW0gTW9kYWwsIG51ciBiZWkgPjEg +SGlud2VpcyBhbmdlYm90ZW4pLiBEaWUgZWluemVsbmUgS2VubnRuaXNuYWhtZSBwcm8KLy8gWmVp +bGUgYmxlaWJ0IGRhdm9uIHVuYmVydWVocnQuIEVzIGdpYnQgc2VydmVyLXNlaXRpZyBrZWluZW4g +QnVsay1FbmRwb2ludCDigJQKLy8gZGFoZXIgTiBwYXJhbGxlbGUgUE9TVHM7IHRlaWwtZmVobGdl +c2NobGFnZW5lIEVpbnRyYWVnZSBibGVpYmVuIGluIGRlciBMaXN0ZS4KZXhwb3J0IGZ1bmN0aW9u +IGhpbndlaXNlQWxsZUtlbm50bmlzbmVobWVuKCkgewogICAgdmFyIGlkcyA9IChaLmhpbndlaXNl +IHx8IFtdKS5tYXAoZnVuY3Rpb24oaCkgeyByZXR1cm4gaC5pZDsgfSk7CiAgICBpZiAoIWlkcy5s +ZW5ndGgpIHJldHVybjsKICAgIGJlc3RhZXRpZ2VuKCdBbGxlICcgKyBpZHMubGVuZ3RoICsgJyBI +aW53ZWlzZSB6dXIgS2VubnRuaXMgbmVobWVuP1xuXG5TaWUgdmVyc2Nod2luZGVuIGF1cyBkZWlu +ZXIgTGlzdGUg4oCUIGltIExvZ2J1Y2ggYmxlaWJlbiBzaWUgZXJoYWx0ZW4uJywgZnVuY3Rpb24o +KSB7CiAgICAgICAgdmFyIGZlaGxlciA9IFtdOwogICAgICAgIFByb21pc2UuYWxsKGlkcy5tYXAo +ZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgcmV0dXJuIGFwaVBvc3QoJy9hcGkvaGlud2Vpc2Uv +JyArIGlkICsgJy9rZW5udG5pcycsIHt9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg +ICAgdmFyIHJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RyW2RhdGEtaGlud2Vpcy1pZD0i +JyArIGlkICsgJyJdJyk7CiAgICAgICAgICAgICAgICBpZiAocm93ICYmIHJvdy5wYXJlbnROb2Rl +KSByb3cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyb3cpOwogICAgICAgICAgICB9KS5jYXRjaChm +dW5jdGlvbigpIHsgZmVobGVyLnB1c2goaWQpOyB9KTsKICAgICAgICB9KSkudGhlbihmdW5jdGlv +bigpIHsKICAgICAgICAgICAgWi5oaW53ZWlzZSA9IChaLmhpbndlaXNlIHx8IFtdKS5maWx0ZXIo +ZnVuY3Rpb24oaCkgeyByZXR1cm4gZmVobGVyLmluZGV4T2YoaC5pZCkgPj0gMDsgfSk7CiAgICAg +ICAgICAgIGhpbndlaXNlQW56ZWlnZUFrdHVhbGlzaWVyZW4oKTsKICAgICAgICAgICAgaWYgKFou +aGlud2Vpc2UubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICBtb2RhbFNjaGxpZXNzZW4o +dHJ1ZSk7CiAgICAgICAgICAgICAgICB0b2FzdCgnQWxsZSBIaW53ZWlzZSB6dXIgS2VubnRuaXMg +Z2Vub21tZW4uJywgJ2VyZm9sZycpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg +ICAgdG9hc3QoZmVobGVyLmxlbmd0aCArICcgSGlud2VpcyhlKSBrb25udGVuIG5pY2h0IGdlc3Bl +aWNoZXJ0IHdlcmRlbiDigJQgYml0dGUgZXJuZXV0IHZlcnN1Y2hlbi4nLCAnd2FybnVuZycpOwog +ICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9LCB7IGphVGV4dDogJ0FsbGUgYWJuaWNrZW4n +IH0pOwp9Cg== diff --git a/VI3DGL/sync-bundle-03.txt b/VI3DGL/sync-bundle-03.txt index 7dbaa35..6bcf981 100644 --- a/VI3DGL/sync-bundle-03.txt +++ b/VI3DGL/sync-bundle-03.txt @@ -2360,7 +2360,7 @@ ICBpZiAobUluaGFsdCkgbUluaGFsdC5jbGFzc0xpc3QuYWRkKCdtb2RhbC1pbmhhbHQtZ3Jvc3Mn KTsKICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Qtc2NobGllc3Nlbicp OwogICAgaWYgKGJ0bikgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbW9kYWxTY2hsaWVz c2VuKTsKfQo= -### FILE: js/statistik.js | 122035 +### FILE: js/statistik.js | 121049 Ly8gPT09IHN0YXRpc3Rpay5qcyA9PT0KLy8gU3RhdGlzdGlrLVRhYjogS1BJcywgc29ydGllcmJh cmUgQmFsa2VuLUNoYXJ0cyBwcm8gUGVyc29uLCBGYWlybmVzcy0KLy8gQW56ZWlnZSwgTXVzdGVy LUFuYWx5c2UsIEFid2VzZW5oZWl0cy1LYWNoZWxuLCBEZXRhaWwtVGFiZWxsZSwgUHJvc2EtVGV4 @@ -2375,433 +2375,415 @@ dHVyZUlzdEFrdGl2IH0gZnJvbSAnLi9hZG1pbi5qcyc7Ci8vIGFrdGl2ZUZ1ZWhydW5nIGxpZWZl cnQgcHJvIFRhZytTY2hpY2h0IGRpZSBUb3AtMiBuYWNoIEZ1bmt0aW9ucy1SYW5nCi8vICsgUG9z aXRpb24g4oCUIGFsc28gZ2VuYXUgZGllIHNjaHJhZmZpZXJ0IGRhcmdlc3RlbGx0ZW4gMS4vMi4g VkkzLURHTC4KaW1wb3J0IHsgYWt0aXZlRnVlaHJ1bmcgfSBmcm9tICcuL2dyaWRfZWRpdG9yLmpz -JzsKaW1wb3J0IHsgYXVzd2VydGVuIH0gZnJvbSAnLi9zdGF0aXN0aWtfZW5naW5lLmpzJzsKaW1w -b3J0IHsgZGlhZ3JhbW1SZW5kZXJuIH0gZnJvbSAnLi9zdGF0aXN0aWtfY2hhcnRzLmpzJzsKCiAg -ICAvLyA9PT09PSBTdGF0aXN0aWsgPT09PT0KCiAgICB2YXIgc3RhdEZpbHRlciA9ICdhbGxlJzsK -CiAgICAvLyBBbm9ueW1pc2llcnVuZ3MtTWFwcGluZyAoQ2hlcnJ5LVBpY2sgMWFlZmUyNiwgaGlu -dGVyIFRvZ2dsZQogICAgLy8gYGZlYXR1cmVzLnN0YXRpc3Rpa0Fub255bWApLiBXaXJkIHp1IEJl -Z2lubiBqZWRlcyBzdGF0aXN0aWtSZW5kZXJuKCkKICAgIC8vIG5ldSBhdWZnZWJhdXQ6IGplZGVy -IHMubmFtZSAtPiAiUGVyc29uIE4iIGdlbWFlc3MgUmVpaGVuZm9sZ2UgaW4gc3RhdHMuCiAgICAv -LyBfc3RhdEFuemVpZ2VOYW1lKHMpIGxpZWZlcnQgZGVuIGFuenV6ZWlnZW5kZW4gTmFtZW4g4oCU -IGJlaSBkZWFrdGl2ZW0KICAgIC8vIEZlYXR1cmUgaXN0IGRhcyBlaW5mYWNoIHMubmFtZS4KICAg -IHZhciBfc3RhdEFub25Ba3RpdiA9IGZhbHNlOwogICAgdmFyIF9zdGF0QW5vbk1hcCAgID0ge307 -CiAgICBmdW5jdGlvbiBfc3RhdEFuemVpZ2VOYW1lKHMpIHsKICAgICAgICBpZiAoX3N0YXRBbm9u -QWt0aXYpIHJldHVybiBfc3RhdEFub25NYXBbcy5uYW1lXSB8fCBzLm5hbWU7CiAgICAgICAgLy8g -U2VydmVyIGxpZWZlcnQgIk5hY2huYW1lLCBWb3JuYW1lIi4gV2VubiBkZXIgVm9ybmFtZSBsZWVy -IGlzdCwKICAgICAgICAvLyBibGVpYnQgZWluIGhhZW5nZW5kZXMgS29tbWEg4oCUIGFic2NobmVp -ZGVuLgogICAgICAgIHZhciBuID0gcy5uYW1lIHx8ICcnOwogICAgICAgIHZhciBrID0gbi5pbmRl -eE9mKCcsJyk7CiAgICAgICAgaWYgKGsgPCAwKSByZXR1cm4gbjsKICAgICAgICB2YXIgbmFjaCA9 -IG4uc3Vic3RyaW5nKGsgKyAxKS50cmltKCk7CiAgICAgICAgaWYgKCFuYWNoKSByZXR1cm4gbi5z -dWJzdHJpbmcoMCwgaykudHJpbSgpOwogICAgICAgIHJldHVybiBuOwogICAgfQoKICAgIC8vIEth -dGVnb3JpZS1TdGF0ZSBmdWVyIGRpZSBCYWxrZW4tQW5zaWNodC4gU2Vzc2lvbnMtbG9rYWwuCiAg -ICAvLyBBa3RpdmUgS2F0ZWdvcmllIGJlc3RpbW10LCB3ZWxjaGUgU2VnbWVudGUgZGVyIEJhbGtl -biB6ZWlndCB1bmQgbmFjaAogICAgLy8gd2VsY2hlbSBTdW1tZW4tRmVsZCBzb3J0aWVydCB3aXJk -LgogICAgdmFyIF9zdGF0S2F0ZWdvcmllICAgID0gJ3NjaGljaHRlbic7CiAgICB2YXIgX3N0YXRT -b3J0UmljaHR1bmcgPSAnZGVzYyc7CgogICAgLy8gS2F0ZWdvcmllLURlZmluaXRpb246IHBybyBL -YXRlZ29yaWUgZWluZSBMaXN0ZSB2b24gU2VnbWVudGVuCiAgICAvLyAoRmVsZCwgTGFiZWwsIEZh -cmJlKSB1bmQgZGFzIFN1bW1lbi1GZWxkIGZ1ZXIgZGllIFNvcnRpZXJ1bmcuCiAgICAvLyBLcmFu -ayAoa3IpIGlzdCBCRVdVU1NUIG5pY2h0IGVudGhhbHRlbiDigJQgRGF0ZW5zY2h1dHotQW5mb3Jk -ZXJ1bmcsCiAgICAvLyBlcnNjaGVpbnQgbnVyIGluIGRlciBEZXRhaWwtVGFiZWxsZSBnYW56IHVu -dGVuLgogICAgdmFyIFNUQVRfS0FURUdPUklFTiA9IHsKICAgICAgICBzY2hpY2h0ZW46IHsKICAg -ICAgICAgICAgbGFiZWw6ICdTY2hpY2h0ZW4nLAogICAgICAgICAgICBzZWdtZW50ZTogWwogICAg -ICAgICAgICAgICAgeyBmZWxkOiAnZnJ1ZWgnLCAgICAgICAgbGFiZWw6ICdGcsO8aCcsICAgIGZh -cmJlOiAndmFyKC0tZmFyYmUtZnJ1ZWgpJyB9LAogICAgICAgICAgICAgICAgeyBmZWxkOiAnc3Bh -ZXQnLCAgICAgICAgbGFiZWw6ICdTcMOkdCcsICAgIGZhcmJlOiAndmFyKC0tZmFyYmUtc3BhZXQp -JyB9LAogICAgICAgICAgICAgICAgeyBmZWxkOiAnbmFjaHQnLCAgICAgICAgbGFiZWw6ICdOYWNo -dCcsICAgZmFyYmU6ICd2YXIoLS1mYXJiZS1uYWNodCknIH0sCiAgICAgICAgICAgICAgICB7IGZl -bGQ6ICdzb25kZXJkaWVuc3QnLCBsYWJlbDogJ1NEJywgICAgICBmYXJiZTogJ3ZhcigtLXN0YXQt -c2QpJyB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHNvcnRGZWxkOiAnZ2VzYW10JywKICAg -ICAgICAgICAgc29ydExhYmVsOiAnzqMgRGllbnN0ZScKICAgICAgICB9LAogICAgICAgIHdvY2hl -bmVuZGU6IHsKICAgICAgICAgICAgbGFiZWw6ICdXb2NoZW5lbmRkaWVuc3RlJywKICAgICAgICAg -ICAgc2VnbWVudGU6IFsKICAgICAgICAgICAgICAgIHsgZmVsZDogJ3NhbXN0YWdEaWVuc3RlJywg -IGxhYmVsOiAnU2EnLCAgICAgICBmYXJiZTogJ3ZhcigtLXN0YXQtc2Ftc3RhZyknIH0sCiAgICAg -ICAgICAgICAgICB7IGZlbGQ6ICdzb25udGFnRGllbnN0ZScsICBsYWJlbDogJ1NvJywgICAgICAg -ZmFyYmU6ICd2YXIoLS1zdGF0LXNvbm50YWcpJyB9LAogICAgICAgICAgICAgICAgeyBmZWxkOiAn -ZmVpZXJ0YWdEaWVuc3RlJywgbGFiZWw6ICdGZWllcnRhZycsIGZhcmJlOiAndmFyKC0tc3RhdC1m -ZWllcnRhZyknIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgLy8gS29tcGxldHRlIFdFIHdp -cmQgYWxzIHp1c2FldHpsaWNoZSBLZW5uemFobCByZWNodHMgZ2V6ZWlndAogICAgICAgICAgICBl -eHRyYTogeyBmZWxkOiAna29tcGxldHRlV0UnLCBsYWJlbDogJ0tvbXBsZXR0ZSBXRScsIGZhcmJl -OiAndmFyKC0tc3RhdC1rb21wbGV0dGUtd2UpJyB9LAogICAgICAgICAgICAvLyBTdW1tZSB1ZWJl -ciBTYStTbytGZWllcnRhZyAoY29tcHV0ZWQpCiAgICAgICAgICAgIHNvcnRMYWJlbDogJ86jIFdF -K0ZlaWVydGFnJwogICAgICAgIH0sCiAgICAgICAgZm9ydGJpbGR1bmc6IHsKICAgICAgICAgICAg -bGFiZWw6ICdGb3J0YmlsZHVuZycsCiAgICAgICAgICAgIHNlZ21lbnRlOiBbCiAgICAgICAgICAg -ICAgICB7IGZlbGQ6ICdmb3J0YmlsZHVuZycsICAgICAgbGFiZWw6ICdBdUYvRVRNL1NlbS9UVC9U -ekYnLCBmYXJiZTogJ3ZhcigtLXN0YXQtZm9ydGJpbGR1bmctMSknIH0sCiAgICAgICAgICAgICAg -ICB7IGZlbGQ6ICdkaWVuc3R1bnRlcnJpY2h0JywgbGFiZWw6ICdEVScsICAgICAgICAgICAgICAg -ICAgZmFyYmU6ICd2YXIoLS1zdGF0LWZvcnRiaWxkdW5nLTIpJyB9LAogICAgICAgICAgICAgICAg -eyBmZWxkOiAnbGVocmdhbmdMYW5nJywgICAgIGxhYmVsOiAnTEcnLCAgICAgICAgICAgICAgICAg -IGZhcmJlOiAndmFyKC0tc3RhdC1mb3J0YmlsZHVuZy0zKScgfQogICAgICAgICAgICBdLAogICAg -ICAgICAgICBzb3J0TGFiZWw6ICfOoyBGb3J0YmlsZHVuZycKICAgICAgICB9LAogICAgICAgIGFi -d2VzZW5oZWl0OiB7CiAgICAgICAgICAgIGxhYmVsOiAnQWJ3ZXNlbmhlaXQnLAogICAgICAgICAg -ICAvLyBLcmFuayBiZXd1c3N0IGF1c2dlbm9tbWVuIChEYXRlbnNjaHV0eikuIFVybGF1YiArIEt1 -ciArIFNvbmRlcnVybGF1YgogICAgICAgICAgICAvLyBzaW5kIGRpZSBmYWlyZW4gVmVyZ2xlaWNo -c3dlcnRlLgogICAgICAgICAgICBzZWdtZW50ZTogWwogICAgICAgICAgICAgICAgeyBmZWxkOiAn -dXJsYXViJywgICAgICAgbGFiZWw6ICdVcmxhdWInLCAgICAgICBmYXJiZTogJ3ZhcigtLXN0YXQt -dXJsYXViKScgfSwKICAgICAgICAgICAgICAgIHsgZmVsZDogJ2t1cicsICAgICAgICAgIGxhYmVs -OiAnS3VyJywgICAgICAgICAgZmFyYmU6ICd2YXIoLS1zdGF0LWt1ciknIH0sCiAgICAgICAgICAg -ICAgICB7IGZlbGQ6ICdzb25kZXJ1cmxhdWInLCBsYWJlbDogJ1NvbmRlcnVybGF1YicsIGZhcmJl -OiAndmFyKC0tc3RhdC1zb25kZXJ1cmxhdWIpJyB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAg -IHNvcnRMYWJlbDogJ86jIEFid2VzZW5oZWl0JwogICAgICAgIH0sCiAgICAgICAgZWluZ2VzcHJ1 -bmdlbjogewogICAgICAgICAgICBsYWJlbDogJ0Vpbmdlc3BydW5nZW4nLAogICAgICAgICAgICAv -LyBBdXNzZXJwbGFubWFlc3NpZ2UgQXVmcnVlY2t1bmdlbiBpbiBkaWUgMS4vMi4gVkkzLURHTC0K -ICAgICAgICAgICAgLy8gVmVyYW50d29ydHVuZyBpbm5lcmhhbGIgZGVyIDE0LVRhZ2UtVmVyYmlu -ZGxpY2hrZWl0LiBQcm8KICAgICAgICAgICAgLy8gU2NoaWNodCAoRi9TL04pIGF1Zmdlc2NobHVl -c3NlbHQgLS0gZ2xlaWNoZSBGYXJicGFsZXR0ZSB3aWUKICAgICAgICAgICAgLy8gZGllIFNjaGlj -aHRlbi1LYXRlZ29yaWUsIGRhbWl0IGRlciBCZXp1ZyBvcHRpc2NoIGtsYXIgaXN0LgogICAgICAg -ICAgICBiZXNjaHJlaWJ1bmc6ICdIaWVyIHdlcmRlbiBkaWUgTWl0YXJiZWl0ZW5kZW4gYXVmZ2Vm -w7xocnQsIGRpZSA8Yj5hdcOfZXJwbGFubcOkw59pZyBpbm5lcmhhbGIgZGVyIDE0LVRhZ2UtVmVy -YmluZGxpY2hrZWl0IGVpbmdlc3BydW5nZW48L2I+IHNpbmQgdW5kIGluIGRpZSAxLiBvZGVyIDIu -IFZJMy1ER0wtVmVyYW50d29ydHVuZyBlaW5lciBTY2hpY2h0IGF1ZmdlcsO8Y2t0IHNpbmQg4oCU -IGVudHdlZGVyIGR1cmNoIFNldHp1bmcgZHVyY2ggZGllIFZlcmFudHdvcnRsaWNoZW4gKE1haWwt -RGlhbG9nKSBvZGVyIGR1cmNoIFNlbGJzdGVpbnRyYWd1bmcgYXVzIHdhY2hmcmVpIC8gQWJ3ZXNl -bmhlaXQgaGVyYXVzLicsCiAgICAgICAgICAgIHNlZ21lbnRlOiBbCiAgICAgICAgICAgICAgICB7 -IGZlbGQ6ICdlaW5nZXNwcnVuZ2VuX2YnLCBsYWJlbDogJ0Zyw7xoJywgIGZhcmJlOiAndmFyKC0t -ZmFyYmUtZnJ1ZWgpJyB9LAogICAgICAgICAgICAgICAgeyBmZWxkOiAnZWluZ2VzcHJ1bmdlbl9z -JywgbGFiZWw6ICdTcMOkdCcsICBmYXJiZTogJ3ZhcigtLWZhcmJlLXNwYWV0KScgfSwKICAgICAg -ICAgICAgICAgIHsgZmVsZDogJ2Vpbmdlc3BydW5nZW5fbicsIGxhYmVsOiAnTmFjaHQnLCBmYXJi -ZTogJ3ZhcigtLWZhcmJlLW5hY2h0KScgfQogICAgICAgICAgICBdLAogICAgICAgICAgICBzb3J0 -RmVsZDogICdlaW5nZXNwcnVuZ2VuJywKICAgICAgICAgICAgc29ydExhYmVsOiAnzqMgRWluc3By -w7xuZ2UnCiAgICAgICAgfQogICAgfTsKCiAgICAvLyBTdW1tZSBkZXIgS2F0ZWdvcmllLVNlZ21l -bnRlIGZ1ZXIgZWluZSBQZXJzb24gZXJtaXR0ZWxuLgogICAgZnVuY3Rpb24gX3N0YXRLYXRTdW1t -ZShzLCBrYXQpIHsKICAgICAgICBpZiAoa2F0LnNvcnRGZWxkKSByZXR1cm4gc1trYXQuc29ydEZl -bGRdIHx8IDA7CiAgICAgICAgdmFyIHN1bSA9IDA7CiAgICAgICAga2F0LnNlZ21lbnRlLmZvckVh -Y2goZnVuY3Rpb24oc2VnKSB7IHN1bSArPSBzW3NlZy5mZWxkXSB8fCAwOyB9KTsKICAgICAgICBy -ZXR1cm4gc3VtOwogICAgfQoKICAgIGZ1bmN0aW9uIHN0YXRpc3Rpa0ZpbHRlckZ1ZWxsZW4oKSB7 -CiAgICAgICAgLy8gR3J1cHBlbi1Ecm9wZG93biBhdXMgZGVtIGFrdHVlbGxlbiBhZG1pbi5ncnVw -cGVuIGF1ZmJhdWVuIOKAlCBzb25zdCBrb2VubmVuCiAgICAgICAgLy8gdW1iZW5hbm50ZSBHcnVw -cGVuIG5pY2h0IG1laHIgZ2VmaWx0ZXJ0IHdlcmRlbi4gTGFiZWwgb2huZSBLdWVyemVsLAogICAg -ICAgIC8vIG51ciBkaWUgQmV6ZWljaG51bmcgKEZhbGxiYWNrIGF1ZiBkYXMgS3VlcnplbCB3ZW5u -IGtlaW5lIEJlemVpY2hudW5nKS4KICAgICAgICB2YXIgc2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVu -dEJ5SWQoJ3N0YXRzLWdydXBwZW4tZmlsdGVyJyk7CiAgICAgICAgaWYgKCFzZWwpIHJldHVybjsK -ICAgICAgICB2YXIgYWt0dWVsbCA9IHNlbC52YWx1ZSB8fCAnYWxsZSc7CiAgICAgICAgdmFyIGh0 -bWwgPSAnPG9wdGlvbiB2YWx1ZT0iYWxsZSI+QWxsZSBEaWVuc3RncnVwcGVuPC9vcHRpb24+JzsK -ICAgICAgICAoWi5hZG1pbi5ncnVwcGVuIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGdyKSB7CiAg -ICAgICAgICAgIHZhciBsYWJlbCA9IGdyLmJlemVpY2hudW5nIHx8IGdyLm5hbWU7CiAgICAgICAg -ICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9IicgKyBlc2NhcGVBdHRyKGdyLm5hbWUpICsgJyI+ -JyArIGVzY2FwZUhUTUwobGFiZWwpICsgJzwvb3B0aW9uPic7CiAgICAgICAgfSk7CiAgICAgICAg -c2VsLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgc2VsLnZhbHVlID0gYWt0dWVsbDsKICAgIH0K -CiAgICBmdW5jdGlvbiBzdGF0aXN0aWtMYWRlbigpIHsKICAgICAgICBzdGF0aXN0aWtGaWx0ZXJG -dWVsbGVuKCk7CiAgICAgICAgLy8gUGFrZXQtQyAoMjAyNi0wNS0yOSk6IFNvZm9ydC1TcGlubmVy -LCBkYW1pdCBkZXIgVXNlciBiZWltIFRhYi1XZWNoc2VsCiAgICAgICAgLy8gbmljaHQgYXVmIGVp -bmVuIGxlZXJlbiBCZXJlaWNoIHN0YXJydCB3YWVocmVuZCBhcGkoKSBsYWV1ZnQuIFdpcmQKICAg -ICAgICAvLyBpbSB0aGVuL2NhdGNoIHdpZWRlciB3ZWdnZW5vbW1lbiwgZGFuYWNoIHVlYmVybmlt -bXQgZGllIGJlc3RlaGVuZGUKICAgICAgICAvLyBTa2VsZXRvbi1SZW5kZXItU2Nocml0dC1Mb2dp -ayAoc2VxdWVudGllbGxlcyBSZW5kZXJuIG1pdCBHbG93KS4KICAgICAgICBsYWRlT3ZlcmxheVpl -aWdlbignYW5zaWNodC1zdGF0aXN0aWsnLCAnU3RhdGlzdGlrIHdpcmQgYmVyZWNobmV0IOKApicp -OwogICAgICAgIGFwaSgnL2FwaS9zdGF0aXN0aWsnKS50aGVuKGZ1bmN0aW9uKGRhdGVuKSB7CiAg -ICAgICAgICAgIFouc3RhdGlzdGlrID0gZGF0ZW47CiAgICAgICAgICAgIGxhZGVPdmVybGF5VmVy -c3RlY2tlbignYW5zaWNodC1zdGF0aXN0aWsnKTsKICAgICAgICAgICAgc3RhdGlzdGlrUmVuZGVy -bigpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgbGFkZU92ZXJs -YXlWZXJzdGVja2VuKCdhbnNpY2h0LXN0YXRpc3RpaycpOwogICAgICAgICAgICB0b2FzdCgnRmVo -bGVyIGJlaW0gTGFkZW4gZGVyIFN0YXRpc3RpazogJyArIGUubWVzc2FnZSwgJ2ZlaGxlcicpOwog -ICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHN0YXRGaWx0ZXJuKHN0YXRzKSB7CiAgICAg -ICAgaWYgKHN0YXRGaWx0ZXIgPT09ICdhbGxlJykgcmV0dXJuIHN0YXRzOwogICAgICAgIHJldHVy -biBzdGF0cy5maWx0ZXIoZnVuY3Rpb24ocykgeyByZXR1cm4gcy5ncnVwcGUgPT09IHN0YXRGaWx0 -ZXI7IH0pOwogICAgfQoKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gPT09PT0gTm9Db2RlLVN0YXRpc3Rpay1C -YXVrYXN0ZW4gKyBMYXlvdXQtUmFzdGVyID09PT09PT09PT09CiAgICAvLyA9PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFNl -bGJzdGdlYmF1dGUgS2FjaGVsbiAoWi5hZG1pbi5zdGF0aXN0aWtLYWNoZWxuKSBlcnNjaGVpbmVu -IGFscwogICAgLy8genVzYWV0emxpY2hlIC5zdGF0cy1wYW5lbCBpbSAjc3RhdHMtZ3JpZC4gUmVp -aGVuZm9sZ2UvQnJlaXRlL1NpY2h0YmFya2VpdAogICAgLy8gQUxMRVIgVGlsZXMgKGZlc3RlIFBh -bmVscyArIEJhdWthc3Rlbikgc3RldWVydCBaLmFkbWluLnN0YXRpc3Rpa0xheW91dC4KICAgIC8v -IEJhdWVuIGRhcmYgbnVyIFN1cGVyVXNlciArIEdlc2FtdHZlcmFudHdvcnRsaWNoIChCdWlsZGVy -IGxlYnQgaGllciBpbQogICAgLy8gU3RhdGlzdGlrLVRhYik7IGRhcyBSYXN0ZXItQW5vcmRuZW4g -bGVidCBpbSBBZG1pbiAoYWRtaW5fc3RhdGlzdGlrLmpzKS4KICAgIC8vCiAgICAvLyBXaWNodGln -OiBCYXVrYXN0ZW4tS2FjaGVsbiB0cmFnZW4gaWhyZW4gRUlHRU5FTiAiV2VyIi1GaWx0ZXIgdW5k -IHJlY2huZW4KICAgIC8vIGJld3Vzc3QgZ2VnZW4gZGllIFZPTExFIFouc3RhdGlzdGlrIChuaWNo -dCBnZWdlbiBkZW4gZ2xvYmFsZW4gR3J1cHBlbi0KICAgIC8vIEZpbHRlciBvYmVuKSDigJQgZWlu -ZSBnZXNwZWljaGVydGUgS2FjaGVsIGlzdCBnbG9iYWwgdW5kIHNlbGJzdC1lcmtsYWVyZW5kLgoK -ICAgIHZhciBCUkVJVEVfU1BBTiAgPSB7IHZvbGw6IDYsIGhhbGI6IDMsIGRyaXR0ZWw6IDIgfTsK -ICAgIHZhciBCUkVJVEVfUkFORyAgPSB7IGRyaXR0ZWw6IDAsIGhhbGI6IDEsIHZvbGw6IDIgfTsK -CiAgICAvLyBGZXN0ZSBQYW5lbHM6IGlkICg9IGRhdGEtdGlsZS1pZCBpbSBIVE1MKSwgU3RhbmRh -cmQtIHVuZCBNaW5kZXN0YnJlaXRlLgogICAgLy8gU2Nod2VyZSBUYWJlbGxlbi1QYW5lbHMgZHVl -cmZlbiBuaWNodCB1bnRlciAidm9sbCIgKHNvbnN0IGJyZWNoZW4KICAgIC8vIEhlYXRtYXAvVGFn -ZXNhbnRlaWxlL1Byb3NhKS4gdmVydGVpbHVuZy9mYWlybmVzcyBzaW5kIGZyZWkgd2FlaGxiYXIu -CiAgICB2YXIgQlVJTFRJTl9USUxFUyA9IFsKICAgICAgICB7IGlkOiAndmVydGVpbHVuZycsICAg -dGl0ZWw6ICdTY2hpY2h0dmVydGVpbHVuZycsICAgICAgICAgICAgICAgIGRlZmF1bHRCcmVpdGU6 -ICdoYWxiJywgbWluQnJlaXRlOiAnZHJpdHRlbCcgfSwKICAgICAgICB7IGlkOiAnZmFpcm5lc3Mn -LCAgICAgdGl0ZWw6ICdXRS0gJiBGVC1GYWlybmVzcycsICAgICAgICAgICAgICAgIGRlZmF1bHRC -cmVpdGU6ICdoYWxiJywgbWluQnJlaXRlOiAnZHJpdHRlbCcgfSwKICAgICAgICB7IGlkOiAnbWlr -cm90ZWFtcycsICAgdGl0ZWw6ICdNaWtyb3RlYW1zIOKAlCBWZXJmw7xnYmFya2VpdCcsICAgICAg -IGRlZmF1bHRCcmVpdGU6ICd2b2xsJywgbWluQnJlaXRlOiAndm9sbCcgfSwKICAgICAgICB7IGlk -OiAnbmViZW53YWNoZW4nLCAgdGl0ZWw6ICdOZWJlbndhY2hlbi1WZXJhbnR3b3J0dW5nJywgICAg -ICAgIGRlZmF1bHRCcmVpdGU6ICd2b2xsJywgbWluQnJlaXRlOiAndm9sbCcgfSwKICAgICAgICB7 -IGlkOiAndGFnZXNhbnRlaWxlJywgdGl0ZWw6ICdUYWdlcy1BbnRlaWxlIHBybyBUZWFtJywgICAg -ICAgICAgIGRlZmF1bHRCcmVpdGU6ICd2b2xsJywgbWluQnJlaXRlOiAndm9sbCcgfSwKICAgICAg -ICB7IGlkOiAncHJvc2EnLCAgICAgICAgdGl0ZWw6ICdEZXRhaWxhbmFseXNlIHBybyBQZXJzb24n -LCAgICAgICAgIGRlZmF1bHRCcmVpdGU6ICd2b2xsJywgbWluQnJlaXRlOiAndm9sbCcgfQogICAg -XTsKCiAgICAvLyBNZXRyaWstS2F0YWxvZyBmdWVyIGRlbiBCYXVrYXN0ZW4uIGZuKHMpIC0+IFph -aGxlbndlcnQgcHJvIFBlcnNvbi4KICAgIC8vIEtSQU5LIGlzdCBiZXd1c3N0IE5JQ0hUIGVudGhh -bHRlbiAoRGF0ZW5zY2h1dHosIHdpZSB1ZWJlcmFsbCBzb25zdCkuCiAgICB2YXIgQkFVS0FTVEVO -X01FVFJJS0VOID0gWwogICAgICAgIHsga2V5OidnZXNhbXQnLCAgICAgICAgICBncnVwcGU6J1Nj -aGljaHRlbicsICAgICAgICAgICAgbGFiZWw6J0RpZW5zdGUgZ2VzYW10JywgICAgICAgICAgZWlu -aGVpdDonRGllbnN0ZScsIGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLmdlc2FtdHx8MDt9IH0sCiAg -ICAgICAgeyBrZXk6J2ZydWVoJywgICAgICAgICAgIGdydXBwZTonU2NoaWNodGVuJywgICAgICAg -ICAgICBsYWJlbDonRnLDvGhkaWVuc3RlJywgICAgICAgICAgICAgZWluaGVpdDonRGllbnN0ZScs -IGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLmZydWVofHwwO30gfSwKICAgICAgICB7IGtleTonc3Bh -ZXQnLCAgICAgICAgICAgZ3J1cHBlOidTY2hpY2h0ZW4nLCAgICAgICAgICAgIGxhYmVsOidTcMOk -dGRpZW5zdGUnLCAgICAgICAgICAgICBlaW5oZWl0OidEaWVuc3RlJywgZm46ZnVuY3Rpb24ocyl7 -cmV0dXJuIHMuc3BhZXR8fDA7fSB9LAogICAgICAgIHsga2V5OiduYWNodCcsICAgICAgICAgICBn -cnVwcGU6J1NjaGljaHRlbicsICAgICAgICAgICAgbGFiZWw6J05hY2h0ZGllbnN0ZScsICAgICAg -ICAgICAgZWluaGVpdDonRGllbnN0ZScsIGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLm5hY2h0fHww -O30gfSwKICAgICAgICB7IGtleTonc29uZGVyZGllbnN0JywgICAgZ3J1cHBlOidTY2hpY2h0ZW4n -LCAgICAgICAgICAgIGxhYmVsOidTb25kZXJkaWVuc3RlIChTRC9TRSknLCAgIGVpbmhlaXQ6J0Rp -ZW5zdGUnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4gcy5zb25kZXJkaWVuc3R8fDA7fSB9LAogICAg -ICAgIHsga2V5OidkZ2wnLCAgICAgICAgICAgICBncnVwcGU6J1NjaGljaHRlbicsICAgICAgICAg -ICAgbGFiZWw6J0RHTC1FaW5zw6R0emUnLCAgICAgICAgICAgIGVpbmhlaXQ6J0VpbnPDpHR6ZScs -IGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLmRnbHx8MDt9IH0sCiAgICAgICAgeyBrZXk6J3dkZics -ICAgICAgICAgICAgIGdydXBwZTonU2NoaWNodGVuJywgICAgICAgICAgICBsYWJlbDonV0RGLUVp -bnPDpHR6ZScsICAgICAgICAgICAgZWluaGVpdDonRWluc8OkdHplJywgZm46ZnVuY3Rpb24ocyl7 -cmV0dXJuIHMud2RmfHwwO30gfSwKICAgICAgICB7IGtleTonZmJwJywgICAgICAgICAgICAgZ3J1 -cHBlOidTY2hpY2h0ZW4nLCAgICAgICAgICAgIGxhYmVsOidGQlAtRWluc8OkdHplJywgICAgICAg -ICAgICBlaW5oZWl0OidFaW5zw6R0emUnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4gcy5mYnB8fDA7 -fSB9LAoKICAgICAgICB7IGtleTond2VfZnRfZ2VzYW10JywgICAgZ3J1cHBlOidXb2NoZW5lbmRl -ICYgRmVpZXJ0YWcnLCBsYWJlbDonV0UtICYgRmVpZXJ0YWdzZGllbnN0ZScsICBlaW5oZWl0OidE -aWVuc3RlJywgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIChzLnNhbXN0YWdEaWVuc3RlfHwwKSsocy5z -b25udGFnRGllbnN0ZXx8MCkrKHMuZmVpZXJ0YWdEaWVuc3RlfHwwKTt9IH0sCiAgICAgICAgeyBr -ZXk6J3NhbXN0YWdEaWVuc3RlJywgIGdydXBwZTonV29jaGVuZW5kZSAmIEZlaWVydGFnJywgbGFi -ZWw6J1NhbXN0YWdzZGllbnN0ZScsICAgICAgICAgZWluaGVpdDonRGllbnN0ZScsIGZuOmZ1bmN0 -aW9uKHMpe3JldHVybiBzLnNhbXN0YWdEaWVuc3RlfHwwO30gfSwKICAgICAgICB7IGtleTonc29u -bnRhZ0RpZW5zdGUnLCAgZ3J1cHBlOidXb2NoZW5lbmRlICYgRmVpZXJ0YWcnLCBsYWJlbDonU29u -bnRhZ3NkaWVuc3RlJywgICAgICAgICBlaW5oZWl0OidEaWVuc3RlJywgZm46ZnVuY3Rpb24ocyl7 -cmV0dXJuIHMuc29ubnRhZ0RpZW5zdGV8fDA7fSB9LAogICAgICAgIHsga2V5OidmZWllcnRhZ0Rp -ZW5zdGUnLCBncnVwcGU6J1dvY2hlbmVuZGUgJiBGZWllcnRhZycsIGxhYmVsOidGZWllcnRhZ3Nk -aWVuc3RlJywgICAgICAgIGVpbmhlaXQ6J0RpZW5zdGUnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4g -cy5mZWllcnRhZ0RpZW5zdGV8fDA7fSB9LAogICAgICAgIHsga2V5Oidrb21wbGV0dGVXRScsICAg -ICBncnVwcGU6J1dvY2hlbmVuZGUgJiBGZWllcnRhZycsIGxhYmVsOidLb21wbGV0dGUgV29jaGVu -ZW5kZW4nLCAgIGVpbmhlaXQ6J1dFJywgICAgICBmbjpmdW5jdGlvbihzKXtyZXR1cm4gcy5rb21w -bGV0dGVXRXx8MDt9IH0sCiAgICAgICAgeyBrZXk6J3dvY2hlbmVuZFRhZ2UnLCAgIGdydXBwZTon -V29jaGVuZW5kZSAmIEZlaWVydGFnJywgbGFiZWw6J1dFLVRhZ2UgaW0gRGllbnN0JywgICAgICAg -ZWluaGVpdDonVGFnZScsICAgIGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLndvY2hlbmVuZFRhZ2V8 -fDA7fSB9LAogICAgICAgIHsga2V5Oid3ZVRhZ2VWZXJmdWVnYmFyJyxncnVwcGU6J1dvY2hlbmVu -ZGUgJiBGZWllcnRhZycsIGxhYmVsOidGcmVpZSBXRS1UYWdlICh2ZXJmw7xnYmFyKScsZWluaGVp -dDonVGFnZScsICAgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIHMud2VUYWdlVmVyZnVlZ2Jhcnx8MDt9 -IH0sCgogICAgICAgIHsga2V5OidlaW5nZXNwcnVuZ2VuJywgICBncnVwcGU6J0VpbnNwcmluZ2Vu -JywgICAgICAgICAgbGFiZWw6J0VpbnNwcsO8bmdlIGdlc2FtdCcsICAgICAgIGVpbmhlaXQ6J0Vp -bnNwcsO8bmdlJywgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIHMuZWluZ2VzcHJ1bmdlbnx8MDt9IH0s -CiAgICAgICAgeyBrZXk6J2Vpbmdlc3BydW5nZW5fZicsIGdydXBwZTonRWluc3ByaW5nZW4nLCAg -ICAgICAgICBsYWJlbDonRWluc3Byw7xuZ2UgRnLDvGgnLCAgICAgICAgIGVpbmhlaXQ6J0VpbnNw -csO8bmdlJywgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIHMuZWluZ2VzcHJ1bmdlbl9mfHwwO30gfSwK -ICAgICAgICB7IGtleTonZWluZ2VzcHJ1bmdlbl9zJywgZ3J1cHBlOidFaW5zcHJpbmdlbicsICAg -ICAgICAgIGxhYmVsOidFaW5zcHLDvG5nZSBTcMOkdCcsICAgICAgICAgZWluaGVpdDonRWluc3By -w7xuZ2UnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4gcy5laW5nZXNwcnVuZ2VuX3N8fDA7fSB9LAog -ICAgICAgIHsga2V5OidlaW5nZXNwcnVuZ2VuX24nLCBncnVwcGU6J0VpbnNwcmluZ2VuJywgICAg -ICAgICAgbGFiZWw6J0VpbnNwcsO8bmdlIE5hY2h0JywgICAgICAgIGVpbmhlaXQ6J0VpbnNwcsO8 -bmdlJywgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIHMuZWluZ2VzcHJ1bmdlbl9ufHwwO30gfSwKCiAg -ICAgICAgeyBrZXk6J3VybGF1YicsICAgICAgICAgIGdydXBwZTonQWJ3ZXNlbmhlaXQgJiBGcmVp -JywgICBsYWJlbDonVXJsYXVic3RhZ2UnLCAgICAgICAgICAgICBlaW5oZWl0OidUYWdlJywgZm46 -ZnVuY3Rpb24ocyl7cmV0dXJuIHMudXJsYXVifHwwO30gfSwKICAgICAgICB7IGtleTona3VyJywg -ICAgICAgICAgICAgZ3J1cHBlOidBYndlc2VuaGVpdCAmIEZyZWknLCAgIGxhYmVsOidLdXItVGFn -ZScsICAgICAgICAgICAgICAgIGVpbmhlaXQ6J1RhZ2UnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4g -cy5rdXJ8fDA7fSB9LAogICAgICAgIHsga2V5Oidzb25kZXJ1cmxhdWInLCAgICBncnVwcGU6J0Fi -d2VzZW5oZWl0ICYgRnJlaScsICAgbGFiZWw6J1NvbmRlcnVybGF1YicsICAgICAgICAgICAgZWlu -aGVpdDonVGFnZScsIGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLnNvbmRlcnVybGF1Ynx8MDt9IH0s -CiAgICAgICAgeyBrZXk6J3BhcmFncmFwaDIxJywgICAgIGdydXBwZTonQWJ3ZXNlbmhlaXQgJiBG -cmVpJywgICBsYWJlbDonwqcyMSAvIDIxYS1UYWdlJywgICAgICAgICAgZWluaGVpdDonVGFnZScs -IGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLnBhcmFncmFwaDIxfHwwO30gfSwKICAgICAgICB7IGtl -eTonYXpBdXNnbGVpY2hSZWluJywgZ3J1cHBlOidBYndlc2VuaGVpdCAmIEZyZWknLCAgIGxhYmVs -OidBWi1BdXNnbGVpY2gnLCAgICAgICAgICAgIGVpbmhlaXQ6J1RhZ2UnLCBmbjpmdW5jdGlvbihz -KXtyZXR1cm4gcy5hekF1c2dsZWljaFJlaW58fDA7fSB9LAogICAgICAgIHsga2V5Oid3YWNoZnJl -aScsICAgICAgICBncnVwcGU6J0Fid2VzZW5oZWl0ICYgRnJlaScsICAgbGFiZWw6J1dhY2hmcmVp -ICh3ZnIpJywgICAgICAgICAgZWluaGVpdDonVGFnZScsIGZuOmZ1bmN0aW9uKHMpe3JldHVybiBz -LndhY2hmcmVpfHwwO30gfSwKICAgICAgICB7IGtleTonZGllbnN0ZnJlaVRhZycsICAgZ3J1cHBl -OidBYndlc2VuaGVpdCAmIEZyZWknLCAgIGxhYmVsOidEaWVuc3RmcmVpIChkZnIpJywgICAgICAg -IGVpbmhlaXQ6J1RhZ2UnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4gcy5kaWVuc3RmcmVpVGFnfHww -O30gfSwKCiAgICAgICAgeyBrZXk6J2ZvcnRiaWxkdW5nJywgICAgIGdydXBwZTonQXVzLSAmIEZv -cnRiaWxkdW5nJywgICBsYWJlbDonRm9ydGJpbGR1bmcgKEF1Ri9FVE0vU2VtL1RUL1R6RiknLCBl -aW5oZWl0OidUYWdlJywgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIHMuZm9ydGJpbGR1bmd8fDA7fSB9 -LAogICAgICAgIHsga2V5OidkaWVuc3R1bnRlcnJpY2h0JyxncnVwcGU6J0F1cy0gJiBGb3J0Ymls -ZHVuZycsICAgbGFiZWw6J0RpZW5zdHVudGVycmljaHQgKERVKScsICAgZWluaGVpdDonVGFnZScs -IGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLmRpZW5zdHVudGVycmljaHR8fDA7fSB9LAogICAgICAg -IHsga2V5OidsZWhyZ2FuZ0xhbmcnLCAgICBncnVwcGU6J0F1cy0gJiBGb3J0YmlsZHVuZycsICAg -bGFiZWw6J0xlaHJnYW5nIChMRyknLCAgICAgICAgICAgZWluaGVpdDonVGFnZScsIGZuOmZ1bmN0 -aW9uKHMpe3JldHVybiBzLmxlaHJnYW5nTGFuZ3x8MDt9IH0sCiAgICAgICAgeyBrZXk6J2xlaHJn -YW5nJywgICAgICAgIGdydXBwZTonQXVzLSAmIEZvcnRiaWxkdW5nJywgICBsYWJlbDonTGVocmdh -bmcgKyBGb3J0YmlsZHVuZyBnZXNhbXQnLCBlaW5oZWl0OidUYWdlJywgZm46ZnVuY3Rpb24ocyl7 -cmV0dXJuIHMubGVocmdhbmd8fDA7fSB9CiAgICBdOwoKICAgIGZ1bmN0aW9uIF9hbGxlS2FjaGVs -bigpIHsKICAgICAgICB2YXIgYXJyID0gKFouYWRtaW4gJiYgWi5hZG1pbi5zdGF0aXN0aWtLYWNo -ZWxuKSB8fCBbXTsKICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcnIpID8gYXJyIDogW107 -CiAgICB9CiAgICBmdW5jdGlvbiBfbGF5b3V0TGlzdGUoKSB7CiAgICAgICAgdmFyIGFyciA9ICha -LmFkbWluICYmIFouYWRtaW4uc3RhdGlzdGlrTGF5b3V0KSB8fCBbXTsKICAgICAgICByZXR1cm4g -QXJyYXkuaXNBcnJheShhcnIpID8gYXJyIDogW107CiAgICB9CiAgICBmdW5jdGlvbiBtZXRyaWtG -aW5kZW4oa2V5KSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVVLQVNURU5fTUVUUklL -RU4ubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKEJBVUtBU1RFTl9NRVRSSUtFTltpXS5r -ZXkgPT09IGtleSkgcmV0dXJuIEJBVUtBU1RFTl9NRVRSSUtFTltpXTsKICAgICAgICB9CiAgICAg -ICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBfZGVmYXVsdEJyZWl0ZShpZCkgewog -ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQlVJTFRJTl9USUxFUy5sZW5ndGg7IGkrKykgewog -ICAgICAgICAgICBpZiAoQlVJTFRJTl9USUxFU1tpXS5pZCA9PT0gaWQpIHJldHVybiBCVUlMVElO -X1RJTEVTW2ldLmRlZmF1bHRCcmVpdGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnaGFsYic7 -IC8vIEJhdWthc3Rlbi1LYWNoZWxuOiBEZWZhdWx0IGhhbGJlIEJyZWl0ZQogICAgfQogICAgZnVu -Y3Rpb24gX2JyZWl0ZUNsYW1wKGJyZWl0ZSwgbWluQnJlaXRlKSB7CiAgICAgICAgaWYgKCFCUkVJ -VEVfU1BBTlticmVpdGVdKSBicmVpdGUgPSAndm9sbCc7CiAgICAgICAgaWYgKCFCUkVJVEVfU1BB -TlttaW5CcmVpdGVdKSBtaW5CcmVpdGUgPSAnZHJpdHRlbCc7CiAgICAgICAgcmV0dXJuIChCUkVJ -VEVfUkFOR1ticmVpdGVdIDwgQlJFSVRFX1JBTkdbbWluQnJlaXRlXSkgPyBtaW5CcmVpdGUgOiBi -cmVpdGU7CiAgICB9CgogICAgLy8gIldlciItRmlsdGVyIGVpbmVyIEthY2hlbCBhbndlbmRlbi4K -ICAgIGZ1bmN0aW9uIF9rYWNoZWxGaWx0ZXJuKHN0YXRzLCB3ZXIpIHsKICAgICAgICB3ZXIgPSB3 -ZXIgfHwgeyB0eXA6ICdhbGxlJyB9OwogICAgICAgIGlmICh3ZXIudHlwID09PSAnZ3J1cHBlJykg -ICByZXR1cm4gc3RhdHMuZmlsdGVyKGZ1bmN0aW9uKHMpeyByZXR1cm4gcy5ncnVwcGUgPT09IHdl -ci53ZXJ0OyB9KTsKICAgICAgICBpZiAod2VyLnR5cCA9PT0gJ2Z1bmt0aW9uJykgcmV0dXJuIHN0 -YXRzLmZpbHRlcihmdW5jdGlvbihzKXsgcmV0dXJuIFN0cmluZyhzLmZ1bmt0aW9uIHx8ICcnKSA9 -PT0gU3RyaW5nKHdlci53ZXJ0KTsgfSk7CiAgICAgICAgcmV0dXJuIHN0YXRzOwogICAgfQogICAg -ZnVuY3Rpb24gX3dlckxhYmVsKHdlcikgewogICAgICAgIHdlciA9IHdlciB8fCB7IHR5cDogJ2Fs -bGUnIH07CiAgICAgICAgaWYgKHdlci50eXAgPT09ICdncnVwcGUnKSB7CiAgICAgICAgICAgIHZh -ciBnID0gKChaLmFkbWluLmdydXBwZW4gfHwgW10pLmZpbHRlcihmdW5jdGlvbih4KXsgcmV0dXJu -IHgubmFtZSA9PT0gd2VyLndlcnQ7IH0pWzBdKTsKICAgICAgICAgICAgcmV0dXJuICdHcnVwcGUg -JyArIChnID8gKGcuYmV6ZWljaG51bmcgfHwgZy5uYW1lKSA6IHdlci53ZXJ0KTsKICAgICAgICB9 -CiAgICAgICAgaWYgKHdlci50eXAgPT09ICdmdW5rdGlvbicpIHJldHVybiAnRnVua3Rpb24gJyAr -IHdlci53ZXJ0OwogICAgICAgIHJldHVybiAnQWxsZSc7CiAgICB9CgogICAgLy8gSG9yaXpvbnRh -bGVzIEJhbGtlbi1SYW5raW5nIGVpbmVyIEJhdWthc3Rlbi1LYWNoZWwgcmVuZGVybiAocmVpbmUK -ICAgIC8vIEhUTUwtRXJ6ZXVndW5nLCB3aWVkZXJ2ZXJ3ZW5kZXQgZGllIGJlc3RlaGVuZGVuIC5z -dGF0cy1iYWxrZW4tKi1TdGlsZSkuCiAgICBmdW5jdGlvbiBfa2FjaGVsRXJnZWJuaXNIdG1sKGth -Y2hlbCwgc3RhdHMpIHsKICAgICAgICB2YXIgbWV0cmlrID0gbWV0cmlrRmluZGVuKGthY2hlbC5t -ZXRyaWspOwogICAgICAgIGlmICghbWV0cmlrKSB7CiAgICAgICAgICAgIHJldHVybiAnPGRpdiBj -bGFzcz0iYWRtaW4tZW1wdHkiPjxkaXYgY2xhc3M9ImFkbWluLWVtcHR5LXRleHQiPlVuYmVrYW5u -dGUgTWV0cmlrIOKAnicgKyBlc2NhcGVIVE1MKGthY2hlbC5tZXRyaWsgfHwgJycpICsgJyIuPC9k -aXY+PC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubGVuZ3Ro -KSB7CiAgICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYWRtaW4tZW1wdHkiPjxkaXYgY2xh -c3M9ImFkbWluLWVtcHR5LXRleHQiPk5vY2gga2VpbmUgU3RhdGlzdGlrLURhdGVuIGdlbGFkZW4u -PC9kaXY+PC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgdmFyIHJvd3MgPSBfa2FjaGVsRmlsdGVy -bihzdGF0cywga2FjaGVsLndlcikubWFwKGZ1bmN0aW9uKHMpeyByZXR1cm4geyBzOiBzLCB3ZXJ0 -OiBtZXRyaWsuZm4ocykgfHwgMCB9OyB9KTsKICAgICAgICB2YXIgc29ydCA9IGthY2hlbC5zb3J0 -IHx8ICdkZXNjJzsKICAgICAgICByb3dzLnNvcnQoZnVuY3Rpb24oYSwgYil7CiAgICAgICAgICAg -IGlmIChzb3J0ID09PSAnbmFtZScpIHJldHVybiBfc3RhdEFuemVpZ2VOYW1lKGEucykubG9jYWxl -Q29tcGFyZShfc3RhdEFuemVpZ2VOYW1lKGIucyksICdkZScpOwogICAgICAgICAgICBpZiAoYS53 -ZXJ0ICE9PSBiLndlcnQpIHJldHVybiBzb3J0ID09PSAnYXNjJyA/IGEud2VydCAtIGIud2VydCA6 -IGIud2VydCAtIGEud2VydDsKICAgICAgICAgICAgcmV0dXJuIF9zdGF0QW56ZWlnZU5hbWUoYS5z -KS5sb2NhbGVDb21wYXJlKF9zdGF0QW56ZWlnZU5hbWUoYi5zKSwgJ2RlJyk7CiAgICAgICAgfSk7 -CiAgICAgICAgdmFyIHRvcE4gPSBrYWNoZWwudG9wTiB8fCAwOwogICAgICAgIGlmICh0b3BOID4g -MCkgcm93cyA9IHJvd3Muc2xpY2UoMCwgdG9wTik7CiAgICAgICAgaWYgKCFyb3dzLmxlbmd0aCkg -ewogICAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImFkbWluLWVtcHR5Ij48ZGl2IGNsYXNz -PSJhZG1pbi1lbXB0eS10ZXh0Ij5LZWluZSBQZXJzb25lbiBpbSBnZXfDpGhsdGVuIEZpbHRlci48 -L2Rpdj48L2Rpdj4nOwogICAgICAgIH0KICAgICAgICB2YXIgbWF4ViA9IE1hdGgubWF4LmFwcGx5 -KG51bGwsIHJvd3MubWFwKGZ1bmN0aW9uKHIpeyByZXR1cm4gci53ZXJ0OyB9KSkgfHwgMTsKICAg -ICAgICB2YXIga29wZiA9ICc8ZGl2IGNsYXNzPSJzdGF0cy1iYWxrZW4ta29wZiI+JyArCiAgICAg -ICAgICAgICc8ZGl2IGNsYXNzPSJzdGF0cy1iYWxrZW4tbmFtZSI+PC9kaXY+JyArCiAgICAgICAg -ICAgICc8ZGl2IGNsYXNzPSJzdGF0cy1iYWxrZW4tYmFyLXdyYXAiPjxzcGFuIGNsYXNzPSJzdGF0 -cy1iYWxrZW4ta29wZi1sYWJlbCI+JyArIGVzY2FwZUhUTUwobWV0cmlrLmxhYmVsKSArICc8L3Nw -YW4+PC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzdGF0cy1iYWxrZW4tdG90YWwi -PjxzcGFuIGNsYXNzPSJzdGF0cy1iYWxrZW4ta29wZi1sYWJlbCI+JyArIGVzY2FwZUhUTUwobWV0 -cmlrLmVpbmhlaXQgfHwgJycpICsgKHNvcnQgPT09ICdhc2MnID8gJyDihpEnIDogJyDihpMnKSAr -ICc8L3NwYW4+PC9kaXY+JyArCiAgICAgICAgICAgICc8L2Rpdj4nOwogICAgICAgIHZhciByYW5n -ID0gMDsKICAgICAgICB2YXIgemVpbGVuID0gcm93cy5tYXAoZnVuY3Rpb24ocil7CiAgICAgICAg -ICAgIHJhbmcrKzsKICAgICAgICAgICAgdmFyIGJyZWl0ZSA9IChyLndlcnQgLyBtYXhWKSAqIDEw -MDsKICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJzdGF0cy1iYWxrZW4temVpbGUiPicg -KwogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InN0YXRzLWJhbGtlbi1uYW1lIiB0aXRsZT0i -JyArIGVzY2FwZUF0dHIoX3N0YXRBbnplaWdlTmFtZShyLnMpKSArICciPjxzcGFuIGNsYXNzPSJz -dGF0cy1iay1yYW5nIj4nICsgcmFuZyArICcuPC9zcGFuPiAnICsgZXNjYXBlSFRNTChfc3RhdEFu -emVpZ2VOYW1lKHIucykpICsgJzwvZGl2PicgKwogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9 -InN0YXRzLWJhbGtlbi1iYXItd3JhcCI+PGRpdiBjbGFzcz0ic3RhdHMtYmFsa2VuLXNlZ21lbnQi -IHN0eWxlPSJ3aWR0aDonICsgYnJlaXRlICsgJyU7YmFja2dyb3VuZDp2YXIoLS1iZy1wcmltYXJ5 -KSIgdGl0bGU9IicgKyBlc2NhcGVBdHRyKG1ldHJpay5sYWJlbCArICc6ICcgKyByLndlcnQpICsg -JyI+JyArIChyLndlcnQgPiAwID8gci53ZXJ0IDogJycpICsgJzwvZGl2PjwvZGl2PicgKwogICAg -ICAgICAgICAgICAgJzxkaXYgY2xhc3M9InN0YXRzLWJhbGtlbi10b3RhbCI+JyArIHIud2VydCAr -ICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8L2Rpdj4nOwogICAgICAgIH0pLmpvaW4oJycp -OwogICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0ic3RhdHMtYmFsa2VuLWNvbnRhaW5lciI+JyAr -IGtvcGYgKyB6ZWlsZW4gKyAnPC9kaXY+JzsKICAgIH0KCiAgICAvLyBCYXVrYXN0ZW4tUGFuZWxz -IGltICNzdGF0cy1ncmlkIGFubGVnZW4vYWt0dWFsaXNpZXJlbi9lbnRmZXJuZW4uCiAgICBmdW5j -dGlvbiBjdXN0b21LYWNoZWxuUmVuZGVybigpIHsKICAgICAgICB2YXIgZ3JpZCA9IGRvY3VtZW50 -LmdldEVsZW1lbnRCeUlkKCdzdGF0cy1ncmlkJyk7CiAgICAgICAgaWYgKCFncmlkKSByZXR1cm47 -CiAgICAgICAgdmFyIHN0YXRzID0gWi5zdGF0aXN0aWsgfHwgW107CiAgICAgICAgdmFyIGthY2hl -bG4gPSBfYWxsZUthY2hlbG4oKTsKICAgICAgICB2YXIgZ2V3b2xsdCA9IHt9OwogICAgICAgIGth -Y2hlbG4uZm9yRWFjaChmdW5jdGlvbihrKXsgaWYgKGsgJiYgay5pZCkgZ2V3b2xsdFtrLmlkXSA9 -IHRydWU7IH0pOwogICAgICAgIC8vIFZlcndhaXN0ZSBDdXN0b20tUGFuZWxzIGVudGZlcm5lbiAo -S2FjaGVsIGdlbG9lc2NodCkuCiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZ3Jp -ZC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RhdHMtcGFuZWxbZGF0YS1rYWNoZWw9IjEiXScpKS5mb3JF -YWNoKGZ1bmN0aW9uKHApewogICAgICAgICAgICBpZiAoIWdld29sbHRbcC5nZXRBdHRyaWJ1dGUo -J2RhdGEtdGlsZS1pZCcpXSkgcC5yZW1vdmUoKTsKICAgICAgICB9KTsKICAgICAgICBrYWNoZWxu -LmZvckVhY2goZnVuY3Rpb24oayl7CiAgICAgICAgICAgIGlmICghayB8fCAhay5pZCkgcmV0dXJu -OwogICAgICAgICAgICB2YXIgcGFuZWwgPSBudWxsOwogICAgICAgICAgICB2YXIgdm9yaGFuZGVu -ZSA9IGdyaWQucXVlcnlTZWxlY3RvckFsbCgnLnN0YXRzLXBhbmVsW2RhdGEta2FjaGVsPSIxIl0n -KTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2b3JoYW5kZW5lLmxlbmd0aDsgaSsr -KSB7CiAgICAgICAgICAgICAgICBpZiAodm9yaGFuZGVuZVtpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEt -dGlsZS1pZCcpID09PSBrLmlkKSB7IHBhbmVsID0gdm9yaGFuZGVuZVtpXTsgYnJlYWs7IH0KICAg -ICAgICAgICAgfQogICAgICAgICAgICBpZiAoIXBhbmVsKSB7CiAgICAgICAgICAgICAgICBwYW5l -bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICAgICAgcGFuZWwu -Y2xhc3NOYW1lID0gJ3N0YXRzLXBhbmVsJzsKICAgICAgICAgICAgICAgIHBhbmVsLnNldEF0dHJp -YnV0ZSgnZGF0YS10aWxlLWlkJywgay5pZCk7CiAgICAgICAgICAgICAgICBwYW5lbC5zZXRBdHRy -aWJ1dGUoJ2RhdGEta2FjaGVsJywgJzEnKTsKICAgICAgICAgICAgICAgIHBhbmVsLnNldEF0dHJp -YnV0ZSgnZGF0YS1taW4tYnJlaXRlJywgJ2RyaXR0ZWwnKTsKICAgICAgICAgICAgICAgIGdyaWQu -YXBwZW5kQ2hpbGQocGFuZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBpc3RWMiA9 -IChrLmRpYWdyYW1tICE9IG51bGwpOwogICAgICAgICAgICB2YXIgdW50ZXJ6ZWlsZSA9IGlzdFYy -ID8gJycgOiBfd2VyTGFiZWwoay53ZXIpOwogICAgICAgICAgICBwYW5lbC5pbm5lckhUTUwgPQog -ICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InN0YXRzLXBhbmVsLWtvcGYiPicgKwogICAgICAg -ICAgICAgICAgICAgICc8aDM+PHNwYW4gY2xhc3M9InN0YXRzLWJrLWJhZGdlIiB0aXRsZT0iU2Vs -YnN0Z2ViYXV0ZSBTdGF0aXN0aWstS2FjaGVsIj5CYXVrYXN0ZW48L3NwYW4+ICcgKyBlc2NhcGVI -VE1MKGsudGl0ZWwgfHwgJ0VpZ2VuZSBTdGF0aXN0aWsnKSArICc8L2gzPicgKwogICAgICAgICAg -ICAgICAgICAgICh1bnRlcnplaWxlID8gJzxzcGFuIGNsYXNzPSJzdGF0cy1iay13ZXIiPicgKyBl -c2NhcGVIVE1MKHVudGVyemVpbGUpICsgJzwvc3Bhbj4nIDogJycpICsKICAgICAgICAgICAgICAg -ICc8L2Rpdj4nICsKICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzdGF0cy1jaGFydC1hcmVh -Ij4nICsgKGlzdFYyID8gX2thY2hlbFYySHRtbChrKSA6IF9rYWNoZWxFcmdlYm5pc0h0bWwoaywg -c3RhdHMpKSArICc8L2Rpdj4nOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIFNwZWMtdjItS2Fj -aGVsIChtZWhyZGltZW5zaW9uYWwpIHVlYmVyIEVuZ2luZSArIG5hdGl2ZSBTVkctQ2hhcnRzIHJl -bmRlcm4uCiAgICBmdW5jdGlvbiBfa2FjaGVsVjJIdG1sKGspIHsKICAgICAgICB0cnkgewogICAg -ICAgICAgICB2YXIgZXJnID0gYXVzd2VydGVuKGspOwogICAgICAgICAgICBpZiAoX3N0YXRBbm9u -QWt0aXYpIGVyZyA9IF9hbm9uRXJnZWJuaXMoZXJnKTsKICAgICAgICAgICAgcmV0dXJuIGRpYWdy -YW1tUmVuZGVybihrLmRpYWdyYW1tLCBlcmcsIGspOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAg -ICAgICAgICAgdHJ5IHsgY29uc29sZS5lcnJvcignW3N0YXRpc3Rpay1rYWNoZWxdJywgZSk7IH0g -Y2F0Y2ggKF8pIHt9CiAgICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYWRtaW4tZW1wdHki -PjxkaXYgY2xhc3M9ImFkbWluLWVtcHR5LXRleHQiPkZlaGxlciBiZWltIEJhdWVuOiAnICsgZXNj -YXBlSFRNTChlLm1lc3NhZ2UgfHwgU3RyaW5nKGUpKSArICc8L2Rpdj48L2Rpdj4nOwogICAgICAg -IH0KICAgIH0KICAgIC8vIFBlcnNvbmVuLUxhYmVscyBpbSBFcmdlYm5pcyBhbm9ueW1pc2llcmVu -IChzdGF0aXN0aWtBbm9ueW0pLiBHcmVpZnQgbnVyCiAgICAvLyBiZWkgUGVyc29uZW4tRGltZW5z -aW9uL1NjYXR0ZXIg4oCUIGFuZGVyZSBMYWJlbHMgc2luZCBuaWNodCBpbiBfc3RhdEFub25NYXAu -CiAgICBmdW5jdGlvbiBfYW5vbkVyZ2VibmlzKGVyZykgewogICAgICAgIGZ1bmN0aW9uIG0obCkg -eyByZXR1cm4gX3N0YXRBbm9uTWFwW2xdIHx8IGw7IH0KICAgICAgICBpZiAoZXJnLmthdGVnb3Jp -ZW4pIGVyZy5rYXRlZ29yaWVuID0gZXJnLmthdGVnb3JpZW4ubWFwKGZ1bmN0aW9uKGMpeyByZXR1 -cm4geyBrZXk6IGMua2V5LCBsYWJlbDogbShjLmxhYmVsKSB9OyB9KTsKICAgICAgICBpZiAoZXJn -LnNlcmllbikgICAgIGVyZy5zZXJpZW4gICAgID0gZXJnLnNlcmllbi5tYXAoZnVuY3Rpb24ocyl7 -IHJldHVybiB7IG5hbWU6IG0ocy5uYW1lKSwgd2VydGU6IHMud2VydGUgfTsgfSk7CiAgICAgICAg -aWYgKGVyZy5wdW5rdGUpICAgICBlcmcucHVua3RlICAgICA9IGVyZy5wdW5rdGUubWFwKGZ1bmN0 -aW9uKHApeyByZXR1cm4geyBsYWJlbDogbShwLmxhYmVsKSwgeDogcC54LCB5OiBwLnkgfTsgfSk7 -CiAgICAgICAgcmV0dXJuIGVyZzsKICAgIH0KCiAgICAvLyBSZWloZW5mb2xnZSArIEJyZWl0ZSAr -IFNpY2h0YmFya2VpdCBhbGxlciBUaWxlcyBhdXMgc3RhdGlzdGlrTGF5b3V0CiAgICAvLyBhbndl -bmRlbi4gUmVjaHRlLWJhc2llcnRlcyBWZXJzdGVja2VuIChpbmxpbmUgZGlzcGxheTpub25lLCBp -bgogICAgLy8gX3N0YXRpc3Rpa1JlbmRlcm5JbnRlcm4gZ2VzZXR6dCkgYmxlaWJ0IHVuYW5nZXRh -c3RldCDigJQgZGFzIFNVLUxheW91dAogICAgLy8gZGFyZiBlaW4gcmVjaHRlLWdlc3BlcnJ0ZXMg -UGFuZWwgTklDSFQgc2ljaHRiYXIgc2NoYWx0ZW47IGRlc2hhbGIgbGFldWZ0CiAgICAvLyBkaWUg -TGF5b3V0LVNpY2h0YmFya2VpdCB1ZWJlciBkaWUgS2xhc3NlIC50aWxlLXZlcnN0ZWNrdC4KICAg -IGZ1bmN0aW9uIGxheW91dEFud2VuZGVuKCkgewogICAgICAgIHZhciBncmlkID0gZG9jdW1lbnQu -Z2V0RWxlbWVudEJ5SWQoJ3N0YXRzLWdyaWQnKTsKICAgICAgICBpZiAoIWdyaWQpIHJldHVybjsK -ICAgICAgICB2YXIgbGF5b3V0ID0gX2xheW91dExpc3RlKCk7CiAgICAgICAgdmFyIGJyZWl0ZVZv -biA9IHt9LCBzaWNodGJhclZvbiA9IHt9OwogICAgICAgIGxheW91dC5mb3JFYWNoKGZ1bmN0aW9u -KGUpewogICAgICAgICAgICBpZiAoIWUgfHwgIWUuaWQpIHJldHVybjsKICAgICAgICAgICAgYnJl -aXRlVm9uW2UuaWRdICAgPSBlLmJyZWl0ZTsKICAgICAgICAgICAgc2ljaHRiYXJWb25bZS5pZF0g -PSAoZS5zaWNodGJhciAhPT0gZmFsc2UpOwogICAgICAgIH0pOwogICAgICAgIHZhciBhbGxlID0g -QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZ3JpZC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RhdHMt -cGFuZWwnKSk7CiAgICAgICAgdmFyIGJ5SWQgPSB7fTsKICAgICAgICBhbGxlLmZvckVhY2goZnVu -Y3Rpb24ocCl7IGJ5SWRbcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGlsZS1pZCcpXSA9IHA7IH0pOwog -ICAgICAgIC8vIDEpIEdlbGlzdGV0ZSBQYW5lbHMgaW4gTGF5b3V0LVJlaWhlbmZvbGdlIGFucyBF -bmRlIHNjaGllYmVuLgogICAgICAgIHZhciBnZXNldHp0ID0ge307CiAgICAgICAgbGF5b3V0LmZv -ckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIHZhciBwID0gYnlJZFtlLmlkXTsKICAgICAg -ICAgICAgaWYgKHApIHsgZ3JpZC5hcHBlbmRDaGlsZChwKTsgZ2VzZXR6dFtlLmlkXSA9IHRydWU7 -IH0KICAgICAgICB9KTsKICAgICAgICAvLyAyKSBOaWNodC1nZWxpc3RldGUgKG5ldWUgS2FjaGVs -IC8gRXJzdHN0YXJ0KSBpbiBET00tUmVpaGVuZm9sZ2UgZGFoaW50ZXIuCiAgICAgICAgYWxsZS5m -b3JFYWNoKGZ1bmN0aW9uKHApewogICAgICAgICAgICB2YXIgaWQgPSBwLmdldEF0dHJpYnV0ZSgn -ZGF0YS10aWxlLWlkJyk7CiAgICAgICAgICAgIGlmICghZ2VzZXR6dFtpZF0pIGdyaWQuYXBwZW5k -Q2hpbGQocCk7CiAgICAgICAgfSk7CiAgICAgICAgLy8gMykgQnJlaXRlICsgU2ljaHRiYXJrZWl0 -IHNldHplbi4KICAgICAgICBhbGxlLmZvckVhY2goZnVuY3Rpb24ocCl7CiAgICAgICAgICAgIHZh -ciBpZCA9IHAuZ2V0QXR0cmlidXRlKCdkYXRhLXRpbGUtaWQnKTsKICAgICAgICAgICAgdmFyIG1p -bkIgPSBwLmdldEF0dHJpYnV0ZSgnZGF0YS1taW4tYnJlaXRlJykgfHwgJ2RyaXR0ZWwnOwogICAg -ICAgICAgICB2YXIgYnJlaXRlID0gX2JyZWl0ZUNsYW1wKGJyZWl0ZVZvbltpZF0gfHwgX2RlZmF1 -bHRCcmVpdGUoaWQpLCBtaW5CKTsKICAgICAgICAgICAgcC5zdHlsZS5ncmlkQ29sdW1uID0gJ3Nw -YW4gJyArIEJSRUlURV9TUEFOW2JyZWl0ZV07CiAgICAgICAgICAgIHAuc2V0QXR0cmlidXRlKCdk -YXRhLWJyZWl0ZScsIGJyZWl0ZSk7CiAgICAgICAgICAgIHZhciBzaWNodGJhciA9IChpZCBpbiBz -aWNodGJhclZvbikgPyBzaWNodGJhclZvbltpZF0gOiB0cnVlOwogICAgICAgICAgICBpZiAoc2lj -aHRiYXIpIHAuY2xhc3NMaXN0LnJlbW92ZSgndGlsZS12ZXJzdGVja3QnKTsKICAgICAgICAgICAg -ZWxzZSBwLmNsYXNzTGlzdC5hZGQoJ3RpbGUtdmVyc3RlY2t0Jyk7CiAgICAgICAgfSk7CiAgICB9 -CgogICAgLy8gVGlsZS1VZWJlcnNpY2h0IGZ1ZXIgZGFzIEFkbWluLUxheW91dC1SYXN0ZXIgKGZl -c3RlIFBhbmVscyArIEJhdWthc3RlbiksCiAgICAvLyBqZXdlaWxzIHtpZCwgdGl0ZWwsIG1pbkJy -ZWl0ZSwgaXN0S2FjaGVsfS4gYWRtaW5fc3RhdGlzdGlrLmpzIG1pc2NodCBkYXMKICAgIC8vIG1p -dCBaLmFkbWluLnN0YXRpc3Rpa0xheW91dCAoUmVpaGVuZm9sZ2UvQnJlaXRlL1NpY2h0YmFya2Vp -dCkuCiAgICBmdW5jdGlvbiBzdGF0aXN0aWtUaWxlc0FsbGUoKSB7CiAgICAgICAgdmFyIG91dCA9 -IEJVSUxUSU5fVElMRVMubWFwKGZ1bmN0aW9uKHQpewogICAgICAgICAgICByZXR1cm4geyBpZDog -dC5pZCwgdGl0ZWw6IHQudGl0ZWwsIG1pbkJyZWl0ZTogdC5taW5CcmVpdGUsIGRlZmF1bHRCcmVp -dGU6IHQuZGVmYXVsdEJyZWl0ZSwgaXN0S2FjaGVsOiBmYWxzZSB9OwogICAgICAgIH0pOwogICAg -ICAgIF9hbGxlS2FjaGVsbigpLmZvckVhY2goZnVuY3Rpb24oayl7CiAgICAgICAgICAgIG91dC5w -dXNoKHsgaWQ6IGsuaWQsIHRpdGVsOiAoay50aXRlbCB8fCAnRWlnZW5lIFN0YXRpc3RpaycpLCBt -aW5CcmVpdGU6ICdkcml0dGVsJywgZGVmYXVsdEJyZWl0ZTogJ2hhbGInLCBpc3RLYWNoZWw6IHRy -dWUgfSk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIG91dDsKICAgIH0KCiAgICBmdW5jdGlv +JzsKaW1wb3J0IHsKICAgIGF1c3dlcnRlbiwKICAgIC8vIEthY2hlbC1LYXRhbG9nIGxpZWd0IHNl +aXQgdjEuNC41IGluIGRlciB1bmdlR0FURXRlbiBFbmdpbmUgKHNpZWhlIGRvcnQpOgogICAgLy8g +c28ga2FubiBhZG1pbl9zdGF0aXN0aWsuanMgZGllc2UgU3ltYm9sZSBpbXBvcnRpZXJlbiwgb2hu +ZSBzdGF0aXN0aWsuanMKICAgIC8vIChHQVRFLTQwNCkgc3RhdGlzY2ggaW4gZGllIE1vZHVsLUtl +dHRlIHJlZ3VsYWVyZXIgVXNlciB6dSB6aWVoZW4uCiAgICBCUkVJVEVfU1BBTiwgQlJFSVRFX1JB +TkcsIEJVSUxUSU5fVElMRVMsCiAgICBhbGxlS2FjaGVsbiBhcyBfYWxsZUthY2hlbG4sIHN0YXRp +c3Rpa1RpbGVzQWxsZQp9IGZyb20gJy4vc3RhdGlzdGlrX2VuZ2luZS5qcyc7CmltcG9ydCB7IGRp +YWdyYW1tUmVuZGVybiB9IGZyb20gJy4vc3RhdGlzdGlrX2NoYXJ0cy5qcyc7CgogICAgLy8gPT09 +PT0gU3RhdGlzdGlrID09PT09CgogICAgdmFyIHN0YXRGaWx0ZXIgPSAnYWxsZSc7CgogICAgLy8g +QW5vbnltaXNpZXJ1bmdzLU1hcHBpbmcgKENoZXJyeS1QaWNrIDFhZWZlMjYsIGhpbnRlciBUb2dn +bGUKICAgIC8vIGBmZWF0dXJlcy5zdGF0aXN0aWtBbm9ueW1gKS4gV2lyZCB6dSBCZWdpbm4gamVk +ZXMgc3RhdGlzdGlrUmVuZGVybigpCiAgICAvLyBuZXUgYXVmZ2ViYXV0OiBqZWRlciBzLm5hbWUg +LT4gIlBlcnNvbiBOIiBnZW1hZXNzIFJlaWhlbmZvbGdlIGluIHN0YXRzLgogICAgLy8gX3N0YXRB +bnplaWdlTmFtZShzKSBsaWVmZXJ0IGRlbiBhbnp1emVpZ2VuZGVuIE5hbWVuIOKAlCBiZWkgZGVh +a3RpdmVtCiAgICAvLyBGZWF0dXJlIGlzdCBkYXMgZWluZmFjaCBzLm5hbWUuCiAgICB2YXIgX3N0 +YXRBbm9uQWt0aXYgPSBmYWxzZTsKICAgIHZhciBfc3RhdEFub25NYXAgICA9IHt9OwogICAgZnVu +Y3Rpb24gX3N0YXRBbnplaWdlTmFtZShzKSB7CiAgICAgICAgaWYgKF9zdGF0QW5vbkFrdGl2KSBy +ZXR1cm4gX3N0YXRBbm9uTWFwW3MubmFtZV0gfHwgcy5uYW1lOwogICAgICAgIC8vIFNlcnZlciBs +aWVmZXJ0ICJOYWNobmFtZSwgVm9ybmFtZSIuIFdlbm4gZGVyIFZvcm5hbWUgbGVlciBpc3QsCiAg +ICAgICAgLy8gYmxlaWJ0IGVpbiBoYWVuZ2VuZGVzIEtvbW1hIOKAlCBhYnNjaG5laWRlbi4KICAg +ICAgICB2YXIgbiA9IHMubmFtZSB8fCAnJzsKICAgICAgICB2YXIgayA9IG4uaW5kZXhPZignLCcp +OwogICAgICAgIGlmIChrIDwgMCkgcmV0dXJuIG47CiAgICAgICAgdmFyIG5hY2ggPSBuLnN1YnN0 +cmluZyhrICsgMSkudHJpbSgpOwogICAgICAgIGlmICghbmFjaCkgcmV0dXJuIG4uc3Vic3RyaW5n +KDAsIGspLnRyaW0oKTsKICAgICAgICByZXR1cm4gbjsKICAgIH0KCiAgICAvLyBLYXRlZ29yaWUt +U3RhdGUgZnVlciBkaWUgQmFsa2VuLUFuc2ljaHQuIFNlc3Npb25zLWxva2FsLgogICAgLy8gQWt0 +aXZlIEthdGVnb3JpZSBiZXN0aW1tdCwgd2VsY2hlIFNlZ21lbnRlIGRlciBCYWxrZW4gemVpZ3Qg +dW5kIG5hY2gKICAgIC8vIHdlbGNoZW0gU3VtbWVuLUZlbGQgc29ydGllcnQgd2lyZC4KICAgIHZh +ciBfc3RhdEthdGVnb3JpZSAgICA9ICdzY2hpY2h0ZW4nOwogICAgdmFyIF9zdGF0U29ydFJpY2h0 +dW5nID0gJ2Rlc2MnOwoKICAgIC8vIEthdGVnb3JpZS1EZWZpbml0aW9uOiBwcm8gS2F0ZWdvcmll +IGVpbmUgTGlzdGUgdm9uIFNlZ21lbnRlbgogICAgLy8gKEZlbGQsIExhYmVsLCBGYXJiZSkgdW5k +IGRhcyBTdW1tZW4tRmVsZCBmdWVyIGRpZSBTb3J0aWVydW5nLgogICAgLy8gS3JhbmsgKGtyKSBp +c3QgQkVXVVNTVCBuaWNodCBlbnRoYWx0ZW4g4oCUIERhdGVuc2NodXR6LUFuZm9yZGVydW5nLAog +ICAgLy8gZXJzY2hlaW50IG51ciBpbiBkZXIgRGV0YWlsLVRhYmVsbGUgZ2FueiB1bnRlbi4KICAg +IHZhciBTVEFUX0tBVEVHT1JJRU4gPSB7CiAgICAgICAgc2NoaWNodGVuOiB7CiAgICAgICAgICAg +IGxhYmVsOiAnU2NoaWNodGVuJywKICAgICAgICAgICAgc2VnbWVudGU6IFsKICAgICAgICAgICAg +ICAgIHsgZmVsZDogJ2ZydWVoJywgICAgICAgIGxhYmVsOiAnRnLDvGgnLCAgICBmYXJiZTogJ3Zh +cigtLWZhcmJlLWZydWVoKScgfSwKICAgICAgICAgICAgICAgIHsgZmVsZDogJ3NwYWV0JywgICAg +ICAgIGxhYmVsOiAnU3DDpHQnLCAgICBmYXJiZTogJ3ZhcigtLWZhcmJlLXNwYWV0KScgfSwKICAg +ICAgICAgICAgICAgIHsgZmVsZDogJ25hY2h0JywgICAgICAgIGxhYmVsOiAnTmFjaHQnLCAgIGZh +cmJlOiAndmFyKC0tZmFyYmUtbmFjaHQpJyB9LAogICAgICAgICAgICAgICAgeyBmZWxkOiAnc29u +ZGVyZGllbnN0JywgbGFiZWw6ICdTRCcsICAgICAgZmFyYmU6ICd2YXIoLS1zdGF0LXNkKScgfQog +ICAgICAgICAgICBdLAogICAgICAgICAgICBzb3J0RmVsZDogJ2dlc2FtdCcsCiAgICAgICAgICAg +IHNvcnRMYWJlbDogJ86jIERpZW5zdGUnCiAgICAgICAgfSwKICAgICAgICB3b2NoZW5lbmRlOiB7 +CiAgICAgICAgICAgIGxhYmVsOiAnV29jaGVuZW5kZGllbnN0ZScsCiAgICAgICAgICAgIHNlZ21l +bnRlOiBbCiAgICAgICAgICAgICAgICB7IGZlbGQ6ICdzYW1zdGFnRGllbnN0ZScsICBsYWJlbDog +J1NhJywgICAgICAgZmFyYmU6ICd2YXIoLS1zdGF0LXNhbXN0YWcpJyB9LAogICAgICAgICAgICAg +ICAgeyBmZWxkOiAnc29ubnRhZ0RpZW5zdGUnLCAgbGFiZWw6ICdTbycsICAgICAgIGZhcmJlOiAn +dmFyKC0tc3RhdC1zb25udGFnKScgfSwKICAgICAgICAgICAgICAgIHsgZmVsZDogJ2ZlaWVydGFn +RGllbnN0ZScsIGxhYmVsOiAnRmVpZXJ0YWcnLCBmYXJiZTogJ3ZhcigtLXN0YXQtZmVpZXJ0YWcp +JyB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIC8vIEtvbXBsZXR0ZSBXRSB3aXJkIGFscyB6 +dXNhZXR6bGljaGUgS2VubnphaGwgcmVjaHRzIGdlemVpZ3QKICAgICAgICAgICAgZXh0cmE6IHsg +ZmVsZDogJ2tvbXBsZXR0ZVdFJywgbGFiZWw6ICdLb21wbGV0dGUgV0UnLCBmYXJiZTogJ3Zhcigt +LXN0YXQta29tcGxldHRlLXdlKScgfSwKICAgICAgICAgICAgLy8gU3VtbWUgdWViZXIgU2ErU28r +RmVpZXJ0YWcgKGNvbXB1dGVkKQogICAgICAgICAgICBzb3J0TGFiZWw6ICfOoyBXRStGZWllcnRh +ZycKICAgICAgICB9LAogICAgICAgIGZvcnRiaWxkdW5nOiB7CiAgICAgICAgICAgIGxhYmVsOiAn +Rm9ydGJpbGR1bmcnLAogICAgICAgICAgICBzZWdtZW50ZTogWwogICAgICAgICAgICAgICAgeyBm +ZWxkOiAnZm9ydGJpbGR1bmcnLCAgICAgIGxhYmVsOiAnQXVGL0VUTS9TZW0vVFQvVHpGJywgZmFy +YmU6ICd2YXIoLS1zdGF0LWZvcnRiaWxkdW5nLTEpJyB9LAogICAgICAgICAgICAgICAgeyBmZWxk +OiAnZGllbnN0dW50ZXJyaWNodCcsIGxhYmVsOiAnRFUnLCAgICAgICAgICAgICAgICAgIGZhcmJl +OiAndmFyKC0tc3RhdC1mb3J0YmlsZHVuZy0yKScgfSwKICAgICAgICAgICAgICAgIHsgZmVsZDog +J2xlaHJnYW5nTGFuZycsICAgICBsYWJlbDogJ0xHJywgICAgICAgICAgICAgICAgICBmYXJiZTog +J3ZhcigtLXN0YXQtZm9ydGJpbGR1bmctMyknIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAg +c29ydExhYmVsOiAnzqMgRm9ydGJpbGR1bmcnCiAgICAgICAgfSwKICAgICAgICBhYndlc2VuaGVp +dDogewogICAgICAgICAgICBsYWJlbDogJ0Fid2VzZW5oZWl0JywKICAgICAgICAgICAgLy8gS3Jh +bmsgYmV3dXNzdCBhdXNnZW5vbW1lbiAoRGF0ZW5zY2h1dHopLiBVcmxhdWIgKyBLdXIgKyBTb25k +ZXJ1cmxhdWIKICAgICAgICAgICAgLy8gc2luZCBkaWUgZmFpcmVuIFZlcmdsZWljaHN3ZXJ0ZS4K +ICAgICAgICAgICAgc2VnbWVudGU6IFsKICAgICAgICAgICAgICAgIHsgZmVsZDogJ3VybGF1Yics +ICAgICAgIGxhYmVsOiAnVXJsYXViJywgICAgICAgZmFyYmU6ICd2YXIoLS1zdGF0LXVybGF1Yikn +IH0sCiAgICAgICAgICAgICAgICB7IGZlbGQ6ICdrdXInLCAgICAgICAgICBsYWJlbDogJ0t1cics +ICAgICAgICAgIGZhcmJlOiAndmFyKC0tc3RhdC1rdXIpJyB9LAogICAgICAgICAgICAgICAgeyBm +ZWxkOiAnc29uZGVydXJsYXViJywgbGFiZWw6ICdTb25kZXJ1cmxhdWInLCBmYXJiZTogJ3Zhcigt +LXN0YXQtc29uZGVydXJsYXViKScgfQogICAgICAgICAgICBdLAogICAgICAgICAgICBzb3J0TGFi +ZWw6ICfOoyBBYndlc2VuaGVpdCcKICAgICAgICB9LAogICAgICAgIGVpbmdlc3BydW5nZW46IHsK +ICAgICAgICAgICAgbGFiZWw6ICdFaW5nZXNwcnVuZ2VuJywKICAgICAgICAgICAgLy8gQXVzc2Vy +cGxhbm1hZXNzaWdlIEF1ZnJ1ZWNrdW5nZW4gaW4gZGllIDEuLzIuIFZJMy1ER0wtCiAgICAgICAg +ICAgIC8vIFZlcmFudHdvcnR1bmcgaW5uZXJoYWxiIGRlciAxNC1UYWdlLVZlcmJpbmRsaWNoa2Vp +dC4gUHJvCiAgICAgICAgICAgIC8vIFNjaGljaHQgKEYvUy9OKSBhdWZnZXNjaGx1ZXNzZWx0IC0t +IGdsZWljaGUgRmFyYnBhbGV0dGUgd2llCiAgICAgICAgICAgIC8vIGRpZSBTY2hpY2h0ZW4tS2F0 +ZWdvcmllLCBkYW1pdCBkZXIgQmV6dWcgb3B0aXNjaCBrbGFyIGlzdC4KICAgICAgICAgICAgYmVz +Y2hyZWlidW5nOiAnSGllciB3ZXJkZW4gZGllIE1pdGFyYmVpdGVuZGVuIGF1ZmdlZsO8aHJ0LCBk +aWUgPGI+YXXDn2VycGxhbm3DpMOfaWcgaW5uZXJoYWxiIGRlciAxNC1UYWdlLVZlcmJpbmRsaWNo +a2VpdCBlaW5nZXNwcnVuZ2VuPC9iPiBzaW5kIHVuZCBpbiBkaWUgMS4gb2RlciAyLiBWSTMtREdM +LVZlcmFudHdvcnR1bmcgZWluZXIgU2NoaWNodCBhdWZnZXLDvGNrdCBzaW5kIOKAlCBlbnR3ZWRl +ciBkdXJjaCBTZXR6dW5nIGR1cmNoIGRpZSBWZXJhbnR3b3J0bGljaGVuIChNYWlsLURpYWxvZykg +b2RlciBkdXJjaCBTZWxic3RlaW50cmFndW5nIGF1cyB3YWNoZnJlaSAvIEFid2VzZW5oZWl0IGhl +cmF1cy4nLAogICAgICAgICAgICBzZWdtZW50ZTogWwogICAgICAgICAgICAgICAgeyBmZWxkOiAn +ZWluZ2VzcHJ1bmdlbl9mJywgbGFiZWw6ICdGcsO8aCcsICBmYXJiZTogJ3ZhcigtLWZhcmJlLWZy +dWVoKScgfSwKICAgICAgICAgICAgICAgIHsgZmVsZDogJ2Vpbmdlc3BydW5nZW5fcycsIGxhYmVs +OiAnU3DDpHQnLCAgZmFyYmU6ICd2YXIoLS1mYXJiZS1zcGFldCknIH0sCiAgICAgICAgICAgICAg +ICB7IGZlbGQ6ICdlaW5nZXNwcnVuZ2VuX24nLCBsYWJlbDogJ05hY2h0JywgZmFyYmU6ICd2YXIo +LS1mYXJiZS1uYWNodCknIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgc29ydEZlbGQ6ICAn +ZWluZ2VzcHJ1bmdlbicsCiAgICAgICAgICAgIHNvcnRMYWJlbDogJ86jIEVpbnNwcsO8bmdlJwog +ICAgICAgIH0KICAgIH07CgogICAgLy8gU3VtbWUgZGVyIEthdGVnb3JpZS1TZWdtZW50ZSBmdWVy +IGVpbmUgUGVyc29uIGVybWl0dGVsbi4KICAgIGZ1bmN0aW9uIF9zdGF0S2F0U3VtbWUocywga2F0 +KSB7CiAgICAgICAgaWYgKGthdC5zb3J0RmVsZCkgcmV0dXJuIHNba2F0LnNvcnRGZWxkXSB8fCAw +OwogICAgICAgIHZhciBzdW0gPSAwOwogICAgICAgIGthdC5zZWdtZW50ZS5mb3JFYWNoKGZ1bmN0 +aW9uKHNlZykgeyBzdW0gKz0gc1tzZWcuZmVsZF0gfHwgMDsgfSk7CiAgICAgICAgcmV0dXJuIHN1 +bTsKICAgIH0KCiAgICBmdW5jdGlvbiBzdGF0aXN0aWtGaWx0ZXJGdWVsbGVuKCkgewogICAgICAg +IC8vIEdydXBwZW4tRHJvcGRvd24gYXVzIGRlbSBha3R1ZWxsZW4gYWRtaW4uZ3J1cHBlbiBhdWZi +YXVlbiDigJQgc29uc3Qga29lbm5lbgogICAgICAgIC8vIHVtYmVuYW5udGUgR3J1cHBlbiBuaWNo +dCBtZWhyIGdlZmlsdGVydCB3ZXJkZW4uIExhYmVsIG9obmUgS3VlcnplbCwKICAgICAgICAvLyBu +dXIgZGllIEJlemVpY2hudW5nIChGYWxsYmFjayBhdWYgZGFzIEt1ZXJ6ZWwgd2VubiBrZWluZSBC +ZXplaWNobnVuZykuCiAgICAgICAgdmFyIHNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz +dGF0cy1ncnVwcGVuLWZpbHRlcicpOwogICAgICAgIGlmICghc2VsKSByZXR1cm47CiAgICAgICAg +dmFyIGFrdHVlbGwgPSBzZWwudmFsdWUgfHwgJ2FsbGUnOwogICAgICAgIHZhciBodG1sID0gJzxv +cHRpb24gdmFsdWU9ImFsbGUiPkFsbGUgRGllbnN0Z3J1cHBlbjwvb3B0aW9uPic7CiAgICAgICAg +KFouYWRtaW4uZ3J1cHBlbiB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihncikgewogICAgICAgICAg +ICB2YXIgbGFiZWwgPSBnci5iZXplaWNobnVuZyB8fCBnci5uYW1lOwogICAgICAgICAgICBodG1s +ICs9ICc8b3B0aW9uIHZhbHVlPSInICsgZXNjYXBlQXR0cihnci5uYW1lKSArICciPicgKyBlc2Nh +cGVIVE1MKGxhYmVsKSArICc8L29wdGlvbj4nOwogICAgICAgIH0pOwogICAgICAgIHNlbC5pbm5l +ckhUTUwgPSBodG1sOwogICAgICAgIHNlbC52YWx1ZSA9IGFrdHVlbGw7CiAgICB9CgogICAgZnVu +Y3Rpb24gc3RhdGlzdGlrTGFkZW4oKSB7CiAgICAgICAgc3RhdGlzdGlrRmlsdGVyRnVlbGxlbigp +OwogICAgICAgIC8vIFBha2V0LUMgKDIwMjYtMDUtMjkpOiBTb2ZvcnQtU3Bpbm5lciwgZGFtaXQg +ZGVyIFVzZXIgYmVpbSBUYWItV2VjaHNlbAogICAgICAgIC8vIG5pY2h0IGF1ZiBlaW5lbiBsZWVy +ZW4gQmVyZWljaCBzdGFycnQgd2FlaHJlbmQgYXBpKCkgbGFldWZ0LiBXaXJkCiAgICAgICAgLy8g +aW0gdGhlbi9jYXRjaCB3aWVkZXIgd2VnZ2Vub21tZW4sIGRhbmFjaCB1ZWJlcm5pbW10IGRpZSBi +ZXN0ZWhlbmRlCiAgICAgICAgLy8gU2tlbGV0b24tUmVuZGVyLVNjaHJpdHQtTG9naWsgKHNlcXVl +bnRpZWxsZXMgUmVuZGVybiBtaXQgR2xvdykuCiAgICAgICAgbGFkZU92ZXJsYXlaZWlnZW4oJ2Fu +c2ljaHQtc3RhdGlzdGlrJywgJ1N0YXRpc3RpayB3aXJkIGJlcmVjaG5ldCDigKYnKTsKICAgICAg +ICBhcGkoJy9hcGkvc3RhdGlzdGlrJykudGhlbihmdW5jdGlvbihkYXRlbikgewogICAgICAgICAg +ICBaLnN0YXRpc3RpayA9IGRhdGVuOwogICAgICAgICAgICBsYWRlT3ZlcmxheVZlcnN0ZWNrZW4o +J2Fuc2ljaHQtc3RhdGlzdGlrJyk7CiAgICAgICAgICAgIHN0YXRpc3Rpa1JlbmRlcm4oKTsKICAg +ICAgICB9KS5jYXRjaChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGxhZGVPdmVybGF5VmVyc3Rl +Y2tlbignYW5zaWNodC1zdGF0aXN0aWsnKTsKICAgICAgICAgICAgdG9hc3QoJ0ZlaGxlciBiZWlt +IExhZGVuIGRlciBTdGF0aXN0aWs6ICcgKyBlLm1lc3NhZ2UsICdmZWhsZXInKTsKICAgICAgICB9 +KTsKICAgIH0KCiAgICBmdW5jdGlvbiBzdGF0RmlsdGVybihzdGF0cykgewogICAgICAgIGlmIChz +dGF0RmlsdGVyID09PSAnYWxsZScpIHJldHVybiBzdGF0czsKICAgICAgICByZXR1cm4gc3RhdHMu +ZmlsdGVyKGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHMuZ3J1cHBlID09PSBzdGF0RmlsdGVyOyB9KTsK +ICAgIH0KCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT0KICAgIC8vID09PT09IE5vQ29kZS1TdGF0aXN0aWstQmF1a2FzdGVu +ICsgTGF5b3V0LVJhc3RlciA9PT09PT09PT09PQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTZWxic3RnZWJh +dXRlIEthY2hlbG4gKFouYWRtaW4uc3RhdGlzdGlrS2FjaGVsbikgZXJzY2hlaW5lbiBhbHMKICAg +IC8vIHp1c2FldHpsaWNoZSAuc3RhdHMtcGFuZWwgaW0gI3N0YXRzLWdyaWQuIFJlaWhlbmZvbGdl +L0JyZWl0ZS9TaWNodGJhcmtlaXQKICAgIC8vIEFMTEVSIFRpbGVzIChmZXN0ZSBQYW5lbHMgKyBC +YXVrYXN0ZW4pIHN0ZXVlcnQgWi5hZG1pbi5zdGF0aXN0aWtMYXlvdXQuCiAgICAvLyBCYXVlbiBk +YXJmIG51ciBTdXBlclVzZXIgKyBHZXNhbXR2ZXJhbnR3b3J0bGljaCAoQnVpbGRlciBsZWJ0IGhp +ZXIgaW0KICAgIC8vIFN0YXRpc3Rpay1UYWIpOyBkYXMgUmFzdGVyLUFub3JkbmVuIGxlYnQgaW0g +QWRtaW4gKGFkbWluX3N0YXRpc3Rpay5qcykuCiAgICAvLwogICAgLy8gV2ljaHRpZzogQmF1a2Fz +dGVuLUthY2hlbG4gdHJhZ2VuIGlocmVuIEVJR0VORU4gIldlciItRmlsdGVyIHVuZCByZWNobmVu +CiAgICAvLyBiZXd1c3N0IGdlZ2VuIGRpZSBWT0xMRSBaLnN0YXRpc3RpayAobmljaHQgZ2VnZW4g +ZGVuIGdsb2JhbGVuIEdydXBwZW4tCiAgICAvLyBGaWx0ZXIgb2Jlbikg4oCUIGVpbmUgZ2VzcGVp +Y2hlcnRlIEthY2hlbCBpc3QgZ2xvYmFsIHVuZCBzZWxic3QtZXJrbGFlcmVuZC4KCiAgICAvLyBC +UkVJVEVfU1BBTi9CUkVJVEVfUkFORy9CVUlMVElOX1RJTEVTIHdlcmRlbiBhdXMgc3RhdGlzdGlr +X2VuZ2luZS5qcwogICAgLy8gaW1wb3J0aWVydCAoc2llaGUgSW1wb3J0LUtvcGYpIOKAlCBkb3J0 +IGxpZWd0IGRlciBLYWNoZWwtS2F0YWxvZyB1bmdlR0FURXQuCgogICAgLy8gTWV0cmlrLUthdGFs +b2cgZnVlciBkZW4gQmF1a2FzdGVuLiBmbihzKSAtPiBaYWhsZW53ZXJ0IHBybyBQZXJzb24uCiAg +ICAvLyBLUkFOSyBpc3QgYmV3dXNzdCBOSUNIVCBlbnRoYWx0ZW4gKERhdGVuc2NodXR6LCB3aWUg +dWViZXJhbGwgc29uc3QpLgogICAgdmFyIEJBVUtBU1RFTl9NRVRSSUtFTiA9IFsKICAgICAgICB7 +IGtleTonZ2VzYW10JywgICAgICAgICAgZ3J1cHBlOidTY2hpY2h0ZW4nLCAgICAgICAgICAgIGxh +YmVsOidEaWVuc3RlIGdlc2FtdCcsICAgICAgICAgIGVpbmhlaXQ6J0RpZW5zdGUnLCBmbjpmdW5j +dGlvbihzKXtyZXR1cm4gcy5nZXNhbXR8fDA7fSB9LAogICAgICAgIHsga2V5OidmcnVlaCcsICAg +ICAgICAgICBncnVwcGU6J1NjaGljaHRlbicsICAgICAgICAgICAgbGFiZWw6J0Zyw7xoZGllbnN0 +ZScsICAgICAgICAgICAgIGVpbmhlaXQ6J0RpZW5zdGUnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4g +cy5mcnVlaHx8MDt9IH0sCiAgICAgICAgeyBrZXk6J3NwYWV0JywgICAgICAgICAgIGdydXBwZTon +U2NoaWNodGVuJywgICAgICAgICAgICBsYWJlbDonU3DDpHRkaWVuc3RlJywgICAgICAgICAgICAg +ZWluaGVpdDonRGllbnN0ZScsIGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLnNwYWV0fHwwO30gfSwK +ICAgICAgICB7IGtleTonbmFjaHQnLCAgICAgICAgICAgZ3J1cHBlOidTY2hpY2h0ZW4nLCAgICAg +ICAgICAgIGxhYmVsOidOYWNodGRpZW5zdGUnLCAgICAgICAgICAgIGVpbmhlaXQ6J0RpZW5zdGUn +LCBmbjpmdW5jdGlvbihzKXtyZXR1cm4gcy5uYWNodHx8MDt9IH0sCiAgICAgICAgeyBrZXk6J3Nv +bmRlcmRpZW5zdCcsICAgIGdydXBwZTonU2NoaWNodGVuJywgICAgICAgICAgICBsYWJlbDonU29u +ZGVyZGllbnN0ZSAoU0QvU0UpJywgICBlaW5oZWl0OidEaWVuc3RlJywgZm46ZnVuY3Rpb24ocyl7 +cmV0dXJuIHMuc29uZGVyZGllbnN0fHwwO30gfSwKICAgICAgICB7IGtleTonZGdsJywgICAgICAg +ICAgICAgZ3J1cHBlOidTY2hpY2h0ZW4nLCAgICAgICAgICAgIGxhYmVsOidER0wtRWluc8OkdHpl +JywgICAgICAgICAgICBlaW5oZWl0OidFaW5zw6R0emUnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4g +cy5kZ2x8fDA7fSB9LAogICAgICAgIHsga2V5Oid3ZGYnLCAgICAgICAgICAgICBncnVwcGU6J1Nj +aGljaHRlbicsICAgICAgICAgICAgbGFiZWw6J1dERi1FaW5zw6R0emUnLCAgICAgICAgICAgIGVp +bmhlaXQ6J0VpbnPDpHR6ZScsIGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLndkZnx8MDt9IH0sCiAg +ICAgICAgeyBrZXk6J2ZicCcsICAgICAgICAgICAgIGdydXBwZTonU2NoaWNodGVuJywgICAgICAg +ICAgICBsYWJlbDonRkJQLUVpbnPDpHR6ZScsICAgICAgICAgICAgZWluaGVpdDonRWluc8OkdHpl +JywgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIHMuZmJwfHwwO30gfSwKCiAgICAgICAgeyBrZXk6J3dl +X2Z0X2dlc2FtdCcsICAgIGdydXBwZTonV29jaGVuZW5kZSAmIEZlaWVydGFnJywgbGFiZWw6J1dF +LSAmIEZlaWVydGFnc2RpZW5zdGUnLCAgZWluaGVpdDonRGllbnN0ZScsIGZuOmZ1bmN0aW9uKHMp +e3JldHVybiAocy5zYW1zdGFnRGllbnN0ZXx8MCkrKHMuc29ubnRhZ0RpZW5zdGV8fDApKyhzLmZl +aWVydGFnRGllbnN0ZXx8MCk7fSB9LAogICAgICAgIHsga2V5OidzYW1zdGFnRGllbnN0ZScsICBn +cnVwcGU6J1dvY2hlbmVuZGUgJiBGZWllcnRhZycsIGxhYmVsOidTYW1zdGFnc2RpZW5zdGUnLCAg +ICAgICAgIGVpbmhlaXQ6J0RpZW5zdGUnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4gcy5zYW1zdGFn +RGllbnN0ZXx8MDt9IH0sCiAgICAgICAgeyBrZXk6J3Nvbm50YWdEaWVuc3RlJywgIGdydXBwZTon +V29jaGVuZW5kZSAmIEZlaWVydGFnJywgbGFiZWw6J1Nvbm50YWdzZGllbnN0ZScsICAgICAgICAg +ZWluaGVpdDonRGllbnN0ZScsIGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLnNvbm50YWdEaWVuc3Rl +fHwwO30gfSwKICAgICAgICB7IGtleTonZmVpZXJ0YWdEaWVuc3RlJywgZ3J1cHBlOidXb2NoZW5l +bmRlICYgRmVpZXJ0YWcnLCBsYWJlbDonRmVpZXJ0YWdzZGllbnN0ZScsICAgICAgICBlaW5oZWl0 +OidEaWVuc3RlJywgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIHMuZmVpZXJ0YWdEaWVuc3RlfHwwO30g +fSwKICAgICAgICB7IGtleTona29tcGxldHRlV0UnLCAgICAgZ3J1cHBlOidXb2NoZW5lbmRlICYg +RmVpZXJ0YWcnLCBsYWJlbDonS29tcGxldHRlIFdvY2hlbmVuZGVuJywgICBlaW5oZWl0OidXRScs +ICAgICAgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIHMua29tcGxldHRlV0V8fDA7fSB9LAogICAgICAg +IHsga2V5Oid3b2NoZW5lbmRUYWdlJywgICBncnVwcGU6J1dvY2hlbmVuZGUgJiBGZWllcnRhZycs +IGxhYmVsOidXRS1UYWdlIGltIERpZW5zdCcsICAgICAgIGVpbmhlaXQ6J1RhZ2UnLCAgICBmbjpm +dW5jdGlvbihzKXtyZXR1cm4gcy53b2NoZW5lbmRUYWdlfHwwO30gfSwKICAgICAgICB7IGtleTon +d2VUYWdlVmVyZnVlZ2JhcicsZ3J1cHBlOidXb2NoZW5lbmRlICYgRmVpZXJ0YWcnLCBsYWJlbDon +RnJlaWUgV0UtVGFnZSAodmVyZsO8Z2JhciknLGVpbmhlaXQ6J1RhZ2UnLCAgIGZuOmZ1bmN0aW9u +KHMpe3JldHVybiBzLndlVGFnZVZlcmZ1ZWdiYXJ8fDA7fSB9LAoKICAgICAgICB7IGtleTonZWlu +Z2VzcHJ1bmdlbicsICAgZ3J1cHBlOidFaW5zcHJpbmdlbicsICAgICAgICAgIGxhYmVsOidFaW5z +cHLDvG5nZSBnZXNhbXQnLCAgICAgICBlaW5oZWl0OidFaW5zcHLDvG5nZScsIGZuOmZ1bmN0aW9u +KHMpe3JldHVybiBzLmVpbmdlc3BydW5nZW58fDA7fSB9LAogICAgICAgIHsga2V5OidlaW5nZXNw +cnVuZ2VuX2YnLCBncnVwcGU6J0VpbnNwcmluZ2VuJywgICAgICAgICAgbGFiZWw6J0VpbnNwcsO8 +bmdlIEZyw7xoJywgICAgICAgICBlaW5oZWl0OidFaW5zcHLDvG5nZScsIGZuOmZ1bmN0aW9uKHMp +e3JldHVybiBzLmVpbmdlc3BydW5nZW5fZnx8MDt9IH0sCiAgICAgICAgeyBrZXk6J2Vpbmdlc3By +dW5nZW5fcycsIGdydXBwZTonRWluc3ByaW5nZW4nLCAgICAgICAgICBsYWJlbDonRWluc3Byw7xu +Z2UgU3DDpHQnLCAgICAgICAgIGVpbmhlaXQ6J0VpbnNwcsO8bmdlJywgZm46ZnVuY3Rpb24ocyl7 +cmV0dXJuIHMuZWluZ2VzcHJ1bmdlbl9zfHwwO30gfSwKICAgICAgICB7IGtleTonZWluZ2VzcHJ1 +bmdlbl9uJywgZ3J1cHBlOidFaW5zcHJpbmdlbicsICAgICAgICAgIGxhYmVsOidFaW5zcHLDvG5n +ZSBOYWNodCcsICAgICAgICBlaW5oZWl0OidFaW5zcHLDvG5nZScsIGZuOmZ1bmN0aW9uKHMpe3Jl +dHVybiBzLmVpbmdlc3BydW5nZW5fbnx8MDt9IH0sCgogICAgICAgIHsga2V5Oid1cmxhdWInLCAg +ICAgICAgICBncnVwcGU6J0Fid2VzZW5oZWl0ICYgRnJlaScsICAgbGFiZWw6J1VybGF1YnN0YWdl +JywgICAgICAgICAgICAgZWluaGVpdDonVGFnZScsIGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLnVy +bGF1Ynx8MDt9IH0sCiAgICAgICAgeyBrZXk6J2t1cicsICAgICAgICAgICAgIGdydXBwZTonQWJ3 +ZXNlbmhlaXQgJiBGcmVpJywgICBsYWJlbDonS3VyLVRhZ2UnLCAgICAgICAgICAgICAgICBlaW5o +ZWl0OidUYWdlJywgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIHMua3VyfHwwO30gfSwKICAgICAgICB7 +IGtleTonc29uZGVydXJsYXViJywgICAgZ3J1cHBlOidBYndlc2VuaGVpdCAmIEZyZWknLCAgIGxh +YmVsOidTb25kZXJ1cmxhdWInLCAgICAgICAgICAgIGVpbmhlaXQ6J1RhZ2UnLCBmbjpmdW5jdGlv +bihzKXtyZXR1cm4gcy5zb25kZXJ1cmxhdWJ8fDA7fSB9LAogICAgICAgIHsga2V5OidwYXJhZ3Jh +cGgyMScsICAgICBncnVwcGU6J0Fid2VzZW5oZWl0ICYgRnJlaScsICAgbGFiZWw6J8KnMjEgLyAy +MWEtVGFnZScsICAgICAgICAgIGVpbmhlaXQ6J1RhZ2UnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4g +cy5wYXJhZ3JhcGgyMXx8MDt9IH0sCiAgICAgICAgeyBrZXk6J2F6QXVzZ2xlaWNoUmVpbicsIGdy +dXBwZTonQWJ3ZXNlbmhlaXQgJiBGcmVpJywgICBsYWJlbDonQVotQXVzZ2xlaWNoJywgICAgICAg +ICAgICBlaW5oZWl0OidUYWdlJywgZm46ZnVuY3Rpb24ocyl7cmV0dXJuIHMuYXpBdXNnbGVpY2hS +ZWlufHwwO30gfSwKICAgICAgICB7IGtleTond2FjaGZyZWknLCAgICAgICAgZ3J1cHBlOidBYndl +c2VuaGVpdCAmIEZyZWknLCAgIGxhYmVsOidXYWNoZnJlaSAod2ZyKScsICAgICAgICAgIGVpbmhl +aXQ6J1RhZ2UnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4gcy53YWNoZnJlaXx8MDt9IH0sCiAgICAg +ICAgeyBrZXk6J2RpZW5zdGZyZWlUYWcnLCAgIGdydXBwZTonQWJ3ZXNlbmhlaXQgJiBGcmVpJywg +ICBsYWJlbDonRGllbnN0ZnJlaSAoZGZyKScsICAgICAgICBlaW5oZWl0OidUYWdlJywgZm46ZnVu +Y3Rpb24ocyl7cmV0dXJuIHMuZGllbnN0ZnJlaVRhZ3x8MDt9IH0sCgogICAgICAgIHsga2V5Oidm +b3J0YmlsZHVuZycsICAgICBncnVwcGU6J0F1cy0gJiBGb3J0YmlsZHVuZycsICAgbGFiZWw6J0Zv +cnRiaWxkdW5nIChBdUYvRVRNL1NlbS9UVC9UekYpJywgZWluaGVpdDonVGFnZScsIGZuOmZ1bmN0 +aW9uKHMpe3JldHVybiBzLmZvcnRiaWxkdW5nfHwwO30gfSwKICAgICAgICB7IGtleTonZGllbnN0 +dW50ZXJyaWNodCcsZ3J1cHBlOidBdXMtICYgRm9ydGJpbGR1bmcnLCAgIGxhYmVsOidEaWVuc3R1 +bnRlcnJpY2h0IChEVSknLCAgIGVpbmhlaXQ6J1RhZ2UnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4g +cy5kaWVuc3R1bnRlcnJpY2h0fHwwO30gfSwKICAgICAgICB7IGtleTonbGVocmdhbmdMYW5nJywg +ICAgZ3J1cHBlOidBdXMtICYgRm9ydGJpbGR1bmcnLCAgIGxhYmVsOidMZWhyZ2FuZyAoTEcpJywg +ICAgICAgICAgIGVpbmhlaXQ6J1RhZ2UnLCBmbjpmdW5jdGlvbihzKXtyZXR1cm4gcy5sZWhyZ2Fu +Z0xhbmd8fDA7fSB9LAogICAgICAgIHsga2V5OidsZWhyZ2FuZycsICAgICAgICBncnVwcGU6J0F1 +cy0gJiBGb3J0YmlsZHVuZycsICAgbGFiZWw6J0xlaHJnYW5nICsgRm9ydGJpbGR1bmcgZ2VzYW10 +JywgZWluaGVpdDonVGFnZScsIGZuOmZ1bmN0aW9uKHMpe3JldHVybiBzLmxlaHJnYW5nfHwwO30g +fQogICAgXTsKCiAgICAvLyBfYWxsZUthY2hlbG4oKSB3aXJkIGF1cyBzdGF0aXN0aWtfZW5naW5l +LmpzIGltcG9ydGllcnQgKGFsaWFzIGFsbGVLYWNoZWxuKS4KICAgIGZ1bmN0aW9uIF9sYXlvdXRM +aXN0ZSgpIHsKICAgICAgICB2YXIgYXJyID0gKFouYWRtaW4gJiYgWi5hZG1pbi5zdGF0aXN0aWtM +YXlvdXQpIHx8IFtdOwogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFycikgPyBhcnIgOiBb +XTsKICAgIH0KICAgIGZ1bmN0aW9uIG1ldHJpa0ZpbmRlbihrZXkpIHsKICAgICAgICBmb3IgKHZh +ciBpID0gMDsgaSA8IEJBVUtBU1RFTl9NRVRSSUtFTi5sZW5ndGg7IGkrKykgewogICAgICAgICAg +ICBpZiAoQkFVS0FTVEVOX01FVFJJS0VOW2ldLmtleSA9PT0ga2V5KSByZXR1cm4gQkFVS0FTVEVO +X01FVFJJS0VOW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGZ1 +bmN0aW9uIF9kZWZhdWx0QnJlaXRlKGlkKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBC +VUlMVElOX1RJTEVTLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChCVUlMVElOX1RJTEVT +W2ldLmlkID09PSBpZCkgcmV0dXJuIEJVSUxUSU5fVElMRVNbaV0uZGVmYXVsdEJyZWl0ZTsKICAg +ICAgICB9CiAgICAgICAgcmV0dXJuICdoYWxiJzsgLy8gQmF1a2FzdGVuLUthY2hlbG46IERlZmF1 +bHQgaGFsYmUgQnJlaXRlCiAgICB9CiAgICBmdW5jdGlvbiBfYnJlaXRlQ2xhbXAoYnJlaXRlLCBt +aW5CcmVpdGUpIHsKICAgICAgICBpZiAoIUJSRUlURV9TUEFOW2JyZWl0ZV0pIGJyZWl0ZSA9ICd2 +b2xsJzsKICAgICAgICBpZiAoIUJSRUlURV9TUEFOW21pbkJyZWl0ZV0pIG1pbkJyZWl0ZSA9ICdk +cml0dGVsJzsKICAgICAgICByZXR1cm4gKEJSRUlURV9SQU5HW2JyZWl0ZV0gPCBCUkVJVEVfUkFO +R1ttaW5CcmVpdGVdKSA/IG1pbkJyZWl0ZSA6IGJyZWl0ZTsKICAgIH0KCiAgICAvLyAiV2VyIi1G +aWx0ZXIgZWluZXIgS2FjaGVsIGFud2VuZGVuLgogICAgZnVuY3Rpb24gX2thY2hlbEZpbHRlcm4o +c3RhdHMsIHdlcikgewogICAgICAgIHdlciA9IHdlciB8fCB7IHR5cDogJ2FsbGUnIH07CiAgICAg +ICAgaWYgKHdlci50eXAgPT09ICdncnVwcGUnKSAgIHJldHVybiBzdGF0cy5maWx0ZXIoZnVuY3Rp +b24ocyl7IHJldHVybiBzLmdydXBwZSA9PT0gd2VyLndlcnQ7IH0pOwogICAgICAgIGlmICh3ZXIu +dHlwID09PSAnZnVua3Rpb24nKSByZXR1cm4gc3RhdHMuZmlsdGVyKGZ1bmN0aW9uKHMpeyByZXR1 +cm4gU3RyaW5nKHMuZnVua3Rpb24gfHwgJycpID09PSBTdHJpbmcod2VyLndlcnQpOyB9KTsKICAg +ICAgICByZXR1cm4gc3RhdHM7CiAgICB9CiAgICBmdW5jdGlvbiBfd2VyTGFiZWwod2VyKSB7CiAg +ICAgICAgd2VyID0gd2VyIHx8IHsgdHlwOiAnYWxsZScgfTsKICAgICAgICBpZiAod2VyLnR5cCA9 +PT0gJ2dydXBwZScpIHsKICAgICAgICAgICAgdmFyIGcgPSAoKFouYWRtaW4uZ3J1cHBlbiB8fCBb +XSkuZmlsdGVyKGZ1bmN0aW9uKHgpeyByZXR1cm4geC5uYW1lID09PSB3ZXIud2VydDsgfSlbMF0p +OwogICAgICAgICAgICByZXR1cm4gJ0dydXBwZSAnICsgKGcgPyAoZy5iZXplaWNobnVuZyB8fCBn +Lm5hbWUpIDogd2VyLndlcnQpOwogICAgICAgIH0KICAgICAgICBpZiAod2VyLnR5cCA9PT0gJ2Z1 +bmt0aW9uJykgcmV0dXJuICdGdW5rdGlvbiAnICsgd2VyLndlcnQ7CiAgICAgICAgcmV0dXJuICdB +bGxlJzsKICAgIH0KCiAgICAvLyBIb3Jpem9udGFsZXMgQmFsa2VuLVJhbmtpbmcgZWluZXIgQmF1 +a2FzdGVuLUthY2hlbCByZW5kZXJuIChyZWluZQogICAgLy8gSFRNTC1FcnpldWd1bmcsIHdpZWRl +cnZlcndlbmRldCBkaWUgYmVzdGVoZW5kZW4gLnN0YXRzLWJhbGtlbi0qLVN0aWxlKS4KICAgIGZ1 +bmN0aW9uIF9rYWNoZWxFcmdlYm5pc0h0bWwoa2FjaGVsLCBzdGF0cykgewogICAgICAgIHZhciBt +ZXRyaWsgPSBtZXRyaWtGaW5kZW4oa2FjaGVsLm1ldHJpayk7CiAgICAgICAgaWYgKCFtZXRyaWsp +IHsKICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhZG1pbi1lbXB0eSI+PGRpdiBjbGFz +cz0iYWRtaW4tZW1wdHktdGV4dCI+VW5iZWthbm50ZSBNZXRyaWsg4oCeJyArIGVzY2FwZUhUTUwo +a2FjaGVsLm1ldHJpayB8fCAnJykgKyAnIi48L2Rpdj48L2Rpdj4nOwogICAgICAgIH0KICAgICAg +ICBpZiAoIXN0YXRzIHx8ICFzdGF0cy5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuICc8ZGl2 +IGNsYXNzPSJhZG1pbi1lbXB0eSI+PGRpdiBjbGFzcz0iYWRtaW4tZW1wdHktdGV4dCI+Tm9jaCBr +ZWluZSBTdGF0aXN0aWstRGF0ZW4gZ2VsYWRlbi48L2Rpdj48L2Rpdj4nOwogICAgICAgIH0KICAg +ICAgICB2YXIgcm93cyA9IF9rYWNoZWxGaWx0ZXJuKHN0YXRzLCBrYWNoZWwud2VyKS5tYXAoZnVu +Y3Rpb24ocyl7IHJldHVybiB7IHM6IHMsIHdlcnQ6IG1ldHJpay5mbihzKSB8fCAwIH07IH0pOwog +ICAgICAgIHZhciBzb3J0ID0ga2FjaGVsLnNvcnQgfHwgJ2Rlc2MnOwogICAgICAgIHJvd3Muc29y +dChmdW5jdGlvbihhLCBiKXsKICAgICAgICAgICAgaWYgKHNvcnQgPT09ICduYW1lJykgcmV0dXJu +IF9zdGF0QW56ZWlnZU5hbWUoYS5zKS5sb2NhbGVDb21wYXJlKF9zdGF0QW56ZWlnZU5hbWUoYi5z +KSwgJ2RlJyk7CiAgICAgICAgICAgIGlmIChhLndlcnQgIT09IGIud2VydCkgcmV0dXJuIHNvcnQg +PT09ICdhc2MnID8gYS53ZXJ0IC0gYi53ZXJ0IDogYi53ZXJ0IC0gYS53ZXJ0OwogICAgICAgICAg +ICByZXR1cm4gX3N0YXRBbnplaWdlTmFtZShhLnMpLmxvY2FsZUNvbXBhcmUoX3N0YXRBbnplaWdl +TmFtZShiLnMpLCAnZGUnKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgdG9wTiA9IGthY2hlbC50 +b3BOIHx8IDA7CiAgICAgICAgaWYgKHRvcE4gPiAwKSByb3dzID0gcm93cy5zbGljZSgwLCB0b3BO +KTsKICAgICAgICBpZiAoIXJvd3MubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiAnPGRpdiBj +bGFzcz0iYWRtaW4tZW1wdHkiPjxkaXYgY2xhc3M9ImFkbWluLWVtcHR5LXRleHQiPktlaW5lIFBl +cnNvbmVuIGltIGdld8OkaGx0ZW4gRmlsdGVyLjwvZGl2PjwvZGl2Pic7CiAgICAgICAgfQogICAg +ICAgIHZhciBtYXhWID0gTWF0aC5tYXguYXBwbHkobnVsbCwgcm93cy5tYXAoZnVuY3Rpb24ocil7 +IHJldHVybiByLndlcnQ7IH0pKSB8fCAxOwogICAgICAgIHZhciBrb3BmID0gJzxkaXYgY2xhc3M9 +InN0YXRzLWJhbGtlbi1rb3BmIj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9InN0YXRzLWJh +bGtlbi1uYW1lIj48L2Rpdj4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9InN0YXRzLWJhbGtl +bi1iYXItd3JhcCI+PHNwYW4gY2xhc3M9InN0YXRzLWJhbGtlbi1rb3BmLWxhYmVsIj4nICsgZXNj +YXBlSFRNTChtZXRyaWsubGFiZWwpICsgJzwvc3Bhbj48L2Rpdj4nICsKICAgICAgICAgICAgJzxk +aXYgY2xhc3M9InN0YXRzLWJhbGtlbi10b3RhbCI+PHNwYW4gY2xhc3M9InN0YXRzLWJhbGtlbi1r +b3BmLWxhYmVsIj4nICsgZXNjYXBlSFRNTChtZXRyaWsuZWluaGVpdCB8fCAnJykgKyAoc29ydCA9 +PT0gJ2FzYycgPyAnIOKGkScgOiAnIOKGkycpICsgJzwvc3Bhbj48L2Rpdj4nICsKICAgICAgICAg +ICAgJzwvZGl2Pic7CiAgICAgICAgdmFyIHJhbmcgPSAwOwogICAgICAgIHZhciB6ZWlsZW4gPSBy +b3dzLm1hcChmdW5jdGlvbihyKXsKICAgICAgICAgICAgcmFuZysrOwogICAgICAgICAgICB2YXIg +YnJlaXRlID0gKHIud2VydCAvIG1heFYpICogMTAwOwogICAgICAgICAgICByZXR1cm4gJzxkaXYg +Y2xhc3M9InN0YXRzLWJhbGtlbi16ZWlsZSI+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFz +cz0ic3RhdHMtYmFsa2VuLW5hbWUiIHRpdGxlPSInICsgZXNjYXBlQXR0cihfc3RhdEFuemVpZ2VO +YW1lKHIucykpICsgJyI+PHNwYW4gY2xhc3M9InN0YXRzLWJrLXJhbmciPicgKyByYW5nICsgJy48 +L3NwYW4+ICcgKyBlc2NhcGVIVE1MKF9zdGF0QW56ZWlnZU5hbWUoci5zKSkgKyAnPC9kaXY+JyAr +CiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ic3RhdHMtYmFsa2VuLWJhci13cmFwIj48ZGl2 +IGNsYXNzPSJzdGF0cy1iYWxrZW4tc2VnbWVudCIgc3R5bGU9IndpZHRoOicgKyBicmVpdGUgKyAn +JTtiYWNrZ3JvdW5kOnZhcigtLWJnLXByaW1hcnkpIiB0aXRsZT0iJyArIGVzY2FwZUF0dHIobWV0 +cmlrLmxhYmVsICsgJzogJyArIHIud2VydCkgKyAnIj4nICsgKHIud2VydCA+IDAgPyByLndlcnQg +OiAnJykgKyAnPC9kaXY+PC9kaXY+JyArCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ic3Rh +dHMtYmFsa2VuLXRvdGFsIj4nICsgci53ZXJ0ICsgJzwvZGl2PicgKwogICAgICAgICAgICAgICAg +JzwvZGl2Pic7CiAgICAgICAgfSkuam9pbignJyk7CiAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNz +PSJzdGF0cy1iYWxrZW4tY29udGFpbmVyIj4nICsga29wZiArIHplaWxlbiArICc8L2Rpdj4nOwog +ICAgfQoKICAgIC8vIEJhdWthc3Rlbi1QYW5lbHMgaW0gI3N0YXRzLWdyaWQgYW5sZWdlbi9ha3R1 +YWxpc2llcmVuL2VudGZlcm5lbi4KICAgIGZ1bmN0aW9uIGN1c3RvbUthY2hlbG5SZW5kZXJuKCkg +ewogICAgICAgIHZhciBncmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXRzLWdyaWQn +KTsKICAgICAgICBpZiAoIWdyaWQpIHJldHVybjsKICAgICAgICB2YXIgc3RhdHMgPSBaLnN0YXRp +c3RpayB8fCBbXTsKICAgICAgICB2YXIga2FjaGVsbiA9IF9hbGxlS2FjaGVsbigpOwogICAgICAg +IHZhciBnZXdvbGx0ID0ge307CiAgICAgICAga2FjaGVsbi5mb3JFYWNoKGZ1bmN0aW9uKGspeyBp +ZiAoayAmJiBrLmlkKSBnZXdvbGx0W2suaWRdID0gdHJ1ZTsgfSk7CiAgICAgICAgLy8gVmVyd2Fp +c3RlIEN1c3RvbS1QYW5lbHMgZW50ZmVybmVuIChLYWNoZWwgZ2Vsb2VzY2h0KS4KICAgICAgICBB +cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChncmlkLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdGF0cy1w +YW5lbFtkYXRhLWthY2hlbD0iMSJdJykpLmZvckVhY2goZnVuY3Rpb24ocCl7CiAgICAgICAgICAg +IGlmICghZ2V3b2xsdFtwLmdldEF0dHJpYnV0ZSgnZGF0YS10aWxlLWlkJyldKSBwLnJlbW92ZSgp +OwogICAgICAgIH0pOwogICAgICAgIGthY2hlbG4uZm9yRWFjaChmdW5jdGlvbihrKXsKICAgICAg +ICAgICAgaWYgKCFrIHx8ICFrLmlkKSByZXR1cm47CiAgICAgICAgICAgIHZhciBwYW5lbCA9IG51 +bGw7CiAgICAgICAgICAgIHZhciB2b3JoYW5kZW5lID0gZ3JpZC5xdWVyeVNlbGVjdG9yQWxsKCcu +c3RhdHMtcGFuZWxbZGF0YS1rYWNoZWw9IjEiXScpOwogICAgICAgICAgICBmb3IgKHZhciBpID0g +MDsgaSA8IHZvcmhhbmRlbmUubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmICh2b3Jo +YW5kZW5lW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS10aWxlLWlkJykgPT09IGsuaWQpIHsgcGFuZWwg +PSB2b3JoYW5kZW5lW2ldOyBicmVhazsgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgh +cGFuZWwpIHsKICAgICAgICAgICAgICAgIHBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn +ZGl2Jyk7CiAgICAgICAgICAgICAgICBwYW5lbC5jbGFzc05hbWUgPSAnc3RhdHMtcGFuZWwnOwog +ICAgICAgICAgICAgICAgcGFuZWwuc2V0QXR0cmlidXRlKCdkYXRhLXRpbGUtaWQnLCBrLmlkKTsK +ICAgICAgICAgICAgICAgIHBhbmVsLnNldEF0dHJpYnV0ZSgnZGF0YS1rYWNoZWwnLCAnMScpOwog +ICAgICAgICAgICAgICAgcGFuZWwuc2V0QXR0cmlidXRlKCdkYXRhLW1pbi1icmVpdGUnLCAnZHJp +dHRlbCcpOwogICAgICAgICAgICAgICAgZ3JpZC5hcHBlbmRDaGlsZChwYW5lbCk7CiAgICAgICAg +ICAgIH0KICAgICAgICAgICAgdmFyIGlzdFYyID0gKGsuZGlhZ3JhbW0gIT0gbnVsbCk7CiAgICAg +ICAgICAgIHZhciB1bnRlcnplaWxlID0gaXN0VjIgPyAnJyA6IF93ZXJMYWJlbChrLndlcik7CiAg +ICAgICAgICAgIHBhbmVsLmlubmVySFRNTCA9CiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0i +c3RhdHMtcGFuZWwta29wZiI+JyArCiAgICAgICAgICAgICAgICAgICAgJzxoMz48c3BhbiBjbGFz +cz0ic3RhdHMtYmstYmFkZ2UiIHRpdGxlPSJTZWxic3RnZWJhdXRlIFN0YXRpc3Rpay1LYWNoZWwi +PkJhdWthc3Rlbjwvc3Bhbj4gJyArIGVzY2FwZUhUTUwoay50aXRlbCB8fCAnRWlnZW5lIFN0YXRp +c3RpaycpICsgJzwvaDM+JyArCiAgICAgICAgICAgICAgICAgICAgKHVudGVyemVpbGUgPyAnPHNw +YW4gY2xhc3M9InN0YXRzLWJrLXdlciI+JyArIGVzY2FwZUhUTUwodW50ZXJ6ZWlsZSkgKyAnPC9z +cGFuPicgOiAnJykgKwogICAgICAgICAgICAgICAgJzwvZGl2PicgKwogICAgICAgICAgICAgICAg +JzxkaXYgY2xhc3M9InN0YXRzLWNoYXJ0LWFyZWEiPicgKyAoaXN0VjIgPyBfa2FjaGVsVjJIdG1s +KGspIDogX2thY2hlbEVyZ2VibmlzSHRtbChrLCBzdGF0cykpICsgJzwvZGl2Pic7CiAgICAgICAg +fSk7CiAgICB9CgogICAgLy8gU3BlYy12Mi1LYWNoZWwgKG1laHJkaW1lbnNpb25hbCkgdWViZXIg +RW5naW5lICsgbmF0aXZlIFNWRy1DaGFydHMgcmVuZGVybi4KICAgIGZ1bmN0aW9uIF9rYWNoZWxW +Mkh0bWwoaykgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBlcmcgPSBhdXN3ZXJ0ZW4o +ayk7CiAgICAgICAgICAgIGlmIChfc3RhdEFub25Ba3RpdikgZXJnID0gX2Fub25FcmdlYm5pcyhl +cmcpOwogICAgICAgICAgICByZXR1cm4gZGlhZ3JhbW1SZW5kZXJuKGsuZGlhZ3JhbW0sIGVyZywg +ayk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICB0cnkgeyBjb25zb2xlLmVycm9y +KCdbc3RhdGlzdGlrLWthY2hlbF0nLCBlKTsgfSBjYXRjaCAoXykge30KICAgICAgICAgICAgcmV0 +dXJuICc8ZGl2IGNsYXNzPSJhZG1pbi1lbXB0eSI+PGRpdiBjbGFzcz0iYWRtaW4tZW1wdHktdGV4 +dCI+RmVobGVyIGJlaW0gQmF1ZW46ICcgKyBlc2NhcGVIVE1MKGUubWVzc2FnZSB8fCBTdHJpbmco +ZSkpICsgJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgfQogICAgfQogICAgLy8gUGVyc29uZW4tTGFi +ZWxzIGltIEVyZ2VibmlzIGFub255bWlzaWVyZW4gKHN0YXRpc3Rpa0Fub255bSkuIEdyZWlmdCBu +dXIKICAgIC8vIGJlaSBQZXJzb25lbi1EaW1lbnNpb24vU2NhdHRlciDigJQgYW5kZXJlIExhYmVs +cyBzaW5kIG5pY2h0IGluIF9zdGF0QW5vbk1hcC4KICAgIGZ1bmN0aW9uIF9hbm9uRXJnZWJuaXMo +ZXJnKSB7CiAgICAgICAgZnVuY3Rpb24gbShsKSB7IHJldHVybiBfc3RhdEFub25NYXBbbF0gfHwg +bDsgfQogICAgICAgIGlmIChlcmcua2F0ZWdvcmllbikgZXJnLmthdGVnb3JpZW4gPSBlcmcua2F0 +ZWdvcmllbi5tYXAoZnVuY3Rpb24oYyl7IHJldHVybiB7IGtleTogYy5rZXksIGxhYmVsOiBtKGMu +bGFiZWwpIH07IH0pOwogICAgICAgIGlmIChlcmcuc2VyaWVuKSAgICAgZXJnLnNlcmllbiAgICAg +PSBlcmcuc2VyaWVuLm1hcChmdW5jdGlvbihzKXsgcmV0dXJuIHsgbmFtZTogbShzLm5hbWUpLCB3 +ZXJ0ZTogcy53ZXJ0ZSB9OyB9KTsKICAgICAgICBpZiAoZXJnLnB1bmt0ZSkgICAgIGVyZy5wdW5r +dGUgICAgID0gZXJnLnB1bmt0ZS5tYXAoZnVuY3Rpb24ocCl7IHJldHVybiB7IGxhYmVsOiBtKHAu +bGFiZWwpLCB4OiBwLngsIHk6IHAueSB9OyB9KTsKICAgICAgICByZXR1cm4gZXJnOwogICAgfQoK +ICAgIC8vIFJlaWhlbmZvbGdlICsgQnJlaXRlICsgU2ljaHRiYXJrZWl0IGFsbGVyIFRpbGVzIGF1 +cyBzdGF0aXN0aWtMYXlvdXQKICAgIC8vIGFud2VuZGVuLiBSZWNodGUtYmFzaWVydGVzIFZlcnN0 +ZWNrZW4gKGlubGluZSBkaXNwbGF5Om5vbmUsIGluCiAgICAvLyBfc3RhdGlzdGlrUmVuZGVybklu +dGVybiBnZXNldHp0KSBibGVpYnQgdW5hbmdldGFzdGV0IOKAlCBkYXMgU1UtTGF5b3V0CiAgICAv +LyBkYXJmIGVpbiByZWNodGUtZ2VzcGVycnRlcyBQYW5lbCBOSUNIVCBzaWNodGJhciBzY2hhbHRl +bjsgZGVzaGFsYiBsYWV1ZnQKICAgIC8vIGRpZSBMYXlvdXQtU2ljaHRiYXJrZWl0IHVlYmVyIGRp +ZSBLbGFzc2UgLnRpbGUtdmVyc3RlY2t0LgogICAgZnVuY3Rpb24gbGF5b3V0QW53ZW5kZW4oKSB7 +CiAgICAgICAgdmFyIGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhdHMtZ3JpZCcp +OwogICAgICAgIGlmICghZ3JpZCkgcmV0dXJuOwogICAgICAgIHZhciBsYXlvdXQgPSBfbGF5b3V0 +TGlzdGUoKTsKICAgICAgICB2YXIgYnJlaXRlVm9uID0ge30sIHNpY2h0YmFyVm9uID0ge307CiAg +ICAgICAgbGF5b3V0LmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIGlmICghZSB8fCAh +ZS5pZCkgcmV0dXJuOwogICAgICAgICAgICBicmVpdGVWb25bZS5pZF0gICA9IGUuYnJlaXRlOwog +ICAgICAgICAgICBzaWNodGJhclZvbltlLmlkXSA9IChlLnNpY2h0YmFyICE9PSBmYWxzZSk7CiAg +ICAgICAgfSk7CiAgICAgICAgdmFyIGFsbGUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChn +cmlkLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdGF0cy1wYW5lbCcpKTsKICAgICAgICB2YXIgYnlJZCA9 +IHt9OwogICAgICAgIGFsbGUuZm9yRWFjaChmdW5jdGlvbihwKXsgYnlJZFtwLmdldEF0dHJpYnV0 +ZSgnZGF0YS10aWxlLWlkJyldID0gcDsgfSk7CiAgICAgICAgLy8gMSkgR2VsaXN0ZXRlIFBhbmVs +cyBpbiBMYXlvdXQtUmVpaGVuZm9sZ2UgYW5zIEVuZGUgc2NoaWViZW4uCiAgICAgICAgdmFyIGdl +c2V0enQgPSB7fTsKICAgICAgICBsYXlvdXQuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgICAgICAg +ICAgdmFyIHAgPSBieUlkW2UuaWRdOwogICAgICAgICAgICBpZiAocCkgeyBncmlkLmFwcGVuZENo +aWxkKHApOyBnZXNldHp0W2UuaWRdID0gdHJ1ZTsgfQogICAgICAgIH0pOwogICAgICAgIC8vIDIp +IE5pY2h0LWdlbGlzdGV0ZSAobmV1ZSBLYWNoZWwgLyBFcnN0c3RhcnQpIGluIERPTS1SZWloZW5m +b2xnZSBkYWhpbnRlci4KICAgICAgICBhbGxlLmZvckVhY2goZnVuY3Rpb24ocCl7CiAgICAgICAg +ICAgIHZhciBpZCA9IHAuZ2V0QXR0cmlidXRlKCdkYXRhLXRpbGUtaWQnKTsKICAgICAgICAgICAg +aWYgKCFnZXNldHp0W2lkXSkgZ3JpZC5hcHBlbmRDaGlsZChwKTsKICAgICAgICB9KTsKICAgICAg +ICAvLyAzKSBCcmVpdGUgKyBTaWNodGJhcmtlaXQgc2V0emVuLgogICAgICAgIGFsbGUuZm9yRWFj +aChmdW5jdGlvbihwKXsKICAgICAgICAgICAgdmFyIGlkID0gcC5nZXRBdHRyaWJ1dGUoJ2RhdGEt +dGlsZS1pZCcpOwogICAgICAgICAgICB2YXIgbWluQiA9IHAuZ2V0QXR0cmlidXRlKCdkYXRhLW1p +bi1icmVpdGUnKSB8fCAnZHJpdHRlbCc7CiAgICAgICAgICAgIHZhciBicmVpdGUgPSBfYnJlaXRl +Q2xhbXAoYnJlaXRlVm9uW2lkXSB8fCBfZGVmYXVsdEJyZWl0ZShpZCksIG1pbkIpOwogICAgICAg +ICAgICBwLnN0eWxlLmdyaWRDb2x1bW4gPSAnc3BhbiAnICsgQlJFSVRFX1NQQU5bYnJlaXRlXTsK +ICAgICAgICAgICAgcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnJlaXRlJywgYnJlaXRlKTsKICAgICAg +ICAgICAgdmFyIHNpY2h0YmFyID0gKGlkIGluIHNpY2h0YmFyVm9uKSA/IHNpY2h0YmFyVm9uW2lk +XSA6IHRydWU7CiAgICAgICAgICAgIGlmIChzaWNodGJhcikgcC5jbGFzc0xpc3QucmVtb3ZlKCd0 +aWxlLXZlcnN0ZWNrdCcpOwogICAgICAgICAgICBlbHNlIHAuY2xhc3NMaXN0LmFkZCgndGlsZS12 +ZXJzdGVja3QnKTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvLyBUaWxlLVVlYmVyc2ljaHQgZnVl +ciBkYXMgQWRtaW4tTGF5b3V0LVJhc3RlciAoZmVzdGUgUGFuZWxzICsgQmF1a2FzdGVuKSwKICAg +IC8vIGpld2VpbHMge2lkLCB0aXRlbCwgbWluQnJlaXRlLCBpc3RLYWNoZWx9LiBhZG1pbl9zdGF0 +aXN0aWsuanMgbWlzY2h0IGRhcwogICAgLy8gbWl0IFouYWRtaW4uc3RhdGlzdGlrTGF5b3V0IChS +ZWloZW5mb2xnZS9CcmVpdGUvU2ljaHRiYXJrZWl0KS4KICAgIC8vIHN0YXRpc3Rpa1RpbGVzQWxs +ZSgpIHdpcmQgYXVzIHN0YXRpc3Rpa19lbmdpbmUuanMgaW1wb3J0aWVydC4KCiAgICBmdW5jdGlv biBzdGF0aXN0aWtSZW5kZXJuKCkgewogICAgICAgIGlmICghWi5zdGF0aXN0aWspIHJldHVybjsK ICAgICAgICB0cnkgewogICAgICAgICAgICBfc3RhdGlzdGlrUmVuZGVybkludGVybigpOwogICAg ICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgcmVuZGVyRXJyb3JCb3goZG9jdW1lbnQuZ2V0 @@ -4499,9 +4481,10 @@ aWx0ZXJTZXR6ZW4od2VydCkgeyBzdGF0RmlsdGVyID0gd2VydDsgfQoKZXhwb3J0IHsKICAgIHN0 YXRpc3Rpa0ZpbHRlckZ1ZWxsZW4sIHN0YXRpc3Rpa0xhZGVuLCBzdGF0RmlsdGVybiwgc3RhdGlz dGlrUmVuZGVybiwKICAgIHN0YXRGaWx0ZXJTZXR6ZW4sCiAgICBwcm9zYVJlbmRlcm4sIHByb3Nh QW5yZWRlLCBwcm9zYVRleHQsCiAgICBzdGF0SW5mb1plaWdlbiwga3BpS2FydGUsCiAgICBiYWxr -ZW5SZW5kZXJuLAogICAgZmFpcm5lc3NSZW5kZXJuLAogICAgZGV0YWlsVGFiZWxsZVJlbmRlcm4s -CiAgICAvLyBCYXVrYXN0ZW4gKyBMYXlvdXQtUmFzdGVyIChhZG1pbl9zdGF0aXN0aWsuanMga29u -c3VtaWVydCBkaWVzZSk6CiAgICBzdGF0aXN0aWtUaWxlc0FsbGUsIEJSRUlURV9TUEFOCn07Cg== +ZW5SZW5kZXJuLAogICAgZmFpcm5lc3NSZW5kZXJuLAogICAgZGV0YWlsVGFiZWxsZVJlbmRlcm4K +ICAgIC8vIHN0YXRpc3Rpa1RpbGVzQWxsZSArIEJSRUlURV9TUEFOIHdlcmRlbiBzZWl0IHYxLjQu +NSBkaXJla3QgYXVzCiAgICAvLyBzdGF0aXN0aWtfZW5naW5lLmpzIGV4cG9ydGllcnQ7IGFkbWlu +X3N0YXRpc3Rpay5qcyBpbXBvcnRpZXJ0IHZvbiBkb3J0Lgp9Owo= ### FILE: js/statistik_charts.js | 18511 Ly8gPT09IHN0YXRpc3Rpa19jaGFydHMuanMgPT09Ci8vIE5hdGl2ZSBTVkctRGlhZ3JhbW1lIGZ1 ZXIgZGVuIFN0YXRpc3Rpay1CdWlsZGVyIOKAlCBrZWluZSBleHRlcm5lIExpYnJhcnkuCi8vIEVp @@ -4828,7 +4811,7 @@ JzwvZGl2PjxkaXYgY2xhc3M9InN0YXRzLWtwaS1sYWJlbCI+JyArIGVzY2FwZUhUTUwody5sYWJl bCkgKyAnPC9kaXY+PC9kaXY+JzsKICAgIH0pLmpvaW4oJycpOwogICAgcmV0dXJuICc8ZGl2IGNs YXNzPSJzdGF0LWtwaS13cmFwIj4nICsga2FydGVuICsgJzxkaXYgY2xhc3M9InN0YXRzLWtwaXMg c3RhdC1rcGktbWluaSI+JyArIHRvcCArICc8L2Rpdj48L2Rpdj4nOwp9Cg== -### FILE: js/statistik_engine.js | 19010 +### FILE: js/statistik_engine.js | 21368 Ly8gPT09IHN0YXRpc3Rpa19lbmdpbmUuanMgPT09Ci8vIE1laHJkaW1lbnNpb25hbGUgQW5hbHlz ZS1FbmdpbmUgZnVlciBkZW4gU3RhdGlzdGlrLUJ1aWxkZXIgKFBpdm90LWFydGlnKS4KLy8KLy8g SWRlZTogYXVzIFoucGxhbnVuZy5laW50cmFlZ2UgKyBaLnBlcnNvbmVuICsgWi5hZG1pbiB3aXJk @@ -4841,328 +4824,369 @@ aXN0aWtfY2hhcnRzLmpzIHJlbmRlcnQgZXMgYWxzIFNWRy4KLy8gS2VpbmUgU2VydmVyLUFlbmRl cnVuZyBub2V0aWcg4oCUIGFsbGVzIGxhZXVmdCBhdWYgYmVyZWl0cyBnZWxhZGVuZW4gRGF0ZW4u CgppbXBvcnQgeyBaIH0gZnJvbSAnLi9jb3JlX3N0YXRlLmpzJzsKaW1wb3J0IHsgcGlkS2V5LCBk YXR1bVN0ciwgaXN0V29jaGVuZW5kZSB9IGZyb20gJy4vY29yZV91dGlsLmpzJzsKaW1wb3J0IHsg -ZmVpZXJ0YWdJbmZvIH0gZnJvbSAnLi9mZWllcnRhZ2VfZGUuanMnOwoKLy8gPT09PT0gQ29kZS1L -bGFzc2lmaXppZXJ1bmcgKHNwaWVnZWx0IHNlcnZlci5weSBfaGFuZGxlX3N0YXRpc3RpaykgPT09 -PT0KCnZhciBTT05ERVJfQ09ERVMgICAgICA9IFsnU0QnLCAnU0UnXTsKdmFyIEZPUlRCSUxEVU5H -X0NPREVTID0gWydBdUYnLCAnRVRNJywgJ1NlbScsICdUVCcsICdUekYnXTsKdmFyIEZSRUlfQ09E -RVMgICAgICAgID0gWyd3ZnInLCAnZGZyJywgJ8KnMjEnLCAnMjFhJ107CnZhciBBQldFU0VORF9D -T0RFUyAgICA9IFsnVXJsJywgJ2tyJywgJ0t1cicsICdTVScsICdMRycsICdEVScsICdCVicsICdh -YmcnLCAnQkFPJywgJ0hPJywgJ2FidycsICdYWFgnXTsKCmZ1bmN0aW9uIF9zY2hpY2h0Vm9uKGNv -ZGUpIHsKICAgIGlmICgvXkYtL2kudGVzdChjb2RlKSkgcmV0dXJuICdGJzsKICAgIGlmICgvXlMt -L2kudGVzdChjb2RlKSkgcmV0dXJuICdTJzsKICAgIGlmICgvXk4tL2kudGVzdChjb2RlKSkgcmV0 -dXJuICdOJzsKICAgIHJldHVybiAnJzsKfQpmdW5jdGlvbiBfcm9sbGVWb24oY29kZSkgewogICAg -Ly8gRi1ER0wgLT4gREdMLCBTLVdERiAtPiBXREYsIE4tRkJQIC0+IEZCUAogICAgaWYgKGNvZGUg -JiYgY29kZS5sZW5ndGggPj0gNSAmJiBjb2RlLmNoYXJBdCgxKSA9PT0gJy0nKSB7CiAgICAgICAg -dmFyIHIgPSBjb2RlLnN1YnN0cmluZygyLCA1KTsKICAgICAgICBpZiAociA9PT0gJ0RHTCcgfHwg -ciA9PT0gJ1dERicgfHwgciA9PT0gJ0ZCUCcpIHJldHVybiByOwogICAgfQogICAgcmV0dXJuICcn -Owp9CmZ1bmN0aW9uIF9pc3REaWVuc3QoY29kZSkgewogICAgcmV0dXJuIF9zY2hpY2h0Vm9uKGNv -ZGUpICE9PSAnJyB8fCBTT05ERVJfQ09ERVMuaW5kZXhPZihjb2RlKSA+PSAwOwp9CmZ1bmN0aW9u -IF9ncm9ia2xhc3NlKGNvZGUpIHsKICAgIC8vIEdyb2JlIFRhZy1BcnQgZnVlciBkaWUgS2F0ZWdv -cmllLURpbWVuc2lvbi4KICAgIGlmIChfc2NoaWNodFZvbihjb2RlKSkgcmV0dXJuICdEaWVuc3Qn -OwogICAgaWYgKFNPTkRFUl9DT0RFUy5pbmRleE9mKGNvZGUpID49IDApIHJldHVybiAnU29uZGVy -ZGllbnN0JzsKICAgIGlmIChGT1JUQklMRFVOR19DT0RFUy5pbmRleE9mKGNvZGUpID49IDAgfHwg -Y29kZSA9PT0gJ0xHJykgcmV0dXJuICdBdXMtL0ZvcnRiaWxkdW5nJzsKICAgIGlmIChbJ1VybCcs -ICdTVSddLmluZGV4T2YoY29kZSkgPj0gMCkgcmV0dXJuICdVcmxhdWInOwogICAgaWYgKFsna3In -LCAnS3VyJ10uaW5kZXhPZihjb2RlKSA+PSAwKSByZXR1cm4gJ0tyYW5rL0t1cic7CiAgICBpZiAo -RlJFSV9DT0RFUy5pbmRleE9mKGNvZGUpID49IDApIHJldHVybiAnRnJlaSc7CiAgICByZXR1cm4g -J1NvbnN0aWdlcyc7Cn0KCi8vID09PT09IEthbGVuZGVyLUhpbGZlbiA9PT09PQoKdmFyIF9mZWll -cnRhZ1NldCA9IG51bGwsIF9mZXJpZW5TZXQgPSBudWxsLCBfa2FsZW5kZXJTaWcgPSBudWxsOwoK -ZnVuY3Rpb24gX2thbGVuZGVyQXVmYmF1ZW4oKSB7CiAgICB2YXIgc2lnID0gKFouYWRtaW4gJiYg -KFouYWRtaW4uZmVpZXJ0YWdlIHx8IFtdKS5sZW5ndGggKyAneCcgKyAoWi5hZG1pbi5mZXJpZW4g -fHwgW10pLmxlbmd0aCkgfHwgJyc7CiAgICBpZiAoX2thbGVuZGVyU2lnID09PSBzaWcgJiYgX2Zl -aWVydGFnU2V0KSByZXR1cm47CiAgICBfa2FsZW5kZXJTaWcgPSBzaWc7CiAgICAvLyBXZXJ0ID0g -QmV6ZWljaG51bmcgKGZ1ZXIgYWRtaW4tZWlnZW5lIEZlaWVydGFnZSBvaG5lIEthdGFsb2ctVHJl -ZmZlciksCiAgICAvLyBtaW5kZXN0ZW5zIGFiZXIgYHRydWVgLiBLYXRhbG9nIChidW5kZXN3ZWl0 -L05SVykga29tbXQgenVzYWV0emxpY2ggaW4KICAgIC8vIGZha3RlbkJhdWVuIGRhenUuCiAgICBf -ZmVpZXJ0YWdTZXQgPSB7fTsKICAgIChaLmFkbWluICYmIFouYWRtaW4uZmVpZXJ0YWdlIHx8IFtd -KS5mb3JFYWNoKGZ1bmN0aW9uKGYpIHsKICAgICAgICBpZiAoZiAmJiBmLmRhdHVtICYmIGYuYWt0 -aXYgIT09IGZhbHNlKSBfZmVpZXJ0YWdTZXRbZi5kYXR1bV0gPSBmLmJlemVpY2hudW5nIHx8IHRy -dWU7CiAgICB9KTsKICAgIF9mZXJpZW5TZXQgPSB7fTsKICAgIChaLmFkbWluICYmIFouYWRtaW4u -ZmVyaWVuIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGZwKSB7CiAgICAgICAgaWYgKCFmcCB8fCAh -ZnAudm9uIHx8ICFmcC5iaXMpIHJldHVybjsKICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGZwLnZv -biArICdUMDA6MDA6MDAnKSwgZW5kZSA9IG5ldyBEYXRlKGZwLmJpcyArICdUMDA6MDA6MDAnKTsK -ICAgICAgICB2YXIgc2NodXR6ID0gMDsKICAgICAgICB3aGlsZSAoZCA8PSBlbmRlICYmIHNjaHV0 -eiA8IDQwMCkgeyBfZmVyaWVuU2V0W2RhdHVtU3RyKGQpXSA9IHRydWU7IGQuc2V0RGF0ZShkLmdl -dERhdGUoKSArIDEpOyBzY2h1dHorKzsgfQogICAgfSk7Cn0KCi8vIElTTy1LYWxlbmRlcndvY2hl -IChNby1iYXNpZXJ0KS4KZnVuY3Rpb24gX2lzb0tXKGQpIHsKICAgIHZhciB0ID0gbmV3IERhdGUo -ZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpKTsKICAgIHZhciB0YWcg -PSAodC5nZXREYXkoKSArIDYpICUgNzsgICAgICAgICAgICAvLyBNbz0wIOKApiBTbz02CiAgICB0 -LnNldERhdGUodC5nZXREYXRlKCkgLSB0YWcgKyAzKTsgICAgICAgICAgLy8gRG9ubmVyc3RhZyBk -aWVzZXIgV29jaGUKICAgIHZhciBqYWhyU3RhcnQgPSBuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCks -IDAsIDQpOwogICAgdmFyIGt3ID0gMSArIE1hdGgucm91bmQoKCh0IC0gamFoclN0YXJ0KSAvIDg2 -NDAwMDAwIC0gMyArICgoamFoclN0YXJ0LmdldERheSgpICsgNikgJSA3KSkgLyA3KTsKICAgIHJl -dHVybiB7IGphaHI6IHQuZ2V0RnVsbFllYXIoKSwga3c6IGt3IH07Cn0KCnZhciBXT0NIRU5UQUdF -ID0gWydTbycsICdNbycsICdEaScsICdNaScsICdEbycsICdGcicsICdTYSddOwp2YXIgTU9OQVRT -TkFNRU4gPSBbJ0phbicsICdGZWInLCAnTcOkcicsICdBcHInLCAnTWFpJywgJ0p1bicsICdKdWwn -LCAnQXVnJywgJ1NlcCcsICdPa3QnLCAnTm92JywgJ0RleiddOwoKLy8gPT09PT0gRmFrdGVudGFi -ZWxsZSA9PT09PQoKdmFyIF9mYWt0ZW5DYWNoZSA9IG51bGwsIF9mYWt0ZW5TaWcgPSBudWxsOwoK -ZnVuY3Rpb24gX3BlcnNvbkluZGV4KCkgewogICAgdmFyIGlkeCA9IHt9OwogICAgKFoucGVyc29u -ZW4gfHwgW10pLmZvckVhY2goZnVuY3Rpb24ocCkgeyBpZHhbcGlkS2V5KHAuaWQpXSA9IHA7IH0p -OwogICAgcmV0dXJuIGlkeDsKfQoKLy8gQmF1dCAodW5kIGNhY2hlZCkgZGllIEZha3RlbnRhYmVs -bGU6IGVpbmUgWmVpbGUgcHJvIFBlcnNvbsOXVGFnw5dDb2RlLgpleHBvcnQgZnVuY3Rpb24gZmFr -dGVuQmF1ZW4oKSB7CiAgICB2YXIgZWludHIgPSAoWi5wbGFudW5nICYmIFoucGxhbnVuZy5laW50 -cmFlZ2UpIHx8IHt9OwogICAgdmFyIHNpZyA9IE9iamVjdC5rZXlzKGVpbnRyKS5sZW5ndGggKyAn -OicgKyAoWi5wZXJzb25lbiB8fCBbXSkubGVuZ3RoICsgJzonICsgKFoudGFnZSB8fCBbXSkubGVu -Z3RoOwogICAgaWYgKF9mYWt0ZW5TaWcgPT09IHNpZyAmJiBfZmFrdGVuQ2FjaGUpIHJldHVybiBf -ZmFrdGVuQ2FjaGU7CiAgICBfa2FsZW5kZXJBdWZiYXVlbigpOwogICAgdmFyIHBJZHggPSBfcGVy -c29uSW5kZXgoKTsKICAgIHZhciBmYWt0ZW4gPSBbXTsKICAgIHZhciB0YWdlID0gKFoudGFnZSAm -JiBaLnRhZ2UubGVuZ3RoKSA/IFoudGFnZS5tYXAoZGF0dW1TdHIpIDogT2JqZWN0LmtleXMoZWlu -dHIpLnNvcnQoKTsKICAgIHRhZ2UuZm9yRWFjaChmdW5jdGlvbihkYXR1bSkgewogICAgICAgIHZh -ciB0YWcgPSBlaW50cltkYXR1bV07CiAgICAgICAgaWYgKCF0YWcpIHJldHVybjsKICAgICAgICB2 -YXIgZCA9IG5ldyBEYXRlKGRhdHVtICsgJ1QwMDowMDowMCcpOwogICAgICAgIHZhciB3ZCA9IGQu -Z2V0RGF5KCk7CiAgICAgICAgdmFyIGlzbyA9IF9pc29LVyhkKTsKICAgICAgICB2YXIgbW9uYXQg -PSBkYXR1bS5zdWJzdHJpbmcoMCwgNyk7ICAgICAgICAgICAgICAgICAvLyAnWVlZWS1NTScKICAg -ICAgICBPYmplY3Qua2V5cyh0YWcpLmZvckVhY2goZnVuY3Rpb24ocGlkKSB7CiAgICAgICAgICAg -IHZhciBjb2RlID0gdGFnW3BpZF07CiAgICAgICAgICAgIGlmICghY29kZSkgcmV0dXJuOwogICAg -ICAgICAgICB2YXIgcCA9IHBJZHhbcGlkXTsKICAgICAgICAgICAgaWYgKCFwKSByZXR1cm47ICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5ha3RpdmUvdmVyc3RlY2t0ZSBQZXJz -b24gLT4gbmljaHQgZ2V6YWVobHQKICAgICAgICAgICAgLy8gRmVpZXJ0YWdzLUtsYXNzaWZpa2F0 -aW9uOiBLYXRhbG9nIChidW5kZXN3ZWl0L05SVykgaGF0IFZvcnJhbmcsCiAgICAgICAgICAgIC8v -IHNvbnN0IGFkbWluLWVpZ2VuZXIgRmVpZXJ0YWcgKC0+IFR5cCAnc29uc3RpZ2UnKS4gaXN0RmVp -ZXJ0YWcKICAgICAgICAgICAgLy8gYmxlaWJ0IHRydWUsIHNvYmFsZCBlaW5lIGRlciBiZWlkZW4g -UXVlbGxlbiBncmVpZnQuCiAgICAgICAgICAgIHZhciBrYXRJbmZvID0gZmVpZXJ0YWdJbmZvKGRh -dHVtKTsKICAgICAgICAgICAgdmFyIGFkbWluRnQgPSBfZmVpZXJ0YWdTZXRbZGF0dW1dOwogICAg -ICAgICAgICB2YXIgZnROYW1lID0gJycsIGZ0VHlwID0gJyc7CiAgICAgICAgICAgIGlmIChrYXRJ -bmZvKSB7IGZ0TmFtZSA9IGthdEluZm8ubmFtZTsgZnRUeXAgPSBrYXRJbmZvLnR5cDsgfQogICAg -ICAgICAgICBlbHNlIGlmIChhZG1pbkZ0KSB7IGZ0TmFtZSA9ICh0eXBlb2YgYWRtaW5GdCA9PT0g -J3N0cmluZycpID8gYWRtaW5GdCA6ICcnOyBmdFR5cCA9ICdzb25zdGlnZSc7IH0KICAgICAgICAg -ICAgZmFrdGVuLnB1c2goewogICAgICAgICAgICAgICAgcGVyc29uSWQ6IHBpZCwKICAgICAgICAg -ICAgICAgIHBlcnNvbkxhYmVsOiBfcGVyc29uTGFiZWwocCksCiAgICAgICAgICAgICAgICBncnVw -cGU6IHAuZ3J1cHBlIHx8ICfigJQnLAogICAgICAgICAgICAgICAgZnVua3Rpb246IHAuZnVua3Rp -b24gfHwgJ+KAlCcsCiAgICAgICAgICAgICAgICBzdGFuZG9ydDogcC5vZSB8fCAn4oCUJywKICAg -ICAgICAgICAgICAgIGRpZW5zdGdyYWQ6IHAuZGllbnN0Z3JhZCB8fCAn4oCUJywKICAgICAgICAg -ICAgICAgIGRhdHVtOiBkYXR1bSwKICAgICAgICAgICAgICAgIGphaHI6IFN0cmluZyhkLmdldEZ1 -bGxZZWFyKCkpLAogICAgICAgICAgICAgICAgbW9uYXQ6IG1vbmF0LAogICAgICAgICAgICAgICAg -bW9uYXRMYWJlbDogTU9OQVRTTkFNRU5bZC5nZXRNb250aCgpXSArICcgJyArIGQuZ2V0RnVsbFll -YXIoKSwKICAgICAgICAgICAgICAgIGt3S2V5OiBpc28uamFociArICctJyArIChpc28ua3cgPCAx -MCA/ICcwJyA6ICcnKSArIGlzby5rdywKICAgICAgICAgICAgICAgIGt3TGFiZWw6ICdLVyAnICsg -aXNvLmt3LAogICAgICAgICAgICAgICAgd29jaGVudGFnOiB3ZCwKICAgICAgICAgICAgICAgIHdv -Y2hlbnRhZ0xhYmVsOiBXT0NIRU5UQUdFW3dkXSwKICAgICAgICAgICAgICAgIGlzdFdFOiBpc3RX -b2NoZW5lbmRlKGQpLAogICAgICAgICAgICAgICAgaXN0RmVpZXJ0YWc6ICEhYWRtaW5GdCB8fCAh -IWthdEluZm8sCiAgICAgICAgICAgICAgICBmZWllcnRhZ05hbWU6IGZ0TmFtZSwKICAgICAgICAg -ICAgICAgIGZlaWVydGFnVHlwOiBmdFR5cCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICdi -dW5kZXN3ZWl0JyB8ICducncnIHwgJ3NvbnN0aWdlJyB8ICcnCiAgICAgICAgICAgICAgICBpc3RG -ZXJpZW46ICEhX2ZlcmllblNldFtkYXR1bV0sCiAgICAgICAgICAgICAgICBjb2RlOiBjb2RlLAog -ICAgICAgICAgICAgICAgc2NoaWNodDogX3NjaGljaHRWb24oY29kZSksCiAgICAgICAgICAgICAg -ICByb2xsZTogX3JvbGxlVm9uKGNvZGUpLAogICAgICAgICAgICAgICAga2F0ZWdvcmllOiBfZ3Jv -YmtsYXNzZShjb2RlKSwKICAgICAgICAgICAgICAgIGlzdERpZW5zdDogX2lzdERpZW5zdChjb2Rl -KQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0pOwogICAgX2Zha3RlbkNhY2hlID0g -ZmFrdGVuOyBfZmFrdGVuU2lnID0gc2lnOwogICAgcmV0dXJuIGZha3RlbjsKfQoKZnVuY3Rpb24g -X3BlcnNvbkxhYmVsKHApIHsKICAgIHZhciBuID0gKHAubmFtZSB8fCAnJykudHJpbSgpOwogICAg -dmFyIHYgPSAocC52b3JuYW1lIHx8ICcnKS50cmltKCk7CiAgICByZXR1cm4gdiA/IChuICsgJywg -JyArIHYpIDogbjsKfQoKLy8gPT09PT0gRGltZW5zaW9uZW4gKEdyb3VwLWJ5LUFjaHNlbikgPT09 -PT0KLy8gd2VydChmKSAtPiBTY2hsdWVzc2VsICh6dWdsZWljaCBTb3J0aWVya3JpdGVyaXVtIGZ1 -ZXIgJ3plaXQnLU9yZG51bmcpLAovLyBsYWJlbChrZXkpIC0+IEFuemVpZ2UuIG9yZG51bmc6ICdu -YXR1cicgKGFscGhhYmV0aXNjaC9XZXJ0KSB8ICd6ZWl0JyB8ICdmaXgnLgoKZXhwb3J0IHZhciBE -SU1FTlNJT05FTiA9IFsKICAgIHsga2V5OiAnZ3J1cHBlJywgICAgIGxhYmVsOiAnRGllbnN0Z3J1 -cHBlJywgb3JkbnVuZzogJ25hdHVyJywgd2VydDogZnVuY3Rpb24oZil7IHJldHVybiBmLmdydXBw -ZTsgfSB9LAogICAgeyBrZXk6ICdmdW5rdGlvbicsICAgbGFiZWw6ICdGdW5rdGlvbicsICAgICBv -cmRudW5nOiAnbmF0dXInLCB3ZXJ0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYuZnVua3Rpb247IH0g -fSwKICAgIHsga2V5OiAnc3RhbmRvcnQnLCAgIGxhYmVsOiAnU3RhbmRvcnQnLCAgICAgb3JkbnVu -ZzogJ25hdHVyJywgd2VydDogZnVuY3Rpb24oZil7IHJldHVybiBmLnN0YW5kb3J0OyB9IH0sCiAg -ICB7IGtleTogJ2RpZW5zdGdyYWQnLCBsYWJlbDogJ0RpZW5zdGdyYWQnLCAgIG9yZG51bmc6ICdu -YXR1cicsIHdlcnQ6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5kaWVuc3RncmFkOyB9IH0sCiAgICB7 -IGtleTogJ3BlcnNvbicsICAgICBsYWJlbDogJ1BlcnNvbicsICAgICAgIG9yZG51bmc6ICduYXR1 -cicsIHdlcnQ6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5wZXJzb25MYWJlbDsgfSB9LAogICAgeyBr -ZXk6ICdrYXRlZ29yaWUnLCAgbGFiZWw6ICdUYWctS2F0ZWdvcmllJywgb3JkbnVuZzogJ25hdHVy -Jywgd2VydDogZnVuY3Rpb24oZil7IHJldHVybiBmLmthdGVnb3JpZTsgfSB9LAogICAgeyBrZXk6 -ICdzY2hpY2h0JywgICAgbGFiZWw6ICdTY2hpY2h0IChGL1MvTiknLCBvcmRudW5nOiAnZml4Jywg -Zml4UmVpaGU6IFsnRicsICdTJywgJ04nLCAn4oCUJ10sCiAgICAgICAgd2VydDogZnVuY3Rpb24o -Zil7IHJldHVybiBmLnNjaGljaHQgfHwgJ+KAlCc7IH0sIGxhYmVsMjogZnVuY3Rpb24oayl7IHJl -dHVybiAoe0Y6J0Zyw7xoJywgUzonU3DDpHQnLCBOOidOYWNodCcsICfigJQnOidrZWluIERpZW5z -dCd9KVtrXSB8fCBrOyB9IH0sCiAgICB7IGtleTogJ3JvbGxlJywgICAgICBsYWJlbDogJ0RHTC9X -REYvRkJQJywgIG9yZG51bmc6ICdmaXgnLCBmaXhSZWloZTogWydER0wnLCAnV0RGJywgJ0ZCUCcs -ICfigJQnXSwKICAgICAgICB3ZXJ0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYucm9sbGUgfHwgJ+KA -lCc7IH0gfSwKICAgIHsga2V5OiAnY29kZScsICAgICAgIGxhYmVsOiAnU2NoaWNodGNvZGUnLCAg -b3JkbnVuZzogJ25hdHVyJywgd2VydDogZnVuY3Rpb24oZil7IHJldHVybiBmLmNvZGU7IH0gfSwK -ICAgIHsga2V5OiAnbW9uYXQnLCAgICAgIGxhYmVsOiAnTW9uYXQnLCAgICAgICAgb3JkbnVuZzog -J3plaXQnLCB3ZXJ0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYubW9uYXQ7IH0sIGxhYmVsMjogZnVu -Y3Rpb24oaywgZil7IHJldHVybiBmID8gZi5tb25hdExhYmVsIDogazsgfSB9LAogICAgeyBrZXk6 -ICdrdycsICAgICAgICAgbGFiZWw6ICdLYWxlbmRlcndvY2hlJywgb3JkbnVuZzogJ3plaXQnLCB3 -ZXJ0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYua3dLZXk7IH0sIGxhYmVsMjogZnVuY3Rpb24oaywg -Zil7IHJldHVybiBmID8gZi5rd0xhYmVsIDogazsgfSB9LAogICAgeyBrZXk6ICd3b2NoZW50YWcn -LCAgbGFiZWw6ICdXb2NoZW50YWcnLCAgICBvcmRudW5nOiAnZml4JywgZml4UmVpaGU6IFsnTW8n -LCAnRGknLCAnTWknLCAnRG8nLCAnRnInLCAnU2EnLCAnU28nXSwKICAgICAgICB3ZXJ0OiBmdW5j -dGlvbihmKXsgcmV0dXJuIGYud29jaGVudGFnTGFiZWw7IH0gfSwKICAgIHsga2V5OiAnamFocics -ICAgICAgIGxhYmVsOiAnSmFocicsICAgICAgICAgb3JkbnVuZzogJ3plaXQnLCB3ZXJ0OiBmdW5j -dGlvbihmKXsgcmV0dXJuIGYuamFocjsgfSB9LAogICAgeyBrZXk6ICdpc3RXRScsICAgICAgbGFi -ZWw6ICdXb2NoZW5lbmRlPycsICBvcmRudW5nOiAnZml4JywgZml4UmVpaGU6IFsnV29jaGVuZW5k -ZScsICdXZXJrdGFnJ10sCiAgICAgICAgd2VydDogZnVuY3Rpb24oZil7IHJldHVybiBmLmlzdFdF -ID8gJ1dvY2hlbmVuZGUnIDogJ1dlcmt0YWcnOyB9IH0sCiAgICB7IGtleTogJ2ZlaWVydGFnJywg -ICAgbGFiZWw6ICdGZWllcnRhZyAoTmFtZSknLCBvcmRudW5nOiAnbmF0dXInLAogICAgICAgIHdl -cnQ6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5mZWllcnRhZ05hbWUgfHwgJ2tlaW4gRmVpZXJ0YWcn -OyB9IH0sCiAgICB7IGtleTogJ2ZlaWVydGFnVHlwJywgbGFiZWw6ICdGZWllcnRhZyAoQnVuZC9O -UlcpJywgb3JkbnVuZzogJ2ZpeCcsCiAgICAgICAgZml4UmVpaGU6IFsnQnVuZGVzd2VpdCcsICdO -Ulctc3BlemlmaXNjaCcsICdTb25zdGlnZXIgRmVpZXJ0YWcnLCAna2VpbiBGZWllcnRhZyddLAog -ICAgICAgIHdlcnQ6IGZ1bmN0aW9uKGYpeyByZXR1cm4gX2ZlaWVydGFnVHlwTGFiZWwoZi5mZWll -cnRhZ1R5cCk7IH0gfQpdOwoKLy8gQW56ZWlnZS1MYWJlbCBmdWVyIGRlbiBGZWllcnRhZ3MtVHlw -IGVpbmVyIEZha3RlbnplaWxlLgpleHBvcnQgZnVuY3Rpb24gX2ZlaWVydGFnVHlwTGFiZWwodHlw -KSB7CiAgICBpZiAodHlwID09PSAnYnVuZGVzd2VpdCcpIHJldHVybiAnQnVuZGVzd2VpdCc7CiAg -ICBpZiAodHlwID09PSAnbnJ3JykgICAgICAgIHJldHVybiAnTlJXLXNwZXppZmlzY2gnOwogICAg -aWYgKHR5cCA9PT0gJ3NvbnN0aWdlJykgICByZXR1cm4gJ1NvbnN0aWdlciBGZWllcnRhZyc7CiAg -ICByZXR1cm4gJ2tlaW4gRmVpZXJ0YWcnOwp9CgpleHBvcnQgZnVuY3Rpb24gZGltRmluZGVuKGtl -eSkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBESU1FTlNJT05FTi5sZW5ndGg7IGkrKykgaWYg -KERJTUVOU0lPTkVOW2ldLmtleSA9PT0ga2V5KSByZXR1cm4gRElNRU5TSU9ORU5baV07CiAgICBy -ZXR1cm4gbnVsbDsKfQoKLy8gPT09PT0gS2VubnphaGxlbiAoWmVsbC1BZ2dyZWdhdGlvbiB1ZWJl -ciBGYWt0ZW4pID09PT09CgpleHBvcnQgdmFyIEtFTk5aQUhMRU4gPSBbCiAgICB7IGtleTogJ2Fu -emFobCcsICAgIGxhYmVsOiAnQW56YWhsIEVpbnRyw6RnZScsICBlaW5oZWl0OiAnRWludHLDpGdl -JyB9LAogICAgeyBrZXk6ICdwZXJzb25lbicsICBsYWJlbDogJ1ZlcnNjaC4gUGVyc29uZW4nLCBl -aW5oZWl0OiAnUGVyc29uZW4nIH0sCiAgICB7IGtleTogJ3RhZ2UnLCAgICAgIGxhYmVsOiAnVmVy -c2NoLiBUYWdlJywgICAgIGVpbmhlaXQ6ICdUYWdlJyB9LAogICAgeyBrZXk6ICdwcm9QZXJzb24n -LCBsYWJlbDogJ8OYIHBybyBQZXJzb24nLCAgICAgZWluaGVpdDogJ8OYL1BlcnNvbicgfSwKICAg -IHsga2V5OiAnYW50ZWlsJywgICAgbGFiZWw6ICdBbnRlaWwgKCUpJywgICAgICAgZWluaGVpdDog -JyUnIH0KXTsKCmV4cG9ydCBmdW5jdGlvbiBrZW5uemFobEZpbmRlbihrZXkpIHsKICAgIGZvciAo -dmFyIGkgPSAwOyBpIDwgS0VOTlpBSExFTi5sZW5ndGg7IGkrKykgaWYgKEtFTk5aQUhMRU5baV0u -a2V5ID09PSBrZXkpIHJldHVybiBLRU5OWkFITEVOW2ldOwogICAgcmV0dXJuIG51bGw7Cn0KCmZ1 -bmN0aW9uIF9kaXN0aW5jdChhcnIpIHsKICAgIHZhciBzZWVuID0ge30sIG4gPSAwOwogICAgZm9y -ICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgaWYgKCFzZWVuW2FycltpXV0pIHsg -c2VlblthcnJbaV1dID0gMTsgbisrOyB9IH0KICAgIHJldHVybiBuOwp9CmZ1bmN0aW9uIF9hZ2co -ZmFrdGVuLCBrZW5uemFobCkgewogICAgaWYgKCFmYWt0ZW4gfHwgIWZha3Rlbi5sZW5ndGgpIHJl -dHVybiAwOwogICAgaWYgKGtlbm56YWhsID09PSAncGVyc29uZW4nKSByZXR1cm4gX2Rpc3RpbmN0 -KGZha3Rlbi5tYXAoZnVuY3Rpb24oZil7IHJldHVybiBmLnBlcnNvbklkOyB9KSk7CiAgICBpZiAo -a2VubnphaGwgPT09ICd0YWdlJykgICAgIHJldHVybiBfZGlzdGluY3QoZmFrdGVuLm1hcChmdW5j -dGlvbihmKXsgcmV0dXJuIGYuZGF0dW07IH0pKTsKICAgIGlmIChrZW5uemFobCA9PT0gJ3Byb1Bl -cnNvbicpIHsKICAgICAgICB2YXIgcCA9IF9kaXN0aW5jdChmYWt0ZW4ubWFwKGZ1bmN0aW9uKGYp -eyByZXR1cm4gZi5wZXJzb25JZDsgfSkpOwogICAgICAgIHJldHVybiBwID8gTWF0aC5yb3VuZChm -YWt0ZW4ubGVuZ3RoIC8gcCAqIDEwKSAvIDEwIDogMDsKICAgIH0KICAgIHJldHVybiBmYWt0ZW4u -bGVuZ3RoOyAvLyAnYW56YWhsJyAodW5kIEJhc2lzIGZ1ZXIgJ2FudGVpbCcpCn0KCi8vID09PT09 -IEZpbHRlciA9PT09PQoKZnVuY3Rpb24gX2ZpbHRlclBhc3N0KGYsIHNwZWMpIHsKICAgIHZhciBm -aSA9IHNwZWMuZmlsdGVyIHx8IHt9OwogICAgaWYgKGZpLnBlcnNvbmVuICYmIGZpLnBlcnNvbmVu -Lmxlbmd0aCAmJiBmaS5wZXJzb25lbi5pbmRleE9mKGYucGVyc29uSWQpIDwgMCkgcmV0dXJuIGZh -bHNlOwogICAgaWYgKGZpLmdydXBwZW4gJiYgZmkuZ3J1cHBlbi5sZW5ndGggJiYgZmkuZ3J1cHBl -bi5pbmRleE9mKGYuZ3J1cHBlKSA8IDApIHJldHVybiBmYWxzZTsKICAgIGlmIChmaS5mdW5rdGlv -bmVuICYmIGZpLmZ1bmt0aW9uZW4ubGVuZ3RoICYmIGZpLmZ1bmt0aW9uZW4uaW5kZXhPZihmLmZ1 -bmt0aW9uKSA8IDApIHJldHVybiBmYWxzZTsKICAgIGlmIChmaS5zdGFuZG9ydGUgJiYgZmkuc3Rh -bmRvcnRlLmxlbmd0aCAmJiBmaS5zdGFuZG9ydGUuaW5kZXhPZihmLnN0YW5kb3J0KSA8IDApIHJl -dHVybiBmYWxzZTsKICAgIGlmIChmaS5kaWVuc3RncmFkZSAmJiBmaS5kaWVuc3RncmFkZS5sZW5n -dGggJiYgZmkuZGllbnN0Z3JhZGUuaW5kZXhPZihmLmRpZW5zdGdyYWQpIDwgMCkgcmV0dXJuIGZh -bHNlOwogICAgaWYgKGZpLmNvZGVzICYmIGZpLmNvZGVzLmxlbmd0aCAmJiBmaS5jb2Rlcy5pbmRl -eE9mKGYuY29kZSkgPCAwKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZmkua2F0ZWdvcmllbiAmJiBm -aS5rYXRlZ29yaWVuLmxlbmd0aCAmJiBmaS5rYXRlZ29yaWVuLmluZGV4T2YoZi5rYXRlZ29yaWUp -IDwgMCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGZpLm51cldFICYmICFmLmlzdFdFKSByZXR1cm4g -ZmFsc2U7CiAgICBpZiAoZmkubnVyRmVpZXJ0YWcgJiYgIWYuaXN0RmVpZXJ0YWcpIHJldHVybiBm -YWxzZTsKICAgIGlmIChmaS5udXJGZWllcnRhZ0J1bmQgJiYgZi5mZWllcnRhZ1R5cCAhPT0gJ2J1 -bmRlc3dlaXQnKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZmkubnVyRmVpZXJ0YWdOUlcgJiYgZi5m -ZWllcnRhZ1R5cCAhPT0gJ25ydycpIHJldHVybiBmYWxzZTsKICAgIGlmIChmaS5udXJEaWVuc3Qg -JiYgIWYuaXN0RGllbnN0KSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZmkud29jaGVudGFnZSAmJiBm -aS53b2NoZW50YWdlLmxlbmd0aCAmJiBmaS53b2NoZW50YWdlLmluZGV4T2YoZi53b2NoZW50YWcp -IDwgMCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHNwZWMuemVpdFZvbiAmJiBmLmRhdHVtIDwgc3Bl -Yy56ZWl0Vm9uKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoc3BlYy56ZWl0QmlzICYmIGYuZGF0dW0g -PiBzcGVjLnplaXRCaXMpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwp9CgovLyA9PT09 -PSBBdXN3ZXJ0dW5nID09PT09Ci8vCi8vIExpZWZlcnQgZWluIGRpYWdyYW1tLW5ldXRyYWxlcyBF -cmdlYm5pczoKLy8gICB7IGthdGVnb3JpZW46W3trZXksbGFiZWx9XSwgc2VyaWVuOlt7bmFtZSwg -d2VydGU6Wy4uLl19XSwgZWluaGVpdCwgZ2VzYW10LAovLyAgICAgcHVua3RlOlt7bGFiZWwseCx5 -fV0gKFNjYXR0ZXIpLCBpc3RMZWVyIH0KCmV4cG9ydCBmdW5jdGlvbiBhdXN3ZXJ0ZW4oc3BlYykg -ewogICAgc3BlYyA9IHNwZWMgfHwge307CiAgICB2YXIgZmFrdGVuID0gZmFrdGVuQmF1ZW4oKS5m -aWx0ZXIoZnVuY3Rpb24oZil7IHJldHVybiBfZmlsdGVyUGFzc3QoZiwgc3BlYyk7IH0pOwogICAg -aWYgKCFmYWt0ZW4ubGVuZ3RoKSByZXR1cm4geyBpc3RMZWVyOiB0cnVlLCBrYXRlZ29yaWVuOiBb -XSwgc2VyaWVuOiBbXSwgcHVua3RlOiBbXSB9OwoKICAgIGlmIChzcGVjLmRpYWdyYW1tID09PSAn -c2NhdHRlcicpIHJldHVybiBfYXVzd2VydGVuU2NhdHRlcihzcGVjLCBmYWt0ZW4pOwoKICAgIHZh -ciBkaW1YID0gZGltRmluZGVuKHNwZWMuZGltWCkgfHwgZGltRmluZGVuKCdncnVwcGUnKTsKICAg -IHZhciBkaW1TID0gc3BlYy5kaW1TZXJpZSA/IGRpbUZpbmRlbihzcGVjLmRpbVNlcmllKSA6IG51 -bGw7CiAgICB2YXIga2VubnphaGwgPSBzcGVjLmtlbm56YWhsIHx8ICdhbnphaGwnOwoKICAgIC8v -IFplbGxlbjogY2F0S2V5IC0+IHNlcmllS2V5IC0+IGZha3RlbltdCiAgICB2YXIgemVsbGVuID0g -e30sIGNhdE1ldGEgPSB7fSwgc2VyaWVNZXRhID0ge307CiAgICBmYWt0ZW4uZm9yRWFjaChmdW5j -dGlvbihmKSB7CiAgICAgICAgdmFyIGNrID0gZGltWC53ZXJ0KGYpOwogICAgICAgIHZhciBzayA9 -IGRpbVMgPyBkaW1TLndlcnQoZikgOiAnX19hbGwnOwogICAgICAgIGlmICghY2F0TWV0YVtja10p -IGNhdE1ldGFbY2tdID0geyBrZXk6IGNrLCBsYWJlbDogX2RpbUxhYmVsKGRpbVgsIGNrLCBmKSwg -YmVpc3BpZWw6IGYgfTsKICAgICAgICBpZiAoIXNlcmllTWV0YVtza10pIHNlcmllTWV0YVtza10g -PSB7IGtleTogc2ssIGxhYmVsOiBkaW1TID8gX2RpbUxhYmVsKGRpbVMsIHNrLCBmKSA6ICcnIH07 -CiAgICAgICAgKHplbGxlbltja10gfHwgKHplbGxlbltja10gPSB7fSkpOwogICAgICAgICh6ZWxs -ZW5bY2tdW3NrXSB8fCAoemVsbGVuW2NrXVtza10gPSBbXSkpLnB1c2goZik7CiAgICB9KTsKCiAg -ICB2YXIga2F0S2V5cyA9IF9zb3J0S2F0ZWdvcmllbihPYmplY3Qua2V5cyhjYXRNZXRhKSwgY2F0 -TWV0YSwgZGltWCk7CiAgICB2YXIgc2VyaWVLZXlzID0gX3NvcnRLYXRlZ29yaWVuKE9iamVjdC5r -ZXlzKHNlcmllTWV0YSksIHNlcmllTWV0YSwgZGltUyB8fCBkaW1YKTsKCiAgICAvLyBSb2gtQWdn -cmVnYXRlCiAgICB2YXIgZ2VzYW10ID0gMDsKICAgIHZhciBzZXJpZW4gPSBzZXJpZUtleXMubWFw -KGZ1bmN0aW9uKHNrKSB7CiAgICAgICAgdmFyIHdlcnRlID0ga2F0S2V5cy5tYXAoZnVuY3Rpb24o -Y2spIHsKICAgICAgICAgICAgdmFyIHYgPSBfYWdnKCh6ZWxsZW5bY2tdICYmIHplbGxlbltja11b -c2tdKSB8fCBbXSwga2VubnphaGwgPT09ICdhbnRlaWwnID8gJ2FuemFobCcgOiBrZW5uemFobCk7 -CiAgICAgICAgICAgIGdlc2FtdCArPSAoa2VubnphaGwgPT09ICdhbnRlaWwnKSA/IHYgOiAwOwog -ICAgICAgICAgICByZXR1cm4gdjsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4geyBuYW1lOiBz -ZXJpZU1ldGFbc2tdLmxhYmVsLCB3ZXJ0ZTogd2VydGUgfTsKICAgIH0pOwoKICAgIC8vIEFudGVp -bCAoJSk6IGplZGUgWmVsbGUgcmVsYXRpdiB6dXIgR2VzYW10c3VtbWUgYWxsZXIgWmVsbGVuLgog -ICAgaWYgKGtlbm56YWhsID09PSAnYW50ZWlsJyAmJiBnZXNhbXQgPiAwKSB7CiAgICAgICAgc2Vy -aWVuLmZvckVhY2goZnVuY3Rpb24ocykgewogICAgICAgICAgICBzLndlcnRlID0gcy53ZXJ0ZS5t -YXAoZnVuY3Rpb24odil7IHJldHVybiBNYXRoLnJvdW5kKHYgLyBnZXNhbXQgKiAxMDAwKSAvIDEw -OyB9KTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvLyBTb3J0aWVydW5nIGRlciBLYXRlZ29yaWVu -IG5hY2ggV2VydCAoUmFua2luZykgKyBUb3BOLgogICAgdmFyIGVyZ2VibmlzID0gX3NvcnRVbmRU -b3Aoc3BlYywga2F0S2V5cywgY2F0TWV0YSwgc2VyaWVuKTsKCiAgICByZXR1cm4gewogICAgICAg -IGlzdExlZXI6IGZhbHNlLAogICAgICAgIGthdGVnb3JpZW46IGVyZ2VibmlzLmthdGVnb3JpZW4s -CiAgICAgICAgc2VyaWVuOiBlcmdlYm5pcy5zZXJpZW4sCiAgICAgICAgbWVocnNlcmlnOiAhIWRp -bVMsCiAgICAgICAgZWluaGVpdDogKGtlbm56YWhsRmluZGVuKGtlbm56YWhsKSB8fCB7fSkuZWlu -aGVpdCB8fCAnJywKICAgICAgICBkaW1YTGFiZWw6IGRpbVgubGFiZWwsCiAgICAgICAgZGltU2Vy -aWVMYWJlbDogZGltUyA/IGRpbVMubGFiZWwgOiAnJywKICAgICAgICBrZW5uemFobExhYmVsOiAo -a2VubnphaGxGaW5kZW4oa2VubnphaGwpIHx8IHt9KS5sYWJlbCB8fCAnJwogICAgfTsKfQoKZnVu -Y3Rpb24gX2RpbUxhYmVsKGRpbSwga2V5LCBmYWt0KSB7CiAgICBpZiAoZGltLmxhYmVsMikgcmV0 -dXJuIGRpbS5sYWJlbDIoa2V5LCBmYWt0KTsKICAgIHJldHVybiBrZXk7Cn0KCmZ1bmN0aW9uIF9z -b3J0S2F0ZWdvcmllbihrZXlzLCBtZXRhLCBkaW0pIHsKICAgIGlmIChkaW0gJiYgZGltLm9yZG51 -bmcgPT09ICdmaXgnICYmIGRpbS5maXhSZWloZSkgewogICAgICAgIHZhciByZWloZSA9IGRpbS5m -aXhSZWloZTsKICAgICAgICByZXR1cm4ga2V5cy5zbGljZSgpLnNvcnQoZnVuY3Rpb24oYSwgYikg -ewogICAgICAgICAgICB2YXIgaWEgPSByZWloZS5pbmRleE9mKGEpLCBpYiA9IHJlaWhlLmluZGV4 -T2YoYik7CiAgICAgICAgICAgIGlmIChpYSA8IDApIGlhID0gOTk5OyBpZiAoaWIgPCAwKSBpYiA9 -IDk5OTsKICAgICAgICAgICAgcmV0dXJuIGlhIC0gaWIgfHwgYS5sb2NhbGVDb21wYXJlKGIsICdk -ZScpOwogICAgICAgIH0pOwogICAgfQogICAgaWYgKGRpbSAmJiBkaW0ub3JkbnVuZyA9PT0gJ3pl -aXQnKSB7CiAgICAgICAgcmV0dXJuIGtleXMuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGEsIGIpeyBy -ZXR1cm4gYSA8IGIgPyAtMSA6IChhID4gYiA/IDEgOiAwKTsgfSk7CiAgICB9CiAgICByZXR1cm4g -a2V5cy5zbGljZSgpLnNvcnQoZnVuY3Rpb24oYSwgYil7IHJldHVybiBhLmxvY2FsZUNvbXBhcmUo -YiwgJ2RlJyk7IH0pOwp9CgpmdW5jdGlvbiBfc29ydFVuZFRvcChzcGVjLCBrYXRLZXlzLCBjYXRN -ZXRhLCBzZXJpZW4pIHsKICAgIHZhciBzb3J0ID0gc3BlYy5zb3J0IHx8ICdsYWJlbCc7CiAgICB2 -YXIgaWR4UmVpaGUgPSBrYXRLZXlzLm1hcChmdW5jdGlvbihfLCBpKXsgcmV0dXJuIGk7IH0pOwoK -ICAgIGlmIChzb3J0ID09PSAnd2VydC1kZXNjJyB8fCBzb3J0ID09PSAnd2VydC1hc2MnKSB7CiAg -ICAgICAgdmFyIHN1bW1lbiA9IGthdEtleXMubWFwKGZ1bmN0aW9uKF8sIGkpIHsKICAgICAgICAg -ICAgdmFyIHMgPSAwOyBzZXJpZW4uZm9yRWFjaChmdW5jdGlvbihzZSl7IHMgKz0gc2Uud2VydGVb -aV0gfHwgMDsgfSk7IHJldHVybiBzOwogICAgICAgIH0pOwogICAgICAgIGlkeFJlaWhlLnNvcnQo -ZnVuY3Rpb24oYSwgYikgewogICAgICAgICAgICByZXR1cm4gc29ydCA9PT0gJ3dlcnQtZGVzYycg -PyBzdW1tZW5bYl0gLSBzdW1tZW5bYV0gOiBzdW1tZW5bYV0gLSBzdW1tZW5bYl07CiAgICAgICAg -fSk7CiAgICB9CiAgICAvLyAoc29uc3Q6IFJlaWhlbmZvbGdlIGF1cyBfc29ydEthdGVnb3JpZW4g -YmVpYmVoYWx0ZW4pCgogICAgdmFyIHRvcE4gPSBzcGVjLnRvcE4gfHwgMDsKICAgIGlmICh0b3BO -ID4gMCAmJiBpZHhSZWloZS5sZW5ndGggPiB0b3BOKSBpZHhSZWloZSA9IGlkeFJlaWhlLnNsaWNl -KDAsIHRvcE4pOwoKICAgIHZhciBrYXRlZ29yaWVuID0gaWR4UmVpaGUubWFwKGZ1bmN0aW9uKGkp -eyByZXR1cm4geyBrZXk6IGthdEtleXNbaV0sIGxhYmVsOiBjYXRNZXRhW2thdEtleXNbaV1dLmxh -YmVsIH07IH0pOwogICAgdmFyIG5ldWVTZXJpZW4gPSBzZXJpZW4ubWFwKGZ1bmN0aW9uKHNlKSB7 -CiAgICAgICAgcmV0dXJuIHsgbmFtZTogc2UubmFtZSwgd2VydGU6IGlkeFJlaWhlLm1hcChmdW5j -dGlvbihpKXsgcmV0dXJuIHNlLndlcnRlW2ldOyB9KSB9OwogICAgfSk7CiAgICByZXR1cm4geyBr -YXRlZ29yaWVuOiBrYXRlZ29yaWVuLCBzZXJpZW46IG5ldWVTZXJpZW4gfTsKfQoKLy8gLS0tLS0g -U2NhdHRlcjogendlaSBQZXJzb25lbi1LZW5uemFobGVuIGdlZ2VuZWluYW5kZXIgLS0tLS0KLy8g -c2NhdHRlclgvc2NhdHRlclkgcmVmZXJlbnppZXJlbiBQRVJTT05fTUFTU0UgKFphZWhsdW5nZW4g -cHJvIFBlcnNvbiB1ZWJlciBkaWUKLy8gZ2VmaWx0ZXJ0ZW4gRmFrdGVuIOKAlCB6LkIuIE5hY2h0 -ZGllbnN0ZSB2cy4gVXJsYXVic3RhZ2UgamUgUGVyc29uKS4KCmV4cG9ydCB2YXIgUEVSU09OX01B -U1NFID0gWwogICAgeyBrZXk6ICdkaWVuc3RlJywgICAgIGxhYmVsOiAnRGllbnN0ZSBnZXNhbXQn -LCB0ZXN0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYuaXN0RGllbnN0OyB9IH0sCiAgICB7IGtleTog -J2ZydWVoJywgICAgICAgbGFiZWw6ICdGcsO8aGRpZW5zdGUnLCAgICB0ZXN0OiBmdW5jdGlvbihm -KXsgcmV0dXJuIGYuc2NoaWNodCA9PT0gJ0YnOyB9IH0sCiAgICB7IGtleTogJ3NwYWV0JywgICAg -ICAgbGFiZWw6ICdTcMOkdGRpZW5zdGUnLCAgICB0ZXN0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYu -c2NoaWNodCA9PT0gJ1MnOyB9IH0sCiAgICB7IGtleTogJ25hY2h0JywgICAgICAgbGFiZWw6ICdO -YWNodGRpZW5zdGUnLCAgIHRlc3Q6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5zY2hpY2h0ID09PSAn -Tic7IH0gfSwKICAgIHsga2V5OiAnd2UnLCAgICAgICAgICBsYWJlbDogJ1dFLURpZW5zdGUnLCAg -ICAgdGVzdDogZnVuY3Rpb24oZil7IHJldHVybiBmLmlzdERpZW5zdCAmJiBmLmlzdFdFOyB9IH0s -CiAgICB7IGtleTogJ2ZlaWVydGFnJywgICAgbGFiZWw6ICdGZWllcnRhZ3NkaWVuc3RlJywgdGVz -dDogZnVuY3Rpb24oZil7IHJldHVybiBmLmlzdERpZW5zdCAmJiBmLmlzdEZlaWVydGFnOyB9IH0s -CiAgICB7IGtleTogJ2ZlaWVydGFnTlJXJywgbGFiZWw6ICdOUlctRmVpZXJ0YWdzZGllbnN0ZScs -IHRlc3Q6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5pc3REaWVuc3QgJiYgZi5mZWllcnRhZ1R5cCA9 -PT0gJ25ydyc7IH0gfSwKICAgIHsga2V5OiAnZGdsJywgICAgICAgICBsYWJlbDogJ0RHTC1FaW5z -w6R0emUnLCAgIHRlc3Q6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5yb2xsZSA9PT0gJ0RHTCc7IH0g -fSwKICAgIHsga2V5OiAndXJsYXViJywgICAgICBsYWJlbDogJ1VybGF1YnN0YWdlJywgICAgdGVz -dDogZnVuY3Rpb24oZil7IHJldHVybiBmLmNvZGUgPT09ICdVcmwnOyB9IH0sCiAgICB7IGtleTog -J2ZvcnRiaWxkdW5nJywgbGFiZWw6ICdGb3J0YmlsZHVuZycsICAgIHRlc3Q6IGZ1bmN0aW9uKGYp -eyByZXR1cm4gZi5rYXRlZ29yaWUgPT09ICdBdXMtL0ZvcnRiaWxkdW5nJzsgfSB9LAogICAgeyBr -ZXk6ICdmcmVpJywgICAgICAgIGxhYmVsOiAnRnJlaS1UYWdlJywgICAgICB0ZXN0OiBmdW5jdGlv -bihmKXsgcmV0dXJuIGYua2F0ZWdvcmllID09PSAnRnJlaSc7IH0gfQpdOwpleHBvcnQgZnVuY3Rp -b24gcGVyc29uTWFzc0ZpbmRlbihrZXkpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUEVSU09O -X01BU1NFLmxlbmd0aDsgaSsrKSBpZiAoUEVSU09OX01BU1NFW2ldLmtleSA9PT0ga2V5KSByZXR1 -cm4gUEVSU09OX01BU1NFW2ldOwogICAgcmV0dXJuIG51bGw7Cn0KCmZ1bmN0aW9uIF9hdXN3ZXJ0 -ZW5TY2F0dGVyKHNwZWMsIGZha3RlbikgewogICAgdmFyIG14ID0gcGVyc29uTWFzc0ZpbmRlbihz -cGVjLnNjYXR0ZXJYKSB8fCBQRVJTT05fTUFTU0VbM107IC8vIG5hY2h0CiAgICB2YXIgbXkgPSBw -ZXJzb25NYXNzRmluZGVuKHNwZWMuc2NhdHRlclkpIHx8IFBFUlNPTl9NQVNTRVs2XTsgLy8gdXJs -YXViCiAgICB2YXIgcHJvUGVyc29uID0ge307CiAgICBmYWt0ZW4uZm9yRWFjaChmdW5jdGlvbihm -KSB7CiAgICAgICAgdmFyIGUgPSBwcm9QZXJzb25bZi5wZXJzb25JZF0gfHwgKHByb1BlcnNvbltm -LnBlcnNvbklkXSA9IHsgbGFiZWw6IGYucGVyc29uTGFiZWwsIHg6IDAsIHk6IDAgfSk7CiAgICAg -ICAgaWYgKG14LnRlc3QoZikpIGUueCsrOwogICAgICAgIGlmIChteS50ZXN0KGYpKSBlLnkrKzsK -ICAgIH0pOwogICAgdmFyIHB1bmt0ZSA9IE9iamVjdC5rZXlzKHByb1BlcnNvbikubWFwKGZ1bmN0 -aW9uKHBpZCl7IHJldHVybiBwcm9QZXJzb25bcGlkXTsgfSk7CiAgICByZXR1cm4gewogICAgICAg -IGlzdExlZXI6IHB1bmt0ZS5sZW5ndGggPT09IDAsCiAgICAgICAgcHVua3RlOiBwdW5rdGUsCiAg -ICAgICAga2F0ZWdvcmllbjogW10sIHNlcmllbjogW10sCiAgICAgICAgYWNoc2VYOiBteC5sYWJl -bCwgYWNoc2VZOiBteS5sYWJlbAogICAgfTsKfQo= +ZmVpZXJ0YWdJbmZvIH0gZnJvbSAnLi9mZWllcnRhZ2VfZGUuanMnOwoKLy8gPT09PT0gS2FjaGVs +LUthdGFsb2cgKFN0YXRpc3Rpay1MYXlvdXQtUmFzdGVyKSA9PT09PQovLyBMaWVndCBiZXd1c3N0 +IGhpZXIgaW4gZGVyIFVOR0VHQVRFdGVuIEVuZ2luZSAobmljaHQgaW4gc3RhdGlzdGlrLmpzKTog +ZGFzCi8vIEFkbWluLUxheW91dC1Nb2R1bCAoYWRtaW5fc3RhdGlzdGlrLmpzKSBicmF1Y2h0IHN0 +YXRpc3Rpa1RpbGVzQWxsZSArIEJSRUlURV9TUEFOLAovLyBkYXJmIGFiZXIgc3RhdGlzdGlrLmpz +IE5JQ0hUIHN0YXRpc2NoIGltcG9ydGllcmVuIOKAlCBzdGF0aXN0aWsuanMgaXN0IHNlcnZlci0K +Ly8gc2VpdGlnIEdBVEUtNDA0LWdlc2NodWV0enQgKGtlaW4gU3RhdGlzdGlrLVJlY2h0KSwgdW5k +IGVpbiBzdGF0aXNjaGVyIEltcG9ydAovLyB3dWVyZGUgZGllIEVTLU1vZHVsLUtldHRlIGZ1ZXIg +cmVndWxhZXJlIFVzZXIga29tcGxldHQgYnJlY2hlbiAoQXBwLUJvb3RzdHJhcC0KLy8gRmVobGVy +KS4gc3RhdGlzdGlrLmpzIGltcG9ydGllcnQgZGllc2UgU3ltYm9sZSBqZXR6dCBlYmVuZmFsbHMg +dm9uIGhpZXIuCmV4cG9ydCB2YXIgQlJFSVRFX1NQQU4gID0geyB2b2xsOiA2LCBoYWxiOiAzLCBk +cml0dGVsOiAyIH07CmV4cG9ydCB2YXIgQlJFSVRFX1JBTkcgID0geyBkcml0dGVsOiAwLCBoYWxi +OiAxLCB2b2xsOiAyIH07CgovLyBGZXN0ZSBQYW5lbHM6IGlkICg9IGRhdGEtdGlsZS1pZCBpbSBI +VE1MKSwgU3RhbmRhcmQtIHVuZCBNaW5kZXN0YnJlaXRlLgovLyBTY2h3ZXJlIFRhYmVsbGVuLVBh +bmVscyBkdWVyZmVuIG5pY2h0IHVudGVyICJ2b2xsIiAoc29uc3QgYnJlY2hlbgovLyBIZWF0bWFw +L1RhZ2VzYW50ZWlsZS9Qcm9zYSkuIHZlcnRlaWx1bmcvZmFpcm5lc3Mgc2luZCBmcmVpIHdhZWhs +YmFyLgpleHBvcnQgdmFyIEJVSUxUSU5fVElMRVMgPSBbCiAgICB7IGlkOiAndmVydGVpbHVuZycs +ICAgdGl0ZWw6ICdTY2hpY2h0dmVydGVpbHVuZycsICAgICAgICAgICAgICAgIGRlZmF1bHRCcmVp +dGU6ICdoYWxiJywgbWluQnJlaXRlOiAnZHJpdHRlbCcgfSwKICAgIHsgaWQ6ICdmYWlybmVzcycs +ICAgICB0aXRlbDogJ1dFLSAmIEZULUZhaXJuZXNzJywgICAgICAgICAgICAgICAgZGVmYXVsdEJy +ZWl0ZTogJ2hhbGInLCBtaW5CcmVpdGU6ICdkcml0dGVsJyB9LAogICAgeyBpZDogJ21pa3JvdGVh +bXMnLCAgIHRpdGVsOiAnTWlrcm90ZWFtcyDigJQgVmVyZsO8Z2JhcmtlaXQnLCAgICAgICBkZWZh +dWx0QnJlaXRlOiAndm9sbCcsIG1pbkJyZWl0ZTogJ3ZvbGwnIH0sCiAgICB7IGlkOiAnbmViZW53 +YWNoZW4nLCAgdGl0ZWw6ICdOZWJlbndhY2hlbi1WZXJhbnR3b3J0dW5nJywgICAgICAgIGRlZmF1 +bHRCcmVpdGU6ICd2b2xsJywgbWluQnJlaXRlOiAndm9sbCcgfSwKICAgIHsgaWQ6ICd0YWdlc2Fu +dGVpbGUnLCB0aXRlbDogJ1RhZ2VzLUFudGVpbGUgcHJvIFRlYW0nLCAgICAgICAgICAgZGVmYXVs +dEJyZWl0ZTogJ3ZvbGwnLCBtaW5CcmVpdGU6ICd2b2xsJyB9LAogICAgeyBpZDogJ3Byb3NhJywg +ICAgICAgIHRpdGVsOiAnRGV0YWlsYW5hbHlzZSBwcm8gUGVyc29uJywgICAgICAgICBkZWZhdWx0 +QnJlaXRlOiAndm9sbCcsIG1pbkJyZWl0ZTogJ3ZvbGwnIH0KXTsKCi8vIEVpZ2VuZSAoaW0gQmF1 +a2FzdGVuIGdlYmF1dGUpIEthY2hlbG4gYXVzIGRlciBBZG1pbi1Lb25maWd1cmF0aW9uLgpleHBv +cnQgZnVuY3Rpb24gYWxsZUthY2hlbG4oKSB7CiAgICB2YXIgYXJyID0gKFouYWRtaW4gJiYgWi5h +ZG1pbi5zdGF0aXN0aWtLYWNoZWxuKSB8fCBbXTsKICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFy +cikgPyBhcnIgOiBbXTsKfQoKLy8gVm9sbHN0YWVuZGlnZXIgVGlsZS1LYXRhbG9nIChmZXN0ZSBQ +YW5lbHMgKyBlaWdlbmUgS2FjaGVsbikgZnVlciBkYXMKLy8gTGF5b3V0LVJhc3RlciBpbSBBZG1p +bi1UYWIgdW5kIGRpZSBSZW5kZXItUmVpaGVuZm9sZ2UgaW0gU3RhdGlzdGlrLVRhYi4KZXhwb3J0 +IGZ1bmN0aW9uIHN0YXRpc3Rpa1RpbGVzQWxsZSgpIHsKICAgIHZhciBvdXQgPSBCVUlMVElOX1RJ +TEVTLm1hcChmdW5jdGlvbih0KXsKICAgICAgICByZXR1cm4geyBpZDogdC5pZCwgdGl0ZWw6IHQu +dGl0ZWwsIG1pbkJyZWl0ZTogdC5taW5CcmVpdGUsIGRlZmF1bHRCcmVpdGU6IHQuZGVmYXVsdEJy +ZWl0ZSwgaXN0S2FjaGVsOiBmYWxzZSB9OwogICAgfSk7CiAgICBhbGxlS2FjaGVsbigpLmZvckVh +Y2goZnVuY3Rpb24oayl7CiAgICAgICAgb3V0LnB1c2goeyBpZDogay5pZCwgdGl0ZWw6IChrLnRp +dGVsIHx8ICdFaWdlbmUgU3RhdGlzdGlrJyksIG1pbkJyZWl0ZTogJ2RyaXR0ZWwnLCBkZWZhdWx0 +QnJlaXRlOiAnaGFsYicsIGlzdEthY2hlbDogdHJ1ZSB9KTsKICAgIH0pOwogICAgcmV0dXJuIG91 +dDsKfQoKLy8gPT09PT0gQ29kZS1LbGFzc2lmaXppZXJ1bmcgKHNwaWVnZWx0IHNlcnZlci5weSBf +aGFuZGxlX3N0YXRpc3RpaykgPT09PT0KCnZhciBTT05ERVJfQ09ERVMgICAgICA9IFsnU0QnLCAn +U0UnXTsKdmFyIEZPUlRCSUxEVU5HX0NPREVTID0gWydBdUYnLCAnRVRNJywgJ1NlbScsICdUVCcs +ICdUekYnXTsKdmFyIEZSRUlfQ09ERVMgICAgICAgID0gWyd3ZnInLCAnZGZyJywgJ8KnMjEnLCAn +MjFhJ107CnZhciBBQldFU0VORF9DT0RFUyAgICA9IFsnVXJsJywgJ2tyJywgJ0t1cicsICdTVScs +ICdMRycsICdEVScsICdCVicsICdhYmcnLCAnQkFPJywgJ0hPJywgJ2FidycsICdYWFgnXTsKCmZ1 +bmN0aW9uIF9zY2hpY2h0Vm9uKGNvZGUpIHsKICAgIGlmICgvXkYtL2kudGVzdChjb2RlKSkgcmV0 +dXJuICdGJzsKICAgIGlmICgvXlMtL2kudGVzdChjb2RlKSkgcmV0dXJuICdTJzsKICAgIGlmICgv +Xk4tL2kudGVzdChjb2RlKSkgcmV0dXJuICdOJzsKICAgIHJldHVybiAnJzsKfQpmdW5jdGlvbiBf +cm9sbGVWb24oY29kZSkgewogICAgLy8gRi1ER0wgLT4gREdMLCBTLVdERiAtPiBXREYsIE4tRkJQ +IC0+IEZCUAogICAgaWYgKGNvZGUgJiYgY29kZS5sZW5ndGggPj0gNSAmJiBjb2RlLmNoYXJBdCgx +KSA9PT0gJy0nKSB7CiAgICAgICAgdmFyIHIgPSBjb2RlLnN1YnN0cmluZygyLCA1KTsKICAgICAg +ICBpZiAociA9PT0gJ0RHTCcgfHwgciA9PT0gJ1dERicgfHwgciA9PT0gJ0ZCUCcpIHJldHVybiBy +OwogICAgfQogICAgcmV0dXJuICcnOwp9CmZ1bmN0aW9uIF9pc3REaWVuc3QoY29kZSkgewogICAg +cmV0dXJuIF9zY2hpY2h0Vm9uKGNvZGUpICE9PSAnJyB8fCBTT05ERVJfQ09ERVMuaW5kZXhPZihj +b2RlKSA+PSAwOwp9CmZ1bmN0aW9uIF9ncm9ia2xhc3NlKGNvZGUpIHsKICAgIC8vIEdyb2JlIFRh +Zy1BcnQgZnVlciBkaWUgS2F0ZWdvcmllLURpbWVuc2lvbi4KICAgIGlmIChfc2NoaWNodFZvbihj +b2RlKSkgcmV0dXJuICdEaWVuc3QnOwogICAgaWYgKFNPTkRFUl9DT0RFUy5pbmRleE9mKGNvZGUp +ID49IDApIHJldHVybiAnU29uZGVyZGllbnN0JzsKICAgIGlmIChGT1JUQklMRFVOR19DT0RFUy5p +bmRleE9mKGNvZGUpID49IDAgfHwgY29kZSA9PT0gJ0xHJykgcmV0dXJuICdBdXMtL0ZvcnRiaWxk +dW5nJzsKICAgIGlmIChbJ1VybCcsICdTVSddLmluZGV4T2YoY29kZSkgPj0gMCkgcmV0dXJuICdV +cmxhdWInOwogICAgaWYgKFsna3InLCAnS3VyJ10uaW5kZXhPZihjb2RlKSA+PSAwKSByZXR1cm4g +J0tyYW5rL0t1cic7CiAgICBpZiAoRlJFSV9DT0RFUy5pbmRleE9mKGNvZGUpID49IDApIHJldHVy +biAnRnJlaSc7CiAgICByZXR1cm4gJ1NvbnN0aWdlcyc7Cn0KCi8vID09PT09IEthbGVuZGVyLUhp +bGZlbiA9PT09PQoKdmFyIF9mZWllcnRhZ1NldCA9IG51bGwsIF9mZXJpZW5TZXQgPSBudWxsLCBf +a2FsZW5kZXJTaWcgPSBudWxsOwoKZnVuY3Rpb24gX2thbGVuZGVyQXVmYmF1ZW4oKSB7CiAgICB2 +YXIgc2lnID0gKFouYWRtaW4gJiYgKFouYWRtaW4uZmVpZXJ0YWdlIHx8IFtdKS5sZW5ndGggKyAn +eCcgKyAoWi5hZG1pbi5mZXJpZW4gfHwgW10pLmxlbmd0aCkgfHwgJyc7CiAgICBpZiAoX2thbGVu +ZGVyU2lnID09PSBzaWcgJiYgX2ZlaWVydGFnU2V0KSByZXR1cm47CiAgICBfa2FsZW5kZXJTaWcg +PSBzaWc7CiAgICAvLyBXZXJ0ID0gQmV6ZWljaG51bmcgKGZ1ZXIgYWRtaW4tZWlnZW5lIEZlaWVy +dGFnZSBvaG5lIEthdGFsb2ctVHJlZmZlciksCiAgICAvLyBtaW5kZXN0ZW5zIGFiZXIgYHRydWVg +LiBLYXRhbG9nIChidW5kZXN3ZWl0L05SVykga29tbXQgenVzYWV0emxpY2ggaW4KICAgIC8vIGZh +a3RlbkJhdWVuIGRhenUuCiAgICBfZmVpZXJ0YWdTZXQgPSB7fTsKICAgIChaLmFkbWluICYmIFou +YWRtaW4uZmVpZXJ0YWdlIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGYpIHsKICAgICAgICBpZiAo +ZiAmJiBmLmRhdHVtICYmIGYuYWt0aXYgIT09IGZhbHNlKSBfZmVpZXJ0YWdTZXRbZi5kYXR1bV0g +PSBmLmJlemVpY2hudW5nIHx8IHRydWU7CiAgICB9KTsKICAgIF9mZXJpZW5TZXQgPSB7fTsKICAg +IChaLmFkbWluICYmIFouYWRtaW4uZmVyaWVuIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGZwKSB7 +CiAgICAgICAgaWYgKCFmcCB8fCAhZnAudm9uIHx8ICFmcC5iaXMpIHJldHVybjsKICAgICAgICB2 +YXIgZCA9IG5ldyBEYXRlKGZwLnZvbiArICdUMDA6MDA6MDAnKSwgZW5kZSA9IG5ldyBEYXRlKGZw +LmJpcyArICdUMDA6MDA6MDAnKTsKICAgICAgICB2YXIgc2NodXR6ID0gMDsKICAgICAgICB3aGls +ZSAoZCA8PSBlbmRlICYmIHNjaHV0eiA8IDQwMCkgeyBfZmVyaWVuU2V0W2RhdHVtU3RyKGQpXSA9 +IHRydWU7IGQuc2V0RGF0ZShkLmdldERhdGUoKSArIDEpOyBzY2h1dHorKzsgfQogICAgfSk7Cn0K +Ci8vIElTTy1LYWxlbmRlcndvY2hlIChNby1iYXNpZXJ0KS4KZnVuY3Rpb24gX2lzb0tXKGQpIHsK +ICAgIHZhciB0ID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0 +RGF0ZSgpKTsKICAgIHZhciB0YWcgPSAodC5nZXREYXkoKSArIDYpICUgNzsgICAgICAgICAgICAv +LyBNbz0wIOKApiBTbz02CiAgICB0LnNldERhdGUodC5nZXREYXRlKCkgLSB0YWcgKyAzKTsgICAg +ICAgICAgLy8gRG9ubmVyc3RhZyBkaWVzZXIgV29jaGUKICAgIHZhciBqYWhyU3RhcnQgPSBuZXcg +RGF0ZSh0LmdldEZ1bGxZZWFyKCksIDAsIDQpOwogICAgdmFyIGt3ID0gMSArIE1hdGgucm91bmQo +KCh0IC0gamFoclN0YXJ0KSAvIDg2NDAwMDAwIC0gMyArICgoamFoclN0YXJ0LmdldERheSgpICsg +NikgJSA3KSkgLyA3KTsKICAgIHJldHVybiB7IGphaHI6IHQuZ2V0RnVsbFllYXIoKSwga3c6IGt3 +IH07Cn0KCnZhciBXT0NIRU5UQUdFID0gWydTbycsICdNbycsICdEaScsICdNaScsICdEbycsICdG +cicsICdTYSddOwp2YXIgTU9OQVRTTkFNRU4gPSBbJ0phbicsICdGZWInLCAnTcOkcicsICdBcHIn +LCAnTWFpJywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPa3QnLCAnTm92JywgJ0Rleidd +OwoKLy8gPT09PT0gRmFrdGVudGFiZWxsZSA9PT09PQoKdmFyIF9mYWt0ZW5DYWNoZSA9IG51bGws +IF9mYWt0ZW5TaWcgPSBudWxsOwoKZnVuY3Rpb24gX3BlcnNvbkluZGV4KCkgewogICAgdmFyIGlk +eCA9IHt9OwogICAgKFoucGVyc29uZW4gfHwgW10pLmZvckVhY2goZnVuY3Rpb24ocCkgeyBpZHhb +cGlkS2V5KHAuaWQpXSA9IHA7IH0pOwogICAgcmV0dXJuIGlkeDsKfQoKLy8gQmF1dCAodW5kIGNh +Y2hlZCkgZGllIEZha3RlbnRhYmVsbGU6IGVpbmUgWmVpbGUgcHJvIFBlcnNvbsOXVGFnw5dDb2Rl +LgpleHBvcnQgZnVuY3Rpb24gZmFrdGVuQmF1ZW4oKSB7CiAgICB2YXIgZWludHIgPSAoWi5wbGFu +dW5nICYmIFoucGxhbnVuZy5laW50cmFlZ2UpIHx8IHt9OwogICAgdmFyIHNpZyA9IE9iamVjdC5r +ZXlzKGVpbnRyKS5sZW5ndGggKyAnOicgKyAoWi5wZXJzb25lbiB8fCBbXSkubGVuZ3RoICsgJzon +ICsgKFoudGFnZSB8fCBbXSkubGVuZ3RoOwogICAgaWYgKF9mYWt0ZW5TaWcgPT09IHNpZyAmJiBf +ZmFrdGVuQ2FjaGUpIHJldHVybiBfZmFrdGVuQ2FjaGU7CiAgICBfa2FsZW5kZXJBdWZiYXVlbigp +OwogICAgdmFyIHBJZHggPSBfcGVyc29uSW5kZXgoKTsKICAgIHZhciBmYWt0ZW4gPSBbXTsKICAg +IHZhciB0YWdlID0gKFoudGFnZSAmJiBaLnRhZ2UubGVuZ3RoKSA/IFoudGFnZS5tYXAoZGF0dW1T +dHIpIDogT2JqZWN0LmtleXMoZWludHIpLnNvcnQoKTsKICAgIHRhZ2UuZm9yRWFjaChmdW5jdGlv +bihkYXR1bSkgewogICAgICAgIHZhciB0YWcgPSBlaW50cltkYXR1bV07CiAgICAgICAgaWYgKCF0 +YWcpIHJldHVybjsKICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGRhdHVtICsgJ1QwMDowMDowMCcp +OwogICAgICAgIHZhciB3ZCA9IGQuZ2V0RGF5KCk7CiAgICAgICAgdmFyIGlzbyA9IF9pc29LVyhk +KTsKICAgICAgICB2YXIgbW9uYXQgPSBkYXR1bS5zdWJzdHJpbmcoMCwgNyk7ICAgICAgICAgICAg +ICAgICAvLyAnWVlZWS1NTScKICAgICAgICBPYmplY3Qua2V5cyh0YWcpLmZvckVhY2goZnVuY3Rp +b24ocGlkKSB7CiAgICAgICAgICAgIHZhciBjb2RlID0gdGFnW3BpZF07CiAgICAgICAgICAgIGlm +ICghY29kZSkgcmV0dXJuOwogICAgICAgICAgICB2YXIgcCA9IHBJZHhbcGlkXTsKICAgICAgICAg +ICAgaWYgKCFwKSByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5h +a3RpdmUvdmVyc3RlY2t0ZSBQZXJzb24gLT4gbmljaHQgZ2V6YWVobHQKICAgICAgICAgICAgLy8g +RmVpZXJ0YWdzLUtsYXNzaWZpa2F0aW9uOiBLYXRhbG9nIChidW5kZXN3ZWl0L05SVykgaGF0IFZv +cnJhbmcsCiAgICAgICAgICAgIC8vIHNvbnN0IGFkbWluLWVpZ2VuZXIgRmVpZXJ0YWcgKC0+IFR5 +cCAnc29uc3RpZ2UnKS4gaXN0RmVpZXJ0YWcKICAgICAgICAgICAgLy8gYmxlaWJ0IHRydWUsIHNv +YmFsZCBlaW5lIGRlciBiZWlkZW4gUXVlbGxlbiBncmVpZnQuCiAgICAgICAgICAgIHZhciBrYXRJ +bmZvID0gZmVpZXJ0YWdJbmZvKGRhdHVtKTsKICAgICAgICAgICAgdmFyIGFkbWluRnQgPSBfZmVp +ZXJ0YWdTZXRbZGF0dW1dOwogICAgICAgICAgICB2YXIgZnROYW1lID0gJycsIGZ0VHlwID0gJyc7 +CiAgICAgICAgICAgIGlmIChrYXRJbmZvKSB7IGZ0TmFtZSA9IGthdEluZm8ubmFtZTsgZnRUeXAg +PSBrYXRJbmZvLnR5cDsgfQogICAgICAgICAgICBlbHNlIGlmIChhZG1pbkZ0KSB7IGZ0TmFtZSA9 +ICh0eXBlb2YgYWRtaW5GdCA9PT0gJ3N0cmluZycpID8gYWRtaW5GdCA6ICcnOyBmdFR5cCA9ICdz +b25zdGlnZSc7IH0KICAgICAgICAgICAgZmFrdGVuLnB1c2goewogICAgICAgICAgICAgICAgcGVy +c29uSWQ6IHBpZCwKICAgICAgICAgICAgICAgIHBlcnNvbkxhYmVsOiBfcGVyc29uTGFiZWwocCks +CiAgICAgICAgICAgICAgICBncnVwcGU6IHAuZ3J1cHBlIHx8ICfigJQnLAogICAgICAgICAgICAg +ICAgZnVua3Rpb246IHAuZnVua3Rpb24gfHwgJ+KAlCcsCiAgICAgICAgICAgICAgICBzdGFuZG9y +dDogcC5vZSB8fCAn4oCUJywKICAgICAgICAgICAgICAgIGRpZW5zdGdyYWQ6IHAuZGllbnN0Z3Jh +ZCB8fCAn4oCUJywKICAgICAgICAgICAgICAgIGRhdHVtOiBkYXR1bSwKICAgICAgICAgICAgICAg +IGphaHI6IFN0cmluZyhkLmdldEZ1bGxZZWFyKCkpLAogICAgICAgICAgICAgICAgbW9uYXQ6IG1v +bmF0LAogICAgICAgICAgICAgICAgbW9uYXRMYWJlbDogTU9OQVRTTkFNRU5bZC5nZXRNb250aCgp +XSArICcgJyArIGQuZ2V0RnVsbFllYXIoKSwKICAgICAgICAgICAgICAgIGt3S2V5OiBpc28uamFo +ciArICctJyArIChpc28ua3cgPCAxMCA/ICcwJyA6ICcnKSArIGlzby5rdywKICAgICAgICAgICAg +ICAgIGt3TGFiZWw6ICdLVyAnICsgaXNvLmt3LAogICAgICAgICAgICAgICAgd29jaGVudGFnOiB3 +ZCwKICAgICAgICAgICAgICAgIHdvY2hlbnRhZ0xhYmVsOiBXT0NIRU5UQUdFW3dkXSwKICAgICAg +ICAgICAgICAgIGlzdFdFOiBpc3RXb2NoZW5lbmRlKGQpLAogICAgICAgICAgICAgICAgaXN0RmVp +ZXJ0YWc6ICEhYWRtaW5GdCB8fCAhIWthdEluZm8sCiAgICAgICAgICAgICAgICBmZWllcnRhZ05h +bWU6IGZ0TmFtZSwKICAgICAgICAgICAgICAgIGZlaWVydGFnVHlwOiBmdFR5cCwgICAgICAgICAg +ICAgICAgICAgICAgICAgIC8vICdidW5kZXN3ZWl0JyB8ICducncnIHwgJ3NvbnN0aWdlJyB8ICcn +CiAgICAgICAgICAgICAgICBpc3RGZXJpZW46ICEhX2ZlcmllblNldFtkYXR1bV0sCiAgICAgICAg +ICAgICAgICBjb2RlOiBjb2RlLAogICAgICAgICAgICAgICAgc2NoaWNodDogX3NjaGljaHRWb24o +Y29kZSksCiAgICAgICAgICAgICAgICByb2xsZTogX3JvbGxlVm9uKGNvZGUpLAogICAgICAgICAg +ICAgICAga2F0ZWdvcmllOiBfZ3JvYmtsYXNzZShjb2RlKSwKICAgICAgICAgICAgICAgIGlzdERp +ZW5zdDogX2lzdERpZW5zdChjb2RlKQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0p +OwogICAgX2Zha3RlbkNhY2hlID0gZmFrdGVuOyBfZmFrdGVuU2lnID0gc2lnOwogICAgcmV0dXJu +IGZha3RlbjsKfQoKZnVuY3Rpb24gX3BlcnNvbkxhYmVsKHApIHsKICAgIHZhciBuID0gKHAubmFt +ZSB8fCAnJykudHJpbSgpOwogICAgdmFyIHYgPSAocC52b3JuYW1lIHx8ICcnKS50cmltKCk7CiAg +ICByZXR1cm4gdiA/IChuICsgJywgJyArIHYpIDogbjsKfQoKLy8gPT09PT0gRGltZW5zaW9uZW4g +KEdyb3VwLWJ5LUFjaHNlbikgPT09PT0KLy8gd2VydChmKSAtPiBTY2hsdWVzc2VsICh6dWdsZWlj +aCBTb3J0aWVya3JpdGVyaXVtIGZ1ZXIgJ3plaXQnLU9yZG51bmcpLAovLyBsYWJlbChrZXkpIC0+ +IEFuemVpZ2UuIG9yZG51bmc6ICduYXR1cicgKGFscGhhYmV0aXNjaC9XZXJ0KSB8ICd6ZWl0JyB8 +ICdmaXgnLgoKZXhwb3J0IHZhciBESU1FTlNJT05FTiA9IFsKICAgIHsga2V5OiAnZ3J1cHBlJywg +ICAgIGxhYmVsOiAnRGllbnN0Z3J1cHBlJywgb3JkbnVuZzogJ25hdHVyJywgd2VydDogZnVuY3Rp +b24oZil7IHJldHVybiBmLmdydXBwZTsgfSB9LAogICAgeyBrZXk6ICdmdW5rdGlvbicsICAgbGFi +ZWw6ICdGdW5rdGlvbicsICAgICBvcmRudW5nOiAnbmF0dXInLCB3ZXJ0OiBmdW5jdGlvbihmKXsg +cmV0dXJuIGYuZnVua3Rpb247IH0gfSwKICAgIHsga2V5OiAnc3RhbmRvcnQnLCAgIGxhYmVsOiAn +U3RhbmRvcnQnLCAgICAgb3JkbnVuZzogJ25hdHVyJywgd2VydDogZnVuY3Rpb24oZil7IHJldHVy +biBmLnN0YW5kb3J0OyB9IH0sCiAgICB7IGtleTogJ2RpZW5zdGdyYWQnLCBsYWJlbDogJ0RpZW5z +dGdyYWQnLCAgIG9yZG51bmc6ICduYXR1cicsIHdlcnQ6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5k +aWVuc3RncmFkOyB9IH0sCiAgICB7IGtleTogJ3BlcnNvbicsICAgICBsYWJlbDogJ1BlcnNvbics +ICAgICAgIG9yZG51bmc6ICduYXR1cicsIHdlcnQ6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5wZXJz +b25MYWJlbDsgfSB9LAogICAgeyBrZXk6ICdrYXRlZ29yaWUnLCAgbGFiZWw6ICdUYWctS2F0ZWdv +cmllJywgb3JkbnVuZzogJ25hdHVyJywgd2VydDogZnVuY3Rpb24oZil7IHJldHVybiBmLmthdGVn +b3JpZTsgfSB9LAogICAgeyBrZXk6ICdzY2hpY2h0JywgICAgbGFiZWw6ICdTY2hpY2h0IChGL1Mv +TiknLCBvcmRudW5nOiAnZml4JywgZml4UmVpaGU6IFsnRicsICdTJywgJ04nLCAn4oCUJ10sCiAg +ICAgICAgd2VydDogZnVuY3Rpb24oZil7IHJldHVybiBmLnNjaGljaHQgfHwgJ+KAlCc7IH0sIGxh +YmVsMjogZnVuY3Rpb24oayl7IHJldHVybiAoe0Y6J0Zyw7xoJywgUzonU3DDpHQnLCBOOidOYWNo +dCcsICfigJQnOidrZWluIERpZW5zdCd9KVtrXSB8fCBrOyB9IH0sCiAgICB7IGtleTogJ3JvbGxl +JywgICAgICBsYWJlbDogJ0RHTC9XREYvRkJQJywgIG9yZG51bmc6ICdmaXgnLCBmaXhSZWloZTog +WydER0wnLCAnV0RGJywgJ0ZCUCcsICfigJQnXSwKICAgICAgICB3ZXJ0OiBmdW5jdGlvbihmKXsg +cmV0dXJuIGYucm9sbGUgfHwgJ+KAlCc7IH0gfSwKICAgIHsga2V5OiAnY29kZScsICAgICAgIGxh +YmVsOiAnU2NoaWNodGNvZGUnLCAgb3JkbnVuZzogJ25hdHVyJywgd2VydDogZnVuY3Rpb24oZil7 +IHJldHVybiBmLmNvZGU7IH0gfSwKICAgIHsga2V5OiAnbW9uYXQnLCAgICAgIGxhYmVsOiAnTW9u +YXQnLCAgICAgICAgb3JkbnVuZzogJ3plaXQnLCB3ZXJ0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYu +bW9uYXQ7IH0sIGxhYmVsMjogZnVuY3Rpb24oaywgZil7IHJldHVybiBmID8gZi5tb25hdExhYmVs +IDogazsgfSB9LAogICAgeyBrZXk6ICdrdycsICAgICAgICAgbGFiZWw6ICdLYWxlbmRlcndvY2hl +Jywgb3JkbnVuZzogJ3plaXQnLCB3ZXJ0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYua3dLZXk7IH0s +IGxhYmVsMjogZnVuY3Rpb24oaywgZil7IHJldHVybiBmID8gZi5rd0xhYmVsIDogazsgfSB9LAog +ICAgeyBrZXk6ICd3b2NoZW50YWcnLCAgbGFiZWw6ICdXb2NoZW50YWcnLCAgICBvcmRudW5nOiAn +Zml4JywgZml4UmVpaGU6IFsnTW8nLCAnRGknLCAnTWknLCAnRG8nLCAnRnInLCAnU2EnLCAnU28n +XSwKICAgICAgICB3ZXJ0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYud29jaGVudGFnTGFiZWw7IH0g +fSwKICAgIHsga2V5OiAnamFocicsICAgICAgIGxhYmVsOiAnSmFocicsICAgICAgICAgb3JkbnVu +ZzogJ3plaXQnLCB3ZXJ0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYuamFocjsgfSB9LAogICAgeyBr +ZXk6ICdpc3RXRScsICAgICAgbGFiZWw6ICdXb2NoZW5lbmRlPycsICBvcmRudW5nOiAnZml4Jywg +Zml4UmVpaGU6IFsnV29jaGVuZW5kZScsICdXZXJrdGFnJ10sCiAgICAgICAgd2VydDogZnVuY3Rp +b24oZil7IHJldHVybiBmLmlzdFdFID8gJ1dvY2hlbmVuZGUnIDogJ1dlcmt0YWcnOyB9IH0sCiAg +ICB7IGtleTogJ2ZlaWVydGFnJywgICAgbGFiZWw6ICdGZWllcnRhZyAoTmFtZSknLCBvcmRudW5n +OiAnbmF0dXInLAogICAgICAgIHdlcnQ6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5mZWllcnRhZ05h +bWUgfHwgJ2tlaW4gRmVpZXJ0YWcnOyB9IH0sCiAgICB7IGtleTogJ2ZlaWVydGFnVHlwJywgbGFi +ZWw6ICdGZWllcnRhZyAoQnVuZC9OUlcpJywgb3JkbnVuZzogJ2ZpeCcsCiAgICAgICAgZml4UmVp +aGU6IFsnQnVuZGVzd2VpdCcsICdOUlctc3BlemlmaXNjaCcsICdTb25zdGlnZXIgRmVpZXJ0YWcn +LCAna2VpbiBGZWllcnRhZyddLAogICAgICAgIHdlcnQ6IGZ1bmN0aW9uKGYpeyByZXR1cm4gX2Zl +aWVydGFnVHlwTGFiZWwoZi5mZWllcnRhZ1R5cCk7IH0gfQpdOwoKLy8gQW56ZWlnZS1MYWJlbCBm +dWVyIGRlbiBGZWllcnRhZ3MtVHlwIGVpbmVyIEZha3RlbnplaWxlLgpleHBvcnQgZnVuY3Rpb24g +X2ZlaWVydGFnVHlwTGFiZWwodHlwKSB7CiAgICBpZiAodHlwID09PSAnYnVuZGVzd2VpdCcpIHJl +dHVybiAnQnVuZGVzd2VpdCc7CiAgICBpZiAodHlwID09PSAnbnJ3JykgICAgICAgIHJldHVybiAn +TlJXLXNwZXppZmlzY2gnOwogICAgaWYgKHR5cCA9PT0gJ3NvbnN0aWdlJykgICByZXR1cm4gJ1Nv +bnN0aWdlciBGZWllcnRhZyc7CiAgICByZXR1cm4gJ2tlaW4gRmVpZXJ0YWcnOwp9CgpleHBvcnQg +ZnVuY3Rpb24gZGltRmluZGVuKGtleSkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBESU1FTlNJ +T05FTi5sZW5ndGg7IGkrKykgaWYgKERJTUVOU0lPTkVOW2ldLmtleSA9PT0ga2V5KSByZXR1cm4g +RElNRU5TSU9ORU5baV07CiAgICByZXR1cm4gbnVsbDsKfQoKLy8gPT09PT0gS2VubnphaGxlbiAo +WmVsbC1BZ2dyZWdhdGlvbiB1ZWJlciBGYWt0ZW4pID09PT09CgpleHBvcnQgdmFyIEtFTk5aQUhM +RU4gPSBbCiAgICB7IGtleTogJ2FuemFobCcsICAgIGxhYmVsOiAnQW56YWhsIEVpbnRyw6RnZScs +ICBlaW5oZWl0OiAnRWludHLDpGdlJyB9LAogICAgeyBrZXk6ICdwZXJzb25lbicsICBsYWJlbDog +J1ZlcnNjaC4gUGVyc29uZW4nLCBlaW5oZWl0OiAnUGVyc29uZW4nIH0sCiAgICB7IGtleTogJ3Rh +Z2UnLCAgICAgIGxhYmVsOiAnVmVyc2NoLiBUYWdlJywgICAgIGVpbmhlaXQ6ICdUYWdlJyB9LAog +ICAgeyBrZXk6ICdwcm9QZXJzb24nLCBsYWJlbDogJ8OYIHBybyBQZXJzb24nLCAgICAgZWluaGVp +dDogJ8OYL1BlcnNvbicgfSwKICAgIHsga2V5OiAnYW50ZWlsJywgICAgbGFiZWw6ICdBbnRlaWwg +KCUpJywgICAgICAgZWluaGVpdDogJyUnIH0KXTsKCmV4cG9ydCBmdW5jdGlvbiBrZW5uemFobEZp +bmRlbihrZXkpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgS0VOTlpBSExFTi5sZW5ndGg7IGkr +KykgaWYgKEtFTk5aQUhMRU5baV0ua2V5ID09PSBrZXkpIHJldHVybiBLRU5OWkFITEVOW2ldOwog +ICAgcmV0dXJuIG51bGw7Cn0KCmZ1bmN0aW9uIF9kaXN0aW5jdChhcnIpIHsKICAgIHZhciBzZWVu +ID0ge30sIG4gPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsg +aWYgKCFzZWVuW2FycltpXV0pIHsgc2VlblthcnJbaV1dID0gMTsgbisrOyB9IH0KICAgIHJldHVy +biBuOwp9CmZ1bmN0aW9uIF9hZ2coZmFrdGVuLCBrZW5uemFobCkgewogICAgaWYgKCFmYWt0ZW4g +fHwgIWZha3Rlbi5sZW5ndGgpIHJldHVybiAwOwogICAgaWYgKGtlbm56YWhsID09PSAncGVyc29u +ZW4nKSByZXR1cm4gX2Rpc3RpbmN0KGZha3Rlbi5tYXAoZnVuY3Rpb24oZil7IHJldHVybiBmLnBl +cnNvbklkOyB9KSk7CiAgICBpZiAoa2VubnphaGwgPT09ICd0YWdlJykgICAgIHJldHVybiBfZGlz +dGluY3QoZmFrdGVuLm1hcChmdW5jdGlvbihmKXsgcmV0dXJuIGYuZGF0dW07IH0pKTsKICAgIGlm +IChrZW5uemFobCA9PT0gJ3Byb1BlcnNvbicpIHsKICAgICAgICB2YXIgcCA9IF9kaXN0aW5jdChm +YWt0ZW4ubWFwKGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5wZXJzb25JZDsgfSkpOwogICAgICAgIHJl +dHVybiBwID8gTWF0aC5yb3VuZChmYWt0ZW4ubGVuZ3RoIC8gcCAqIDEwKSAvIDEwIDogMDsKICAg +IH0KICAgIHJldHVybiBmYWt0ZW4ubGVuZ3RoOyAvLyAnYW56YWhsJyAodW5kIEJhc2lzIGZ1ZXIg +J2FudGVpbCcpCn0KCi8vID09PT09IEZpbHRlciA9PT09PQoKZnVuY3Rpb24gX2ZpbHRlclBhc3N0 +KGYsIHNwZWMpIHsKICAgIHZhciBmaSA9IHNwZWMuZmlsdGVyIHx8IHt9OwogICAgaWYgKGZpLnBl +cnNvbmVuICYmIGZpLnBlcnNvbmVuLmxlbmd0aCAmJiBmaS5wZXJzb25lbi5pbmRleE9mKGYucGVy +c29uSWQpIDwgMCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGZpLmdydXBwZW4gJiYgZmkuZ3J1cHBl +bi5sZW5ndGggJiYgZmkuZ3J1cHBlbi5pbmRleE9mKGYuZ3J1cHBlKSA8IDApIHJldHVybiBmYWxz +ZTsKICAgIGlmIChmaS5mdW5rdGlvbmVuICYmIGZpLmZ1bmt0aW9uZW4ubGVuZ3RoICYmIGZpLmZ1 +bmt0aW9uZW4uaW5kZXhPZihmLmZ1bmt0aW9uKSA8IDApIHJldHVybiBmYWxzZTsKICAgIGlmIChm +aS5zdGFuZG9ydGUgJiYgZmkuc3RhbmRvcnRlLmxlbmd0aCAmJiBmaS5zdGFuZG9ydGUuaW5kZXhP +ZihmLnN0YW5kb3J0KSA8IDApIHJldHVybiBmYWxzZTsKICAgIGlmIChmaS5kaWVuc3RncmFkZSAm +JiBmaS5kaWVuc3RncmFkZS5sZW5ndGggJiYgZmkuZGllbnN0Z3JhZGUuaW5kZXhPZihmLmRpZW5z +dGdyYWQpIDwgMCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGZpLmNvZGVzICYmIGZpLmNvZGVzLmxl +bmd0aCAmJiBmaS5jb2Rlcy5pbmRleE9mKGYuY29kZSkgPCAwKSByZXR1cm4gZmFsc2U7CiAgICBp +ZiAoZmkua2F0ZWdvcmllbiAmJiBmaS5rYXRlZ29yaWVuLmxlbmd0aCAmJiBmaS5rYXRlZ29yaWVu +LmluZGV4T2YoZi5rYXRlZ29yaWUpIDwgMCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGZpLm51cldF +ICYmICFmLmlzdFdFKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZmkubnVyRmVpZXJ0YWcgJiYgIWYu +aXN0RmVpZXJ0YWcpIHJldHVybiBmYWxzZTsKICAgIGlmIChmaS5udXJGZWllcnRhZ0J1bmQgJiYg +Zi5mZWllcnRhZ1R5cCAhPT0gJ2J1bmRlc3dlaXQnKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZmku +bnVyRmVpZXJ0YWdOUlcgJiYgZi5mZWllcnRhZ1R5cCAhPT0gJ25ydycpIHJldHVybiBmYWxzZTsK +ICAgIGlmIChmaS5udXJEaWVuc3QgJiYgIWYuaXN0RGllbnN0KSByZXR1cm4gZmFsc2U7CiAgICBp +ZiAoZmkud29jaGVudGFnZSAmJiBmaS53b2NoZW50YWdlLmxlbmd0aCAmJiBmaS53b2NoZW50YWdl +LmluZGV4T2YoZi53b2NoZW50YWcpIDwgMCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHNwZWMuemVp +dFZvbiAmJiBmLmRhdHVtIDwgc3BlYy56ZWl0Vm9uKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoc3Bl +Yy56ZWl0QmlzICYmIGYuZGF0dW0gPiBzcGVjLnplaXRCaXMpIHJldHVybiBmYWxzZTsKICAgIHJl +dHVybiB0cnVlOwp9CgovLyA9PT09PSBBdXN3ZXJ0dW5nID09PT09Ci8vCi8vIExpZWZlcnQgZWlu +IGRpYWdyYW1tLW5ldXRyYWxlcyBFcmdlYm5pczoKLy8gICB7IGthdGVnb3JpZW46W3trZXksbGFi +ZWx9XSwgc2VyaWVuOlt7bmFtZSwgd2VydGU6Wy4uLl19XSwgZWluaGVpdCwgZ2VzYW10LAovLyAg +ICAgcHVua3RlOlt7bGFiZWwseCx5fV0gKFNjYXR0ZXIpLCBpc3RMZWVyIH0KCmV4cG9ydCBmdW5j +dGlvbiBhdXN3ZXJ0ZW4oc3BlYykgewogICAgc3BlYyA9IHNwZWMgfHwge307CiAgICB2YXIgZmFr +dGVuID0gZmFrdGVuQmF1ZW4oKS5maWx0ZXIoZnVuY3Rpb24oZil7IHJldHVybiBfZmlsdGVyUGFz +c3QoZiwgc3BlYyk7IH0pOwogICAgaWYgKCFmYWt0ZW4ubGVuZ3RoKSByZXR1cm4geyBpc3RMZWVy +OiB0cnVlLCBrYXRlZ29yaWVuOiBbXSwgc2VyaWVuOiBbXSwgcHVua3RlOiBbXSB9OwoKICAgIGlm +IChzcGVjLmRpYWdyYW1tID09PSAnc2NhdHRlcicpIHJldHVybiBfYXVzd2VydGVuU2NhdHRlcihz +cGVjLCBmYWt0ZW4pOwoKICAgIHZhciBkaW1YID0gZGltRmluZGVuKHNwZWMuZGltWCkgfHwgZGlt +RmluZGVuKCdncnVwcGUnKTsKICAgIHZhciBkaW1TID0gc3BlYy5kaW1TZXJpZSA/IGRpbUZpbmRl +bihzcGVjLmRpbVNlcmllKSA6IG51bGw7CiAgICB2YXIga2VubnphaGwgPSBzcGVjLmtlbm56YWhs +IHx8ICdhbnphaGwnOwoKICAgIC8vIFplbGxlbjogY2F0S2V5IC0+IHNlcmllS2V5IC0+IGZha3Rl +bltdCiAgICB2YXIgemVsbGVuID0ge30sIGNhdE1ldGEgPSB7fSwgc2VyaWVNZXRhID0ge307CiAg +ICBmYWt0ZW4uZm9yRWFjaChmdW5jdGlvbihmKSB7CiAgICAgICAgdmFyIGNrID0gZGltWC53ZXJ0 +KGYpOwogICAgICAgIHZhciBzayA9IGRpbVMgPyBkaW1TLndlcnQoZikgOiAnX19hbGwnOwogICAg +ICAgIGlmICghY2F0TWV0YVtja10pIGNhdE1ldGFbY2tdID0geyBrZXk6IGNrLCBsYWJlbDogX2Rp +bUxhYmVsKGRpbVgsIGNrLCBmKSwgYmVpc3BpZWw6IGYgfTsKICAgICAgICBpZiAoIXNlcmllTWV0 +YVtza10pIHNlcmllTWV0YVtza10gPSB7IGtleTogc2ssIGxhYmVsOiBkaW1TID8gX2RpbUxhYmVs +KGRpbVMsIHNrLCBmKSA6ICcnIH07CiAgICAgICAgKHplbGxlbltja10gfHwgKHplbGxlbltja10g +PSB7fSkpOwogICAgICAgICh6ZWxsZW5bY2tdW3NrXSB8fCAoemVsbGVuW2NrXVtza10gPSBbXSkp +LnB1c2goZik7CiAgICB9KTsKCiAgICB2YXIga2F0S2V5cyA9IF9zb3J0S2F0ZWdvcmllbihPYmpl +Y3Qua2V5cyhjYXRNZXRhKSwgY2F0TWV0YSwgZGltWCk7CiAgICB2YXIgc2VyaWVLZXlzID0gX3Nv +cnRLYXRlZ29yaWVuKE9iamVjdC5rZXlzKHNlcmllTWV0YSksIHNlcmllTWV0YSwgZGltUyB8fCBk +aW1YKTsKCiAgICAvLyBSb2gtQWdncmVnYXRlCiAgICB2YXIgZ2VzYW10ID0gMDsKICAgIHZhciBz +ZXJpZW4gPSBzZXJpZUtleXMubWFwKGZ1bmN0aW9uKHNrKSB7CiAgICAgICAgdmFyIHdlcnRlID0g +a2F0S2V5cy5tYXAoZnVuY3Rpb24oY2spIHsKICAgICAgICAgICAgdmFyIHYgPSBfYWdnKCh6ZWxs +ZW5bY2tdICYmIHplbGxlbltja11bc2tdKSB8fCBbXSwga2VubnphaGwgPT09ICdhbnRlaWwnID8g +J2FuemFobCcgOiBrZW5uemFobCk7CiAgICAgICAgICAgIGdlc2FtdCArPSAoa2VubnphaGwgPT09 +ICdhbnRlaWwnKSA/IHYgOiAwOwogICAgICAgICAgICByZXR1cm4gdjsKICAgICAgICB9KTsKICAg +ICAgICByZXR1cm4geyBuYW1lOiBzZXJpZU1ldGFbc2tdLmxhYmVsLCB3ZXJ0ZTogd2VydGUgfTsK +ICAgIH0pOwoKICAgIC8vIEFudGVpbCAoJSk6IGplZGUgWmVsbGUgcmVsYXRpdiB6dXIgR2VzYW10 +c3VtbWUgYWxsZXIgWmVsbGVuLgogICAgaWYgKGtlbm56YWhsID09PSAnYW50ZWlsJyAmJiBnZXNh +bXQgPiAwKSB7CiAgICAgICAgc2VyaWVuLmZvckVhY2goZnVuY3Rpb24ocykgewogICAgICAgICAg +ICBzLndlcnRlID0gcy53ZXJ0ZS5tYXAoZnVuY3Rpb24odil7IHJldHVybiBNYXRoLnJvdW5kKHYg +LyBnZXNhbXQgKiAxMDAwKSAvIDEwOyB9KTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvLyBTb3J0 +aWVydW5nIGRlciBLYXRlZ29yaWVuIG5hY2ggV2VydCAoUmFua2luZykgKyBUb3BOLgogICAgdmFy +IGVyZ2VibmlzID0gX3NvcnRVbmRUb3Aoc3BlYywga2F0S2V5cywgY2F0TWV0YSwgc2VyaWVuKTsK +CiAgICByZXR1cm4gewogICAgICAgIGlzdExlZXI6IGZhbHNlLAogICAgICAgIGthdGVnb3JpZW46 +IGVyZ2VibmlzLmthdGVnb3JpZW4sCiAgICAgICAgc2VyaWVuOiBlcmdlYm5pcy5zZXJpZW4sCiAg +ICAgICAgbWVocnNlcmlnOiAhIWRpbVMsCiAgICAgICAgZWluaGVpdDogKGtlbm56YWhsRmluZGVu +KGtlbm56YWhsKSB8fCB7fSkuZWluaGVpdCB8fCAnJywKICAgICAgICBkaW1YTGFiZWw6IGRpbVgu +bGFiZWwsCiAgICAgICAgZGltU2VyaWVMYWJlbDogZGltUyA/IGRpbVMubGFiZWwgOiAnJywKICAg +ICAgICBrZW5uemFobExhYmVsOiAoa2VubnphaGxGaW5kZW4oa2VubnphaGwpIHx8IHt9KS5sYWJl +bCB8fCAnJwogICAgfTsKfQoKZnVuY3Rpb24gX2RpbUxhYmVsKGRpbSwga2V5LCBmYWt0KSB7CiAg +ICBpZiAoZGltLmxhYmVsMikgcmV0dXJuIGRpbS5sYWJlbDIoa2V5LCBmYWt0KTsKICAgIHJldHVy +biBrZXk7Cn0KCmZ1bmN0aW9uIF9zb3J0S2F0ZWdvcmllbihrZXlzLCBtZXRhLCBkaW0pIHsKICAg +IGlmIChkaW0gJiYgZGltLm9yZG51bmcgPT09ICdmaXgnICYmIGRpbS5maXhSZWloZSkgewogICAg +ICAgIHZhciByZWloZSA9IGRpbS5maXhSZWloZTsKICAgICAgICByZXR1cm4ga2V5cy5zbGljZSgp +LnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgICAgICB2YXIgaWEgPSByZWloZS5pbmRleE9m +KGEpLCBpYiA9IHJlaWhlLmluZGV4T2YoYik7CiAgICAgICAgICAgIGlmIChpYSA8IDApIGlhID0g +OTk5OyBpZiAoaWIgPCAwKSBpYiA9IDk5OTsKICAgICAgICAgICAgcmV0dXJuIGlhIC0gaWIgfHwg +YS5sb2NhbGVDb21wYXJlKGIsICdkZScpOwogICAgICAgIH0pOwogICAgfQogICAgaWYgKGRpbSAm +JiBkaW0ub3JkbnVuZyA9PT0gJ3plaXQnKSB7CiAgICAgICAgcmV0dXJuIGtleXMuc2xpY2UoKS5z +b3J0KGZ1bmN0aW9uKGEsIGIpeyByZXR1cm4gYSA8IGIgPyAtMSA6IChhID4gYiA/IDEgOiAwKTsg +fSk7CiAgICB9CiAgICByZXR1cm4ga2V5cy5zbGljZSgpLnNvcnQoZnVuY3Rpb24oYSwgYil7IHJl +dHVybiBhLmxvY2FsZUNvbXBhcmUoYiwgJ2RlJyk7IH0pOwp9CgpmdW5jdGlvbiBfc29ydFVuZFRv +cChzcGVjLCBrYXRLZXlzLCBjYXRNZXRhLCBzZXJpZW4pIHsKICAgIHZhciBzb3J0ID0gc3BlYy5z +b3J0IHx8ICdsYWJlbCc7CiAgICB2YXIgaWR4UmVpaGUgPSBrYXRLZXlzLm1hcChmdW5jdGlvbihf +LCBpKXsgcmV0dXJuIGk7IH0pOwoKICAgIGlmIChzb3J0ID09PSAnd2VydC1kZXNjJyB8fCBzb3J0 +ID09PSAnd2VydC1hc2MnKSB7CiAgICAgICAgdmFyIHN1bW1lbiA9IGthdEtleXMubWFwKGZ1bmN0 +aW9uKF8sIGkpIHsKICAgICAgICAgICAgdmFyIHMgPSAwOyBzZXJpZW4uZm9yRWFjaChmdW5jdGlv +bihzZSl7IHMgKz0gc2Uud2VydGVbaV0gfHwgMDsgfSk7IHJldHVybiBzOwogICAgICAgIH0pOwog +ICAgICAgIGlkeFJlaWhlLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgICAgICByZXR1cm4g +c29ydCA9PT0gJ3dlcnQtZGVzYycgPyBzdW1tZW5bYl0gLSBzdW1tZW5bYV0gOiBzdW1tZW5bYV0g +LSBzdW1tZW5bYl07CiAgICAgICAgfSk7CiAgICB9CiAgICAvLyAoc29uc3Q6IFJlaWhlbmZvbGdl +IGF1cyBfc29ydEthdGVnb3JpZW4gYmVpYmVoYWx0ZW4pCgogICAgdmFyIHRvcE4gPSBzcGVjLnRv +cE4gfHwgMDsKICAgIGlmICh0b3BOID4gMCAmJiBpZHhSZWloZS5sZW5ndGggPiB0b3BOKSBpZHhS +ZWloZSA9IGlkeFJlaWhlLnNsaWNlKDAsIHRvcE4pOwoKICAgIHZhciBrYXRlZ29yaWVuID0gaWR4 +UmVpaGUubWFwKGZ1bmN0aW9uKGkpeyByZXR1cm4geyBrZXk6IGthdEtleXNbaV0sIGxhYmVsOiBj +YXRNZXRhW2thdEtleXNbaV1dLmxhYmVsIH07IH0pOwogICAgdmFyIG5ldWVTZXJpZW4gPSBzZXJp +ZW4ubWFwKGZ1bmN0aW9uKHNlKSB7CiAgICAgICAgcmV0dXJuIHsgbmFtZTogc2UubmFtZSwgd2Vy +dGU6IGlkeFJlaWhlLm1hcChmdW5jdGlvbihpKXsgcmV0dXJuIHNlLndlcnRlW2ldOyB9KSB9Owog +ICAgfSk7CiAgICByZXR1cm4geyBrYXRlZ29yaWVuOiBrYXRlZ29yaWVuLCBzZXJpZW46IG5ldWVT +ZXJpZW4gfTsKfQoKLy8gLS0tLS0gU2NhdHRlcjogendlaSBQZXJzb25lbi1LZW5uemFobGVuIGdl +Z2VuZWluYW5kZXIgLS0tLS0KLy8gc2NhdHRlclgvc2NhdHRlclkgcmVmZXJlbnppZXJlbiBQRVJT +T05fTUFTU0UgKFphZWhsdW5nZW4gcHJvIFBlcnNvbiB1ZWJlciBkaWUKLy8gZ2VmaWx0ZXJ0ZW4g +RmFrdGVuIOKAlCB6LkIuIE5hY2h0ZGllbnN0ZSB2cy4gVXJsYXVic3RhZ2UgamUgUGVyc29uKS4K +CmV4cG9ydCB2YXIgUEVSU09OX01BU1NFID0gWwogICAgeyBrZXk6ICdkaWVuc3RlJywgICAgIGxh +YmVsOiAnRGllbnN0ZSBnZXNhbXQnLCB0ZXN0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYuaXN0RGll +bnN0OyB9IH0sCiAgICB7IGtleTogJ2ZydWVoJywgICAgICAgbGFiZWw6ICdGcsO8aGRpZW5zdGUn +LCAgICB0ZXN0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYuc2NoaWNodCA9PT0gJ0YnOyB9IH0sCiAg +ICB7IGtleTogJ3NwYWV0JywgICAgICAgbGFiZWw6ICdTcMOkdGRpZW5zdGUnLCAgICB0ZXN0OiBm +dW5jdGlvbihmKXsgcmV0dXJuIGYuc2NoaWNodCA9PT0gJ1MnOyB9IH0sCiAgICB7IGtleTogJ25h +Y2h0JywgICAgICAgbGFiZWw6ICdOYWNodGRpZW5zdGUnLCAgIHRlc3Q6IGZ1bmN0aW9uKGYpeyBy +ZXR1cm4gZi5zY2hpY2h0ID09PSAnTic7IH0gfSwKICAgIHsga2V5OiAnd2UnLCAgICAgICAgICBs +YWJlbDogJ1dFLURpZW5zdGUnLCAgICAgdGVzdDogZnVuY3Rpb24oZil7IHJldHVybiBmLmlzdERp +ZW5zdCAmJiBmLmlzdFdFOyB9IH0sCiAgICB7IGtleTogJ2ZlaWVydGFnJywgICAgbGFiZWw6ICdG +ZWllcnRhZ3NkaWVuc3RlJywgdGVzdDogZnVuY3Rpb24oZil7IHJldHVybiBmLmlzdERpZW5zdCAm +JiBmLmlzdEZlaWVydGFnOyB9IH0sCiAgICB7IGtleTogJ2ZlaWVydGFnTlJXJywgbGFiZWw6ICdO +UlctRmVpZXJ0YWdzZGllbnN0ZScsIHRlc3Q6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5pc3REaWVu +c3QgJiYgZi5mZWllcnRhZ1R5cCA9PT0gJ25ydyc7IH0gfSwKICAgIHsga2V5OiAnZGdsJywgICAg +ICAgICBsYWJlbDogJ0RHTC1FaW5zw6R0emUnLCAgIHRlc3Q6IGZ1bmN0aW9uKGYpeyByZXR1cm4g +Zi5yb2xsZSA9PT0gJ0RHTCc7IH0gfSwKICAgIHsga2V5OiAndXJsYXViJywgICAgICBsYWJlbDog +J1VybGF1YnN0YWdlJywgICAgdGVzdDogZnVuY3Rpb24oZil7IHJldHVybiBmLmNvZGUgPT09ICdV +cmwnOyB9IH0sCiAgICB7IGtleTogJ2ZvcnRiaWxkdW5nJywgbGFiZWw6ICdGb3J0YmlsZHVuZycs +ICAgIHRlc3Q6IGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5rYXRlZ29yaWUgPT09ICdBdXMtL0ZvcnRi +aWxkdW5nJzsgfSB9LAogICAgeyBrZXk6ICdmcmVpJywgICAgICAgIGxhYmVsOiAnRnJlaS1UYWdl +JywgICAgICB0ZXN0OiBmdW5jdGlvbihmKXsgcmV0dXJuIGYua2F0ZWdvcmllID09PSAnRnJlaSc7 +IH0gfQpdOwpleHBvcnQgZnVuY3Rpb24gcGVyc29uTWFzc0ZpbmRlbihrZXkpIHsKICAgIGZvciAo +dmFyIGkgPSAwOyBpIDwgUEVSU09OX01BU1NFLmxlbmd0aDsgaSsrKSBpZiAoUEVSU09OX01BU1NF +W2ldLmtleSA9PT0ga2V5KSByZXR1cm4gUEVSU09OX01BU1NFW2ldOwogICAgcmV0dXJuIG51bGw7 +Cn0KCmZ1bmN0aW9uIF9hdXN3ZXJ0ZW5TY2F0dGVyKHNwZWMsIGZha3RlbikgewogICAgdmFyIG14 +ID0gcGVyc29uTWFzc0ZpbmRlbihzcGVjLnNjYXR0ZXJYKSB8fCBQRVJTT05fTUFTU0VbM107IC8v +IG5hY2h0CiAgICB2YXIgbXkgPSBwZXJzb25NYXNzRmluZGVuKHNwZWMuc2NhdHRlclkpIHx8IFBF +UlNPTl9NQVNTRVs2XTsgLy8gdXJsYXViCiAgICB2YXIgcHJvUGVyc29uID0ge307CiAgICBmYWt0 +ZW4uZm9yRWFjaChmdW5jdGlvbihmKSB7CiAgICAgICAgdmFyIGUgPSBwcm9QZXJzb25bZi5wZXJz +b25JZF0gfHwgKHByb1BlcnNvbltmLnBlcnNvbklkXSA9IHsgbGFiZWw6IGYucGVyc29uTGFiZWws +IHg6IDAsIHk6IDAgfSk7CiAgICAgICAgaWYgKG14LnRlc3QoZikpIGUueCsrOwogICAgICAgIGlm +IChteS50ZXN0KGYpKSBlLnkrKzsKICAgIH0pOwogICAgdmFyIHB1bmt0ZSA9IE9iamVjdC5rZXlz +KHByb1BlcnNvbikubWFwKGZ1bmN0aW9uKHBpZCl7IHJldHVybiBwcm9QZXJzb25bcGlkXTsgfSk7 +CiAgICByZXR1cm4gewogICAgICAgIGlzdExlZXI6IHB1bmt0ZS5sZW5ndGggPT09IDAsCiAgICAg +ICAgcHVua3RlOiBwdW5rdGUsCiAgICAgICAga2F0ZWdvcmllbjogW10sIHNlcmllbjogW10sCiAg +ICAgICAgYWNoc2VYOiBteC5sYWJlbCwgYWNoc2VZOiBteS5sYWJlbAogICAgfTsKfQo= ### FILE: js/sync.js | 19474 Ly8gPT09IHN5bmMuanMgPT09Ci8vIExpdmUtU3luYy1DbGllbnQgKyBaZWxsLUxvY2stTWFuYWdl bWVudCBpbiBlaW5lbSBNb2R1bC4KLy8KLy8gTGl2ZS1TeW5jOiBXZWItV29ya2VyLWJhc2llcnRl @@ -6676,7 +6700,7 @@ U2VydmVyIG1hbnVlbGwgc3RhcnRlbi4iIC1Gb3JlZ3JvdW5kQ29sb3IgWWVsbG93Cn0KCldyaXRl LUhvc3QgIiIKV3JpdGUtSG9zdCAiPT09IFJvbGxiYWNrIGFiZ2VzY2hsb3NzZW4gPT09IiAtRm9y ZWdyb3VuZENvbG9yIEdyZWVuCldyaXRlLUhvc3QgIiAgICBXaWVkZXJoZXJnZXN0ZWxsdDogJCgk Y2hvc2VuLk5hbWUpIiAtRm9yZWdyb3VuZENvbG9yIEN5YW4K -### FILE: server.ps1 | 251041 +### FILE: server.ps1 | 251867 IyBTdGFuZDogMjAyNi0wNS0xNA0KcGFyYW0oDQogICAgW2ludF0kUG9ydCA9IDgwODAsDQogICAg W3N0cmluZ10kUm9vdFBhdGggPSAnJywNCiAgICAjIE9wdGlvbmFsZXMgendlaXRlcyBSb290IGZ1 ZXIgZ2VtZWluc2FtZSBEYXRlbiAoYWRtaW4uanNvbiBldGMuKS4gV2Vubg0KICAgICMgZ2VzZXR6 @@ -8447,2641 +8471,2655 @@ aWdodCA9PT09PQ0KICAgICAgICAgICAgaWYgKCRNZXRob2QgLWVxICdPUFRJT05TJykgew0KICAg ICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0dXNDb2RlID0gMjA0DQogICAgICAgICAgICAgICAg QWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2Uu T3V0cHV0U3RyZWFtLkNsb3NlKCkNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFNZU1RFTSA9PT09PQ0KICAgICAgICAgICAgaWYg -KCRQYXRoIC1lcSAnL2FwaS9oZWFydGJlYXQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQog -ICAgICAgICAgICAgICAgIyBPcmlnaW4tQ2hlY2sgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1O -b3RicmVtc2UgMjAyNi0wNS0yOCk6DQogICAgICAgICAgICAgICAgIyBIZWFydGJlYXQgYWt6ZXB0 -aWVydCBudXIgUmVxdWVzdHMgdm9uIGRlciBlaWdlbmVuIEFwcC4gQW5kZXJlDQogICAgICAgICAg -ICAgICAgIyBsb2thbGUgUHJvemVzc2Uga29lbm50ZW4gc29uc3QgcGVyIExvb3AgZGllIEF1dG8t -U2h1dGRvd24tTG9naWsNCiAgICAgICAgICAgICAgICAjIHVtZ2VoZW4gb2RlciBkZW4gU2VydmVy -IGJld3Vzc3QgYW0gTGViZW4gaGFsdGVuLiBCcm93c2VyIHNlbmRldA0KICAgICAgICAgICAgICAg -ICMgT3JpZ2luIGF1dG9tYXRpc2NoOyBmZWhsZW5kZXIgSGVhZGVyIHdpcmQgdG9sZXJpZXJlbiAo -c2VuZEJlYWNvbg0KICAgICAgICAgICAgICAgICMgaW4gbWFuY2hlbiBCcm93c2VybiksIGFiZXIg -RkFMU0NIRVIgT3JpZ2luIHdpcmQgYWJnZWxlaG50Lg0KICAgICAgICAgICAgICAgICRvcmlnaW4g -PSAkUmVxdWVzdC5IZWFkZXJzWydPcmlnaW4nXQ0KICAgICAgICAgICAgICAgIGlmICgkb3JpZ2lu -IC1hbmQgJG9yaWdpbiAtbmUgJHNjcmlwdDpDb3JzT3JpZ2luKSB7DQogICAgICAgICAgICAgICAg -ICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdPcmlnaW4gbmljaHQgZXJsYXVidCcgNDAzDQogICAg -ICAgICAgICAgICAgICAgIExvZy1BcGkgKCdIRUFSVEJFQVQgNDAzIE9yaWdpbj17MH0nIC1mICRv -cmlnaW4pDQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICRzY3JpcHQ6TGFzdEhlYXJ0YmVhdCA9IEdldC1EYXRlDQogICAgICAg -ICAgICAgICAgJHNjcmlwdDpTaHV0ZG93blBlbmRpbmcgPSAkZmFsc2UNCiAgICAgICAgICAgICAg -ICAjIGFkbWluVmVyc2lvbiAvIHBsYW51bmdWZXJzaW9uOiBtdGltZSBhbHMgVGlja3MuIEVybGF1 -YnQgZGVtDQogICAgICAgICAgICAgICAgIyBDbGllbnQsIFJlY2h0ZS0gYnp3LiBQZXJzb25lbi1B -ZW5kZXJ1bmdlbiBpbSBIaW50ZXJncnVuZCB6dQ0KICAgICAgICAgICAgICAgICMgZXJrZW5uZW4g -dW5kIFoucmVjaHRlL1oucGxhbnVuZyBuZXUgenUgbGFkZW4sIG9obmUgZGFzcyBkZXINCiAgICAg -ICAgICAgICAgICAjIFVzZXIgRjUgZHJ1ZWNrZW4gbXVzcy4gcGxhbnVuZ1ZlcnNpb24gZGVja3Qg -aW5zYmVzb25kZXJlDQogICAgICAgICAgICAgICAgIyBlZGl0UmVjaHRlL3NlaGVuLVVwZGF0ZXMg -YWIsIGRpZSBkZXIgTGl2ZS1TeW5jLURlbHRhIG5pY2h0DQogICAgICAgICAgICAgICAgIyBsaWVm -ZXJ0IChDaGVycnktUGljayAxYWVmZTI2IEJ1ZyAjMykuDQogICAgICAgICAgICAgICAgJGFkbWlu -VmVyICAgPSAwDQogICAgICAgICAgICAgICAgJHBsYW51bmdWZXIgPSAwDQogICAgICAgICAgICAg -ICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGFkbWluRmlsZSA9IEpvaW4tUGF0aCAkRGF0 -YURpciAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0 -ZXJhbFBhdGggJGFkbWluRmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluVmVy -ID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkYWRtaW5GaWxlKS5MYXN0V3JpdGVUaW1lVXRjLlRp -Y2tzDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHBsYW51bmdG -aWxlID0gSm9pbi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAg -ICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRwbGFudW5nRmlsZSkgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgJHBsYW51bmdWZXIgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRwbGFu -dW5nRmlsZSkuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcw0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVj -dCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29rJzsgYWRtaW5WZXJzaW9uID0gJGFkbWluVmVyOyBw -bGFudW5nVmVyc2lvbiA9ICRwbGFudW5nVmVyIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zaHV0ZG93bicg -LWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl -Y3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdzaHV0ZG93bicgfQ0KICAgICAgICAgICAgICAgIFN0 -YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMzAwDQogICAgICAgICAgICAgICAgJExpc3RlbmVyLlN0 -b3AoKQ0KICAgICAgICAgICAgICAgIFtFbnZpcm9ubWVudF06OkV4aXQoMCkNCiAgICAgICAgICAg -IH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaW5mbycgLWFuZCAkTWV0aG9kIC1l -cSAnR0VUJykgew0KICAgICAgICAgICAgICAgIFJlZnJlc2gtVXBkYXRlQ2hlY2sNCiAgICAgICAg -ICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICAkaW5mb09iaiA9IEB7DQog -ICAgICAgICAgICAgICAgICAgIGJlbnV0emVyICAgICAgICAgICAgICAgID0gIiREb21haW5cJFVz -ZXJuYW1lIg0KICAgICAgICAgICAgICAgICAgICByb2xsZSAgICAgICAgICAgICAgICAgICA9ICRy -LnJvbGxlDQogICAgICAgICAgICAgICAgICAgIGlzdFN1cGVyVXNlciAgICAgICAgICAgID0gJHIu -aXN0U3VwZXJVc2VyDQogICAgICAgICAgICAgICAgICAgIGlzdEZhY2hhdWZzaWNodCAgICAgICAg -ID0gJHIuaXN0RmFjaGF1ZnNpY2h0DQogICAgICAgICAgICAgICAgICAgIGlzdEdlc2FtdHZlcmFu -dHdvcnRsaWNoID0gJHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gNCiAgICAgICAgICAgICAgICAg -ICAgc2VoZW4gICAgICAgICAgICAgICAgICAgPSAkci5zZWhlbg0KICAgICAgICAgICAgICAgICAg -ICBhZG1pblN1YnRhYnMgICAgICAgICAgICA9ICRyLmFkbWluU3VidGFicw0KICAgICAgICAgICAg -ICAgICAgICBzdGF0aXN0aWtCZXJlaWNoZSAgICAgICA9ICRyLnN0YXRpc3Rpa0JlcmVpY2hlDQog -ICAgICAgICAgICAgICAgICAgIGVkaXRpZXJlbiAgICAgICAgICAgICAgID0gJHIuZWRpdGllcmVu -ICAgIyBudWxsIGJlaSBTdXBlclVzZXIgPSAiYWxsZXMgZXJsYXVidCINCiAgICAgICAgICAgICAg -ICAgICAgbWVpbmVQZXJzb25JZCAgICAgICAgICAgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAg -ICAgICAgICAgICAgIHNlcnZlciAgICAgICAgICAgICAgICAgID0gJHNjcmlwdDpDb3JzT3JpZ2lu -DQogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF2YWlsYWJsZSAgICAgICAgID0gJHNjcmlwdDpV -cGRhdGVBdmFpbGFibGUNCiAgICAgICAgICAgICAgICAgICAgcmVtb3RlVmVyc2lvbiAgICAgICAg -ICAgPSAkc2NyaXB0OlJlbW90ZVZlcnNpb24NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkaW5mb09iag0KICAgICAgICAgICAgICAg -IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09 -PT09PSBVUERBVEU6IFNUQVRVUyAobnVyIFN1cGVyVXNlcikgPT09PT09PT09PT09PT09PT09PT09 -DQogICAgICAgICAgICAjIEJlaGVidCBkZW4gNDA0IGF1ZiAvYXBpL3VwZGF0ZS9zdGF0dXMuIExp -ZXN0IFZlcnNpb24gKyBDaGFuZ2Vsb2cNCiAgICAgICAgICAgICMgdWViZXIgZGVuIChqZXR6dCBw -cm94eS1hdXRoZW50aWZpemllcnRlbikgRGlzdC1SZXBvLVp1Z2FuZy4NCiAgICAgICAgICAgIGlm -ICgkUGF0aCAtZXEgJy9hcGkvdXBkYXRlL3N0YXR1cycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykg -ew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1F -cnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAkc2NyaXB0OlVwZGF0ZUxhc3RDaGVja1V0YyA9IFtkYXRldGltZV06Ok1pblZhbHVl -ICAjIEZvcmNlLVJlZnJlc2gNCiAgICAgICAgICAgICAgICBSZWZyZXNoLVVwZGF0ZUNoZWNrDQog -ICAgICAgICAgICAgICAgJGx2ID0gR2V0LUxva2FsZVZlcnNpb24NCiAgICAgICAgICAgICAgICBT -ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF2 -YWlsYWJsZSA9ICRzY3JpcHQ6VXBkYXRlQXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAgIGxv -Y2FsVmVyc2lvbiAgICA9ICRsdg0KICAgICAgICAgICAgICAgICAgICByZW1vdGVWZXJzaW9uICAg -PSAkc2NyaXB0OlJlbW90ZVZlcnNpb24NCiAgICAgICAgICAgICAgICAgICAgY2hhbmdlbG9nICAg -ICAgID0gKEdldC1VcGRhdGVDaGFuZ2Vsb2cgJGx2ICRzY3JpcHQ6UmVtb3RlVmVyc2lvbikNCiAg -ICAgICAgICAgICAgICAgICAgbWFpbnRlbmFuY2UgICAgID0gQHsgbG9ja2VkID0gJGZhbHNlOyBy -ZWFzb24gPSAnJyB9DQogICAgICAgICAgICAgICAgICAgIGpvYiAgICAgICAgICAgICA9IEB7DQog -ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICRzY3JpcHQ6VXBkYXRlSm9iLnN0YXRlOyBw -ZXJjZW50ID0gJHNjcmlwdDpVcGRhdGVKb2IucGVyY2VudA0KICAgICAgICAgICAgICAgICAgICAg -ICAgc3RlcCA9ICRzY3JpcHQ6VXBkYXRlSm9iLnN0ZXA7IG1lc3NhZ2UgPSAkc2NyaXB0OlVwZGF0 -ZUpvYi5tZXNzYWdlDQogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICRzY3JpcHQ6VXBk -YXRlSm9iLmVycm9yOyBmcm9tVmVyc2lvbiA9ICRzY3JpcHQ6VXBkYXRlSm9iLmZyb21WZXJzaW9u -DQogICAgICAgICAgICAgICAgICAgICAgICB0b1ZlcnNpb24gPSAkc2NyaXB0OlVwZGF0ZUpvYi50 -b1ZlcnNpb24NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyA9PT09PT09 -PT09PT09PT09PT09PT0gVVBEQVRFOiBQUk9HUkVTUyAobnVyIFN1cGVyVXNlcikgPT09PT09PT09 -PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3VwZGF0ZS9wcm9n -cmVzcycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90 -IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVz -ZXIuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl -c3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJHNjcmlwdDpVcGRhdGVKb2Iu -c3RhdGU7IHBlcmNlbnQgPSAkc2NyaXB0OlVwZGF0ZUpvYi5wZXJjZW50DQogICAgICAgICAgICAg -ICAgICAgIHN0ZXAgPSAkc2NyaXB0OlVwZGF0ZUpvYi5zdGVwOyBtZXNzYWdlID0gJHNjcmlwdDpV -cGRhdGVKb2IubWVzc2FnZQ0KICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICRzY3JpcHQ6VXBk -YXRlSm9iLmVycm9yOyBmcm9tVmVyc2lvbiA9ICRzY3JpcHQ6VXBkYXRlSm9iLmZyb21WZXJzaW9u -DQogICAgICAgICAgICAgICAgICAgIHRvVmVyc2lvbiA9ICRzY3JpcHQ6VXBkYXRlSm9iLnRvVmVy -c2lvbjsgc2VsZnRlc3QgPSBAKCRzY3JpcHQ6VXBkYXRlSm9iLnNlbGZ0ZXN0KQ0KICAgICAgICAg -ICAgICAgICAgICBsb2cgPSBAKCRzY3JpcHQ6VXBkYXRlSm9iLmxvZyB8IFNlbGVjdC1PYmplY3Qg -LUxhc3QgNjApDQogICAgICAgICAgICAgICAgICAgIG1haW50ZW5hbmNlID0gQHsgbG9ja2VkID0g -JGZhbHNlOyByZWFzb24gPSAnJyB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09 -PT09PSBVUERBVEU6IFNUQVJUIChudXIgU3VwZXJVc2VyKSA9PT09PT09PT09PT09PT09PT09PT0N -CiAgICAgICAgICAgICMgSHlicmlkOiBzdGFydGV0IGRpZSBnZXRlc3RldGUsIHNoYXJlLXppZWxl -bmRlIHVwZGF0ZS5iYXQgYWxzIGVpZ2VuZW4NCiAgICAgICAgICAgICMgUHJvemVzcyBhdXMgZGVy -IEtBTk9OSVNDSEVOIFF1ZWxsZS4gdXBkYXRlLmJhdCBzdG9wcHQrc3RhcnRldCBkZW4NCiAgICAg -ICAgICAgICMgU2VydmVyIHNlbGJzdCAoc3RvcC5iYXQvZGdsLmJhdCkuIFdpciBrb2VubmVuIGRl -biBleHRlcm5lbiBMYXVmIG5pY2h0DQogICAgICAgICAgICAjIGluIEVjaHR6ZWl0IHZlcmZvbGdl -biAtPiBKb2IgbWVsZGV0ICdleHRlcm4gZ2VzdGFydGV0JywgZGVyIENsaWVudA0KICAgICAgICAg -ICAgIyB6ZWlndCBkZW4gSGlud2VpcyB1bmQgbGFlZHQgbmFjaCBkZW0gTmV1c3RhcnQgbmV1Lg0K -ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS91cGRhdGUvc3RhcnQnIC1hbmQgJE1ldGhv -ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJV -c2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkYXJmIFVwZGF0ZXMg -c3RhcnRlbi4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRxdWVsbGUgPSBHZXQt -VXBkYXRlUXVlbGxlDQogICAgICAgICAgICAgICAgJGJhdCA9IEpvaW4tUGF0aCAkcXVlbGxlICd1 -cGRhdGUuYmF0Jw0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQ -YXRoICRiYXQpKSB7DQogICAgICAgICAgICAgICAgICAgICRtc2cgPSAndXBkYXRlLmJhdCBuaWNo -dCBnZWZ1bmRlbiAoUXVlbGxlOiAnICsgJHF1ZWxsZSArICcpLiBVcGRhdGUgYml0dGUgdWViZXIg -dXBkYXRlLmJhdCBpbiBkZXIgUG9ydGFsLVd1cnplbCBhdXNmdWVocmVuLicNCiAgICAgICAgICAg -ICAgICAgICAgJHNjcmlwdDpVcGRhdGVKb2Iuc3RhdGUgICA9ICdmYWlsZWQnDQogICAgICAgICAg -ICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnN0ZXAgICAgPSAnZmFpbGVkJw0KICAgICAgICAg -ICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5lcnJvciAgID0gJG1zZw0KICAgICAgICAgICAg -ICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5tZXNzYWdlID0gJG1zZw0KICAgICAgICAgICAgICAg -ICAgICBMb2ctQXBpICgnVVBEQVRFLVNUQVJUIEZFSExFUjogJyArICRtc2cpDQogICAgICAgICAg -ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICRtc2cgNTAwDQogICAgICAgICAgICAgICAg -ICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRyeSB7DQog -ICAgICAgICAgICAgICAgICAgICR0cyA9IChHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkVEhI -Om1tOnNzJykNCiAgICAgICAgICAgICAgICAgICAgIyBzdGRpbiBhdXMgbnVsIChlaW4gQXJndW1l -bnRMaXN0LVN0cmluZywgdm9uIFN0YXJ0LVByb2Nlc3MNCiAgICAgICAgICAgICAgICAgICAgIyB2 -ZXJiYXRpbSBhbiBjbWQpIC0+IGRhcyBhYnNjaGxpZXNzZW5kZSAncGF1c2UnIGluIHVwZGF0ZS5i -YXQNCiAgICAgICAgICAgICAgICAgICAgIyBsaWVzdCBFT0YgdW5kIGtlaHJ0IHNvZm9ydCB6dXJ1 -ZWNrLCBrZWluIGhhZW5nZW5kZXIgUHJvemVzcy4NCiAgICAgICAgICAgICAgICAgICAgU3RhcnQt -UHJvY2VzcyAtRmlsZVBhdGggJ2NtZC5leGUnIC1Bcmd1bWVudExpc3QgKCcvYyAiJyArICRiYXQg -KyAnIiA8bnVsJykgYA0KICAgICAgICAgICAgICAgICAgICAgICAgLVdvcmtpbmdEaXJlY3Rvcnkg -JHF1ZWxsZSAtV2luZG93U3R5bGUgSGlkZGVuDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6 -VXBkYXRlSm9iLnN0YXRlICAgICAgID0gJ3J1bm5pbmcnDQogICAgICAgICAgICAgICAgICAgICRz -Y3JpcHQ6VXBkYXRlSm9iLnN0ZXAgICAgICAgID0gJ2V4dGVybicNCiAgICAgICAgICAgICAgICAg -ICAgJHNjcmlwdDpVcGRhdGVKb2IucGVyY2VudCAgICAgPSA1DQogICAgICAgICAgICAgICAgICAg -ICRzY3JpcHQ6VXBkYXRlSm9iLmVycm9yICAgICAgID0gJycNCiAgICAgICAgICAgICAgICAgICAg -JHNjcmlwdDpVcGRhdGVKb2IuZnJvbVZlcnNpb24gPSAoR2V0LUxva2FsZVZlcnNpb24pDQogICAg -ICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnRvVmVyc2lvbiAgID0gJHNjcmlwdDpS -ZW1vdGVWZXJzaW9uDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnNlbGZ0 -ZXN0ICAgID0gQCgpDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLm1lc3Nh -Z2UgICAgID0gJ0V4dGVybmVyIFVwZGF0ZXIgKHVwZGF0ZS5iYXQpIGdlc3RhcnRldC4gRGVyIFNl -cnZlciB3aXJkIGdsZWljaCBnZXN0b3BwdCB1bmQgbmV1IGdlc3RhcnRldCAtIGJpdHRlIGRhbmFj -aCBkaWUgU2VpdGUgbmV1IGxhZGVuLicNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRh -dGVKb2IubG9nICAgICAgICAgPSBAKEB7IHQgPSAkdHM7IG1zZyA9ICd1cGRhdGUuYmF0IGF1cyAn -ICsgJHF1ZWxsZSArICcgZ2VzdGFydGV0LicgfSkNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFw -aSAoJ1VQREFURS1TVEFSVDogdXBkYXRlLmJhdCBhdXMgezB9IGdlc3RhcnRldCAoU3VwZXJVc2Vy -KS4nIC1mICRxdWVsbGUpDQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVz -cG9uc2UgQHsgc3RhcnRlZCA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAg -ICAgICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRhdGVKb2Iuc3RhdGUgPSAnZmFpbGVkJw0KICAg -ICAgICAgICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5lcnJvciA9ICRfLkV4Y2VwdGlvbi5N -ZXNzYWdlDQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdVUERBVEUtU1RBUlQgRkVITEVS -OiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgICAgICAgICAgICAgICAgICBTZW5k -LUVycm9yICRSZXNwb25zZSAoJ1VwZGF0ZS1TdGFydCBmZWhsZ2VzY2hsYWdlbjogJyArICRfLkV4 -Y2VwdGlvbi5NZXNzYWdlKSA1MDANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -Y29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -ZGVidWcnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkZGF0ID0g -QHsgUm9vdCA9ICRSb290OyBEYXRhRGlyID0gJERhdGFEaXI7IEZpbGVzID0gQHt9IH0NCiAgICAg -ICAgICAgICAgICBmb3JlYWNoICgkZiBpbiAnYWRtaW4uanNvbicsJ3BsYW51bmcuanNvbicsJ2xv -Z2J1Y2guanNvbicpIHsNCiAgICAgICAgICAgICAgICAgICAgJGZwID0gSm9pbi1QYXRoICREYXRh -RGlyICRmDQogICAgICAgICAgICAgICAgICAgICRpbmZvID0gQHsgZXhpc3RzID0gKFRlc3QtUGF0 -aCAtTGl0ZXJhbFBhdGggJGZwKSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkaW5mby5leGlz -dHMpIHsgJGluZm8uc2l6ZSA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZwKS5MZW5ndGggfQ0K -ICAgICAgICAgICAgICAgICAgICAkZGF0LkZpbGVzWyRmXSA9ICRpbmZvDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICMgUmVjaHRlLUluZm8gKHdpY2h0aWcgZnVlciBBZG1pbi1U -YWItU2ljaHRiYXJrZWl0KQ0KICAgICAgICAgICAgICAgICRkYXQuQmVudXR6ZXIgPSAiJERvbWFp -blwkVXNlcm5hbWUiDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg -JHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgICAgICRkYXQuUmVjaHRlID0gQHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgIHJvbGxlICAgICAgICAgICA9ICRyLnJvbGxlDQogICAgICAg -ICAgICAgICAgICAgICAgICBpc3RTdXBlclVzZXIgICAgPSAkci5pc3RTdXBlclVzZXINCiAgICAg -ICAgICAgICAgICAgICAgICAgIGlzdEZhY2hhdWZzaWNodCA9ICRyLmlzdEZhY2hhdWZzaWNodA0K -ICAgICAgICAgICAgICAgICAgICAgICAgc2VoZW4gICAgICAgICAgID0gJHIuc2VoZW4NCiAgICAg -ICAgICAgICAgICAgICAgICAgIG1laW5lUGVyc29uSWQgICA9ICRyLm1laW5lUGVyc29uSWQNCiAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAg -ICAgICAgICAgICAkZGF0LlJlY2h0ZSA9IEB7IGZlaGxlciA9ICRfLkV4Y2VwdGlvbi5NZXNzYWdl -IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBBZG1pbi5qc29uIEt1cnpj -aGVjaw0KICAgICAgICAgICAgICAgICRhZG1pbk9iaiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4u -anNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbk9iaikgew0KICAgICAg -ICAgICAgICAgICAgICAkZGF0LkFkbWluSnNvbkxlc2JhciA9ICRmYWxzZQ0KICAgICAgICAgICAg -ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRhbnpTVSA9IDANCiAgICAgICAgICAg -ICAgICAgICAgaWYgKCRhZG1pbk9iai5zdXBlclVzZXIpIHsgJGFuelNVID0gQCgkYWRtaW5PYmou -c3VwZXJVc2VyKS5Db3VudCB9DQogICAgICAgICAgICAgICAgICAgICRzdUtlbm51bmdlbiA9IEAo -KQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluT2JqLnN1cGVyVXNlcikgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHMgaW4gQCgkYWRtaW5PYmouc3VwZXJVc2VyKSkg -eyAkc3VLZW5udW5nZW4gKz0gW3N0cmluZ10kcy5ud0tlbm51bmcgfQ0KICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgICAgICRkYXQuQWRtaW5Kc29uTGVzYmFyID0gJHRydWUN -CiAgICAgICAgICAgICAgICAgICAgJGRhdC5TdXBlclVzZXJBbnphaGwgPSAkYW56U1UNCiAgICAg -ICAgICAgICAgICAgICAgJGRhdC5TdXBlclVzZXJLZW5udW5nZW4gPSAkc3VLZW5udW5nZW4NCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z -ZSAkZGF0DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAg -ICAgICAgIyA9PT09PSBTWU5DLUNIRUNLID09PT09DQogICAgICAgICAgICAjIFZlcmdsZWljaHQg -cHJvIFdlYi1Bc3NldCBkaWUgRGF0ZWktR3JvZXNzZSBpbiBkZXIgU291cmNlIChnZXB1bGx0ZXMN -CiAgICAgICAgICAgICMgUmVwbywgJHNjcmlwdDpBc3NldEZhbGxiYWNrKSBnZWdlbiBkaWUgRGF0 -ZWktR3JvZXNzZSBpbSBBc3NldC1DYWNoZQ0KICAgICAgICAgICAgIyAoJFJvb3QsIFJvYm9jb3B5 -LVppZWwpLiBFcmtlbm50IHVudm9sbHN0YWVuZGlnZSBSb2JvY29weS1VZWJlci0NCiAgICAgICAg -ICAgICMgdHJhZ3VuZ2VuLCB2ZXJhbHRldGUgQXNzZXQtQ2FjaGVzIHVuZCBmZWhsZW5kZSBEYXRl -aWVuLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zeW5jLWNoZWNrL2RhdGVpZW4n -IC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz -dC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScg -NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNjcmlwdDpBc3NldEZh -bGxiYWNrKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug -QHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gJGZhbHNlDQogICAgICAgICAgICAgICAg -ICAgICAgICBmZWhsZXIgPSAnQXNzZXRGYWxsYmFjayBuaWNodCBrb25maWd1cmllcnQg4oCUIFNv -dXJjZS1QZmFkIHVuYmVrYW5udCwgVmVyZ2xlaWNoIG5pY2h0IG1vZWdsaWNoLiAoU2VydmVyIHd1 -cmRlIG9obmUgLUFzc2V0RmFsbGJhY2sgZ2VzdGFydGV0LiknDQogICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgJHdlYkV4dCA9ICcuanMnLCcuY3NzJywnLmh0bWwnLCcuaWNvJywnLnBuZycs -Jy5qcGcnLCcuanBlZycsJy5zdmcnDQogICAgICAgICAgICAgICAgJGlnbm9yaWVyZVRvcCA9IEAo -Jy5naXQnLCdkb2NzJywnZGV2JywndGVzdHMnLCdkYXRhJywnY2FjaGUnKQ0KICAgICAgICAgICAg -ICAgICRkYXRlaWVuID0gQCgpDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAg -ICAgICAgJGFsbGUgPSBHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0OkFzc2V0RmFs -bGJhY2sgLVJlY3Vyc2UgLUZpbGUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUNCiAgICAg -ICAgICAgICAgICAgICAgZm9yZWFjaCAoJGYgaW4gJGFsbGUpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICRyZWwgPSAkZi5GdWxsTmFtZS5TdWJzdHJpbmcoJHNjcmlwdDpBc3NldEZhbGxiYWNr -Lkxlbmd0aCArIDEpIC1yZXBsYWNlICdcXCcsICcvJw0KICAgICAgICAgICAgICAgICAgICAgICAg -JHRvcCA9ICgkcmVsIC1zcGxpdCAnLycpWzBdDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JGlnbm9yaWVyZVRvcCAtY29udGFpbnMgJHRvcCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAkZXh0ID0gJGYuRXh0ZW5zaW9uLlRvTG93ZXIoKQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCR3ZWJFeHQgLW5vdGNvbnRhaW5zICRleHQpIHsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgJGRhdGVpZW4gKz0gJHJlbA0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgICMgZGF0YS8tU29uZGVyZmFlbGxlOiBudXIgZGllIHp3 -ZWkgVGFybi1NYXJrdXBzLCBhbGxlcyBhbmRlcmUNCiAgICAgICAgICAgICAgICAgICAgIyBsaWVn -dCBpbSBEYXRhRGlyIChhZG1pbi5qc29uL3BsYW51bmcuanNvbi8uLi4pIHVuZCB3aXJkIG5pY2h0 -DQogICAgICAgICAgICAgICAgICAgICMgaW4gZGVuIEFzc2V0LUNhY2hlIGtvcGllcnQuDQogICAg -ICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRleHRyYSBpbiAnZGF0YS9tYWluZnJhbWUuaHRtbCcs -J2RhdGEvc2FuaXRpemVyLmh0bWwnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3JjRXh0 -cmEgPSBKb2luLVBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNrICRleHRyYQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNyY0V4dHJhKSB7ICRkYXRl -aWVuICs9ICRleHRyYSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 -IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA -eyBvayA9ICRmYWxzZTsgZmVobGVyID0gKCdTb3VyY2UtVmVyemVpY2huaXMgbmljaHQgbGVzYmFy -OiAnICsgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGlu -dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGRhdGVpZW4gPSAkZGF0ZWll -biB8IFNvcnQtT2JqZWN0IC1VbmlxdWUNCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgp -DQogICAgICAgICAgICAgICAgJGFuek9rID0gMDsgJGFuekRpZmYgPSAwOyAkYW56RmVobHRBc3Nl -dCA9IDA7ICRhbnpGZWhsdFNvdXJjZSA9IDANCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcmVs -IGluICRkYXRlaWVuKSB7DQogICAgICAgICAgICAgICAgICAgICRhc3NldFBmYWQgID0gSm9pbi1Q -YXRoICRSb290ICRyZWwNCiAgICAgICAgICAgICAgICAgICAgJHNvdXJjZVBmYWQgPSBKb2luLVBh -dGggJHNjcmlwdDpBc3NldEZhbGxiYWNrICRyZWwNCiAgICAgICAgICAgICAgICAgICAgJGFzc2V0 -Qnl0ZXMgID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgJHNvdXJjZUJ5dGVzID0gJG51bGwN -CiAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGFzc2V0UGZh -ZCkgIHsgJGFzc2V0Qnl0ZXMgID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkYXNzZXRQZmFkKS5M -ZW5ndGggfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAk -c291cmNlUGZhZCkgeyAkc291cmNlQnl0ZXMgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRzb3Vy -Y2VQZmFkKS5MZW5ndGggfQ0KICAgICAgICAgICAgICAgICAgICAkc3RhdHVzID0gJ3VuYmVrYW5u -dCcNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkc291cmNlQnl0ZXMgLWFuZCAk -bnVsbCAtZXEgJGFzc2V0Qnl0ZXMpIHsgJHN0YXR1cyA9ICdiZWlkZV9mZWhsZW4nIH0NCiAgICAg -ICAgICAgICAgICAgICAgZWxzZWlmICgkbnVsbCAtZXEgJGFzc2V0Qnl0ZXMpICB7ICRzdGF0dXMg -PSAnYXNzZXRfZmVobHQnOyAgJGFuekZlaGx0QXNzZXQrKyB9DQogICAgICAgICAgICAgICAgICAg -IGVsc2VpZiAoJG51bGwgLWVxICRzb3VyY2VCeXRlcykgeyAkc3RhdHVzID0gJ3NvdXJjZV9mZWhs -dCc7ICRhbnpGZWhsdFNvdXJjZSsrIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkYXNz -ZXRCeXRlcyAtZXEgJHNvdXJjZUJ5dGVzKSB7ICRzdGF0dXMgPSAnb2snOyAkYW56T2srKyB9DQog -ICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkc3RhdHVzID0gJ2dyb2Vzc2VfZGlmZic7ICRhbnpE -aWZmKysgfQ0KICAgICAgICAgICAgICAgICAgICAkZWludHJhZWdlICs9IFtvcmRlcmVkXUB7DQog -ICAgICAgICAgICAgICAgICAgICAgICBwZmFkICAgICAgICA9ICRyZWwNCiAgICAgICAgICAgICAg -ICAgICAgICAgIHNvdXJjZUJ5dGVzID0gJHNvdXJjZUJ5dGVzDQogICAgICAgICAgICAgICAgICAg -ICAgICBhc3NldEJ5dGVzICA9ICRhc3NldEJ5dGVzDQogICAgICAgICAgICAgICAgICAgICAgICBk -aWZmQnl0ZXMgICA9IGlmICgkbnVsbCAtbmUgJHNvdXJjZUJ5dGVzIC1hbmQgJG51bGwgLW5lICRh -c3NldEJ5dGVzKSB7ICRhc3NldEJ5dGVzIC0gJHNvdXJjZUJ5dGVzIH0gZWxzZSB7ICRudWxsIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgID0gJHN0YXR1cw0KICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv -bk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgb2sgICAgICAgICAgPSAk -dHJ1ZQ0KICAgICAgICAgICAgICAgICAgICBzb3VyY2VSb290ICA9ICRzY3JpcHQ6QXNzZXRGYWxs -YmFjaw0KICAgICAgICAgICAgICAgICAgICBhc3NldFJvb3QgICA9ICRSb290DQogICAgICAgICAg -ICAgICAgICAgIGFuemFobCAgICAgID0gJGVpbnRyYWVnZS5Db3VudA0KICAgICAgICAgICAgICAg -ICAgICBhbnpPayAgICAgICA9ICRhbnpPaw0KICAgICAgICAgICAgICAgICAgICBhbnpEaWZmICAg -ICA9ICRhbnpEaWZmDQogICAgICAgICAgICAgICAgICAgIGFuekZlaGx0QXNzZXQgID0gJGFuekZl -aGx0QXNzZXQNCiAgICAgICAgICAgICAgICAgICAgYW56RmVobHRTb3VyY2UgPSAkYW56RmVobHRT -b3VyY2UNCiAgICAgICAgICAgICAgICAgICAgZGF0ZWllbiAgICAgPSAkZWludHJhZWdlDQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN -CiAgICAgICAgICAgICMgPT09PT0gQURNSU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAt -ZXEgJy9hcGkvYWRtaW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAg -ICAkdHh0ID0gUmVhZC1UZXh0RmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAo -JG51bGwgLWVxICR0eHQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ2FkbWluLmpzb24gbmljaHQg -Z2VmdW5kZW4nIDQwNCB9DQogICAgICAgICAgICAgICAgZWxzZSB7IFNlbmQtSnNvblRleHQgJFJl -c3BvbnNlICR0eHQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQog -ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluJyAtYW5kICRNZXRob2QgLWVxICdQ -VVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2FkbWlu -aXN0cmF0aW9uJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScg -NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl -c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRh -dGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgaWYgKCRkYXRl -bi5QU09iamVjdC5Qcm9wZXJ0aWVzWydhZG1pbktlbm51bmdlbiddKSB7ICRkYXRlbi5QU09iamVj -dC5Qcm9wZXJ0aWVzLlJlbW92ZSgnYWRtaW5LZW5udW5nZW4nKSB9DQogICAgICAgICAgICAgICAg -IyBQUy01LjEtVW53cmFwLVNjaHV0ejogYWxsZSBMaXN0ZW4tRmVsZGVyLCBkaWUgZGVyIENsaWVu -dCB1bnRlcg0KICAgICAgICAgICAgICAgICMgQURNSU5fTElTVF9GRUxERVIgZnVlaHJ0LCBzZXJ2 -ZXItc2VpdGlnIGFscyBBcnJheXMgZXJ6d2luZ2VuLg0KICAgICAgICAgICAgICAgICMgU29uc3Qg -d2VyZGVuIExpc3RlbiBtaXQgbnVyIGVpbmVtIEVsZW1lbnQgdm9tIFBvd2VyU2hlbGwtSlNPTi0N -CiAgICAgICAgICAgICAgICAjIFJvdW5kdHJpcCB6dW0gRWluemVsLU9iamVrdCBlbnRwYWNrdCB1 -bmQgY2xpZW50LXNlaXRpZyBrb21tdA0KICAgICAgICAgICAgICAgICMgYWRtaW5MaXN0ZW5Ob3Jt -YWxpc2llcmVuIGdnZi4genUgc3BhZXQgKHouQi4gbmFjaCBIb3QtUmVsb2FkKS4NCiAgICAgICAg -ICAgICAgICBOb3JtYWxpc2llcmUtQWRtaW5MaXN0ZW4gJGRhdGVuDQogICAgICAgICAgICAgICAg -IyBTZXJ2ZXItc2VpdGlnZSBSaWNoLVRleHQtU2FuaXRpc2llcnVuZyAoU3RvcmVkLVhTUy1TY2h1 -dHopLg0KICAgICAgICAgICAgICAgIEludm9rZS1BZG1pblJpY2h0ZXh0U2FuaXRpemUgJGRhdGVu -DQogICAgICAgICAgICAgICAgJGlzdFNVID0gVGVzdC1Jc3RTdXBlclVzZXINCiAgICAgICAgICAg -ICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAg -ICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4u -anNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBOdXIgU3VwZXJVc2VyIGRhcmYgZGll -IFJvbGxlbi1MaXN0ZW4gc3VwZXJVc2VyL2ZhY2hhdWZzaWNodA0KICAgICAgICAgICAgICAgICAg -ICAgICAgIyB1ZWJlciAvYXBpL2FkbWluIGFlbmRlcm4g4oCUIHNvbnN0IGtvZW5udGUgamVtYW5k -IHNpY2ggc2VsYnN0DQogICAgICAgICAgICAgICAgICAgICAgICAjIHp1bSBTdXBlclVzZXIgYmVm -b2VyZGVybiB1bmQgZGFtaXQgZGllIHNlcGFyYXRlbiBHdWFyZHMgYXVmDQogICAgICAgICAgICAg -ICAgICAgICAgICAjIC9hcGkvYWRtaW4vc3VwZXJ1c2VyIGJ6dy4gL2FwaS9hZG1pbi9mYWNoYXVm -c2ljaHQgdW1nZWhlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgYWRtaW5LZW5udW5nZW4g -aXN0IGdlbmVyZWxsIGFiZ2VzY2hhZmZ0IHVuZCB3aXJkIGVudGZlcm50Lg0KICAgICAgICAgICAg -ICAgICAgICAgICAgIyBSZWFkIGRlciBhbHRlbiBXZXJ0ZSBtdXNzIElOTkVSSEFMQiBkZXMgTG9j -a3MgcGFzc2llcmVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBkYW1pdCBkaWUgU1UvRmFj -aGF1ZnNpY2h0LUxpc3RlbiBhdG9tYXIgZXJoYWx0ZW4gYmxlaWJlbi4NCiAgICAgICAgICAgICAg -ICAgICAgICAgICRhbHQgPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAkaXN0U1UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBmb3JlYWNoICgkZmVsZCBpbiAnc3VwZXJVc2VyJywnZmFjaGF1ZnNpY2h0JywnZGlyZWt0 -aW9uc2xlaXR1bmcnLCdmdWVocnVuZ3NzdGVsbGUnKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgkYWx0IC1hbmQgJGFsdC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVj -dC5Qcm9wZXJ0aWVzWyRmZWxkXSkgeyAkZGF0ZW4uJGZlbGQgPSAkYWx0LiRmZWxkIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkZGF0ZW4gfCBBZGQtTWVtYmVy -IC1Ob3RlUHJvcGVydHlOYW1lICRmZWxkIC1Ob3RlUHJvcGVydHlWYWx1ZSAkYWx0LiRmZWxkIC1G -b3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkZGF0ZW4u -UFNPYmplY3QuUHJvcGVydGllc1skZmVsZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkZmVsZCkNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMg -S2V5LVVuaW9uOiBuaWNodCBtaXRnZXNlbmRldGUgVG9wLUxldmVsLUtleXMgZXJoYWx0ZW4uDQog -ICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0oTWVyZ2UtQWRtaW5LZXlzICRhbHQgJGRhdGVu -KQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicg -JGRhdGVuIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9 -ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2gg -ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVy -OiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0Vy -Z2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2FkbWluLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAg -ICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0N -CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj -IFN1cGVyLVVzZXItTGlzdGU6IG51ciBTdXBlclVzZXIgZGFyZiBTdXBlclVzZXIgdmVyd2FsdGVu -DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3N1cGVydXNlcicgLWFuZCAk -TWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1 -cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBT -dXBlclVzZXIgdmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9k -eSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7 -IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0N -CiAgICAgICAgICAgICAgICAjIEAoLi4uKSBlcnp3aW5ndCBBcnJheSBhdWNoIGJlaSAxIEVsZW1l -bnQgKFBTIDUuMSBlbnRwYWNrdCBzb25zdCB6dSBFaW56ZWwtT2JqZWt0LA0KICAgICAgICAgICAg -ICAgICMgZGFubiB3aXJkIGRpZSBMaXN0ZSBpbiBhZG1pbi5qc29uIHp1bSBPYmpla3QgZGVnZW5l -cmllcnQgLT4gQ2xpZW50LUZlaGxlcikuDQogICAgICAgICAgICAgICAgJGJvZHlPYmogPSAkYm9k -eSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSBbb2JqZWN0W11d -QCgkYm9keU9iaikNCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAg -ICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52 -b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAg -JGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0 -dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNjaHV0eiAnc3VwZXJVc2VyJyAkZGF0 -ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA0MDk7IG1zZyA9ICR3 -aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRlIExpc3RlIHZvciBkZW0g -T3ZlcndyaXRlIHNuYXBzaG90dGVuIOKAlCB3aXIgYnJhdWNoZW4NCiAgICAgICAgICAgICAgICAg -ICAgICAgICMgc2llIG5hY2ggZGVtIExvY2sgZnVlciBkaWUgRGlmZi1CZXJlY2hudW5nIChtYWls -dG8gYmVpDQogICAgICAgICAgICAgICAgICAgICAgICAjIFNVIHJlaW4vcmF1cykuDQogICAgICAg -ICAgICAgICAgICAgICAgICAkYWx0U1UgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snc3VwZXJVc2VyJ10pIHsgJGFsdFNVID0gW29i -amVjdFtdXUAoJGFkbWluLnN1cGVyVXNlcikgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3Zv -aWRdKEJhY2t1cC1BZG1pbkpzb24gJ3N1cGVyVXNlcicpDQogICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N1cGVyVXNlciddKSB7ICRhZG1pbi5z -dXBlclVzZXIgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1p -biB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N1cGVyVXNlcicgLU5vdGVQcm9wZXJ0 -eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNv -bk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAg -ICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlOyBhbHQgPSAkYWx0U1UgfQ0KICAgICAgICAgICAg +ICAgfQ0KDQogICAgICAgICAgICAjID09PT09IENocm9taXVtIERldlRvb2xzLVByb2JlID09PT09 +DQogICAgICAgICAgICAjIENocm9taXVtLUJyb3dzZXIgZnJhZ2VuIGJlaW0gT2VmZm5lbiBkZXIg +RGV2VG9vbHMgYXV0b21hdGlzY2gNCiAgICAgICAgICAgICMgLy53ZWxsLWtub3duL2FwcHNwZWNp +ZmljL2NvbS5jaHJvbWUuZGV2dG9vbHMuanNvbiBhYi4gRGllIERhdGVpDQogICAgICAgICAgICAj +IGV4aXN0aWVydCBoaWVyIGJld3Vzc3QgbmljaHQg4oCUIGZydWVoZXIgZ2FiIGRhcyBlaW4gNDA0 +IChTdG9lci0NCiAgICAgICAgICAgICMgcmF1c2NoZW4gaW0gTG9nKS4gV2lyIGFudHdvcnRlbiBt +aXQgMjA0IE5vIENvbnRlbnQ7IGRpZSBSRVEtWmVpbGUNCiAgICAgICAgICAgICMgb2JlbiBibGVp +YnQgZXJoYWx0ZW4sIGRhcyBMb2cgd2lyZCBhbHNvIHdlaXRlciBnZXNjaHJpZWJlbi4NCiAgICAg +ICAgICAgIGlmICgkUGF0aCAtZXEgJy8ud2VsbC1rbm93bi9hcHBzcGVjaWZpYy9jb20uY2hyb21l +LmRldnRvb2xzLmpzb24nKSB7DQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLlN0YXR1c0NvZGUg +PSAyMDQNCiAgICAgICAgICAgICAgICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25zZQ0KICAg +ICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAg +ICAgIExvZy1BcGkgJ0RFVlRPT0xTIDIwNCAud2VsbC1rbm93bi9hcHBzcGVjaWZpYy9jb20uY2hy +b21lLmRldnRvb2xzLmpzb24gKENocm9taXVtLVByb2JlLCBrZWluIEZlaGxlciknDQogICAgICAg +ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBT +WVNURU0gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGVhcnRiZWF0JyAt +YW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICMgT3JpZ2luLUNoZWNr +IChTcHJpbnQgMSDigJQgU2ljaGVyaGVpdHMtTm90YnJlbXNlIDIwMjYtMDUtMjgpOg0KICAgICAg +ICAgICAgICAgICMgSGVhcnRiZWF0IGFremVwdGllcnQgbnVyIFJlcXVlc3RzIHZvbiBkZXIgZWln +ZW5lbiBBcHAuIEFuZGVyZQ0KICAgICAgICAgICAgICAgICMgbG9rYWxlIFByb3plc3NlIGtvZW5u +dGVuIHNvbnN0IHBlciBMb29wIGRpZSBBdXRvLVNodXRkb3duLUxvZ2lrDQogICAgICAgICAgICAg +ICAgIyB1bWdlaGVuIG9kZXIgZGVuIFNlcnZlciBiZXd1c3N0IGFtIExlYmVuIGhhbHRlbi4gQnJv +d3NlciBzZW5kZXQNCiAgICAgICAgICAgICAgICAjIE9yaWdpbiBhdXRvbWF0aXNjaDsgZmVobGVu +ZGVyIEhlYWRlciB3aXJkIHRvbGVyaWVyZW4gKHNlbmRCZWFjb24NCiAgICAgICAgICAgICAgICAj +IGluIG1hbmNoZW4gQnJvd3Nlcm4pLCBhYmVyIEZBTFNDSEVSIE9yaWdpbiB3aXJkIGFiZ2VsZWhu +dC4NCiAgICAgICAgICAgICAgICAkb3JpZ2luID0gJFJlcXVlc3QuSGVhZGVyc1snT3JpZ2luJ10N +CiAgICAgICAgICAgICAgICBpZiAoJG9yaWdpbiAtYW5kICRvcmlnaW4gLW5lICRzY3JpcHQ6Q29y +c09yaWdpbikgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnT3Jp +Z2luIG5pY2h0IGVybGF1YnQnIDQwMw0KICAgICAgICAgICAgICAgICAgICBMb2ctQXBpICgnSEVB +UlRCRUFUIDQwMyBPcmlnaW49ezB9JyAtZiAkb3JpZ2luKQ0KICAgICAgICAgICAgICAgICAgICBj +b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Okxhc3RI +ZWFydGJlYXQgPSBHZXQtRGF0ZQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6U2h1dGRvd25QZW5k +aW5nID0gJGZhbHNlDQogICAgICAgICAgICAgICAgIyBhZG1pblZlcnNpb24gLyBwbGFudW5nVmVy +c2lvbjogbXRpbWUgYWxzIFRpY2tzLiBFcmxhdWJ0IGRlbQ0KICAgICAgICAgICAgICAgICMgQ2xp +ZW50LCBSZWNodGUtIGJ6dy4gUGVyc29uZW4tQWVuZGVydW5nZW4gaW0gSGludGVyZ3J1bmQgenUN +CiAgICAgICAgICAgICAgICAjIGVya2VubmVuIHVuZCBaLnJlY2h0ZS9aLnBsYW51bmcgbmV1IHp1 +IGxhZGVuLCBvaG5lIGRhc3MgZGVyDQogICAgICAgICAgICAgICAgIyBVc2VyIEY1IGRydWVja2Vu +IG11c3MuIHBsYW51bmdWZXJzaW9uIGRlY2t0IGluc2Jlc29uZGVyZQ0KICAgICAgICAgICAgICAg +ICMgZWRpdFJlY2h0ZS9zZWhlbi1VcGRhdGVzIGFiLCBkaWUgZGVyIExpdmUtU3luYy1EZWx0YSBu +aWNodA0KICAgICAgICAgICAgICAgICMgbGllZmVydCAoQ2hlcnJ5LVBpY2sgMWFlZmUyNiBCdWcg +IzMpLg0KICAgICAgICAgICAgICAgICRhZG1pblZlciAgID0gMA0KICAgICAgICAgICAgICAgICRw +bGFudW5nVmVyID0gMA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAg +ICRhZG1pbkZpbGUgPSBKb2luLVBhdGggJERhdGFEaXIgJ2FkbWluLmpzb24nDQogICAgICAgICAg +ICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhZG1pbkZpbGUpIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICRhZG1pblZlciA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGFk +bWluRmlsZSkuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcw0KICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgICRwbGFudW5nRmlsZSA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxh +bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0 +aCAkcGxhbnVuZ0ZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nVmVyID0g +KEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkcGxhbnVuZ0ZpbGUpLkxhc3RXcml0ZVRpbWVVdGMuVGlj +a3MNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2gge30NCiAg +ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7 +IGFkbWluVmVyc2lvbiA9ICRhZG1pblZlcjsgcGxhbnVuZ1ZlcnNpb24gPSAkcGxhbnVuZ1ZlciB9 +DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlm +ICgkUGF0aCAtZXEgJy9hcGkvc2h1dGRvd24nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQog +ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnc2h1 +dGRvd24nIH0NCiAgICAgICAgICAgICAgICBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDMwMA0K +ICAgICAgICAgICAgICAgICRMaXN0ZW5lci5TdG9wKCkNCiAgICAgICAgICAgICAgICBbRW52aXJv +bm1lbnRdOjpFeGl0KDApDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVx +ICcvYXBpL2luZm8nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBS +ZWZyZXNoLVVwZGF0ZUNoZWNrDQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAg +ICAgICAgICAgICAgJGluZm9PYmogPSBAew0KICAgICAgICAgICAgICAgICAgICBiZW51dHplciAg +ICAgICAgICAgICAgICA9ICIkRG9tYWluXCRVc2VybmFtZSINCiAgICAgICAgICAgICAgICAgICAg +cm9sbGUgICAgICAgICAgICAgICAgICAgPSAkci5yb2xsZQ0KICAgICAgICAgICAgICAgICAgICBp +c3RTdXBlclVzZXIgICAgICAgICAgICA9ICRyLmlzdFN1cGVyVXNlcg0KICAgICAgICAgICAgICAg +ICAgICBpc3RGYWNoYXVmc2ljaHQgICAgICAgICA9ICRyLmlzdEZhY2hhdWZzaWNodA0KICAgICAg +ICAgICAgICAgICAgICBpc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCA9ICRyLmlzdEdlc2FtdHZlcmFu +dHdvcnRsaWNoDQogICAgICAgICAgICAgICAgICAgIHNlaGVuICAgICAgICAgICAgICAgICAgID0g +JHIuc2VoZW4NCiAgICAgICAgICAgICAgICAgICAgYWRtaW5TdWJ0YWJzICAgICAgICAgICAgPSAk +ci5hZG1pblN1YnRhYnMNCiAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGlrQmVyZWljaGUgICAg +ICAgPSAkci5zdGF0aXN0aWtCZXJlaWNoZQ0KICAgICAgICAgICAgICAgICAgICBlZGl0aWVyZW4g +ICAgICAgICAgICAgICA9ICRyLmVkaXRpZXJlbiAgICMgbnVsbCBiZWkgU3VwZXJVc2VyID0gImFs +bGVzIGVybGF1YnQiDQogICAgICAgICAgICAgICAgICAgIG1laW5lUGVyc29uSWQgICAgICAgICAg +ID0gJHIubWVpbmVQZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIgICAgICAgICAg +ICAgICAgICA9ICRzY3JpcHQ6Q29yc09yaWdpbg0KICAgICAgICAgICAgICAgICAgICB1cGRhdGVB +dmFpbGFibGUgICAgICAgICA9ICRzY3JpcHQ6VXBkYXRlQXZhaWxhYmxlDQogICAgICAgICAgICAg +ICAgICAgIHJlbW90ZVZlcnNpb24gICAgICAgICAgID0gJHNjcmlwdDpSZW1vdGVWZXJzaW9uDQog +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u +c2UgJGluZm9PYmoNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gVVBEQVRFOiBTVEFUVVMgKG51ciBTdXBl +clVzZXIpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgIyBCZWhlYnQgZGVuIDQw +NCBhdWYgL2FwaS91cGRhdGUvc3RhdHVzLiBMaWVzdCBWZXJzaW9uICsgQ2hhbmdlbG9nDQogICAg +ICAgICAgICAjIHVlYmVyIGRlbiAoamV0enQgcHJveHktYXV0aGVudGlmaXppZXJ0ZW4pIERpc3Qt +UmVwby1adWdhbmcuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3VwZGF0ZS9zdGF0 +dXMnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo +VGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2Vy +LicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRhdGVMYXN0Q2hl +Y2tVdGMgPSBbZGF0ZXRpbWVdOjpNaW5WYWx1ZSAgIyBGb3JjZS1SZWZyZXNoDQogICAgICAgICAg +ICAgICAgUmVmcmVzaC1VcGRhdGVDaGVjaw0KICAgICAgICAgICAgICAgICRsdiA9IEdldC1Mb2th +bGVWZXJzaW9uDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0K +ICAgICAgICAgICAgICAgICAgICB1cGRhdGVBdmFpbGFibGUgPSAkc2NyaXB0OlVwZGF0ZUF2YWls +YWJsZQ0KICAgICAgICAgICAgICAgICAgICBsb2NhbFZlcnNpb24gICAgPSAkbHYNCiAgICAgICAg +ICAgICAgICAgICAgcmVtb3RlVmVyc2lvbiAgID0gJHNjcmlwdDpSZW1vdGVWZXJzaW9uDQogICAg +ICAgICAgICAgICAgICAgIGNoYW5nZWxvZyAgICAgICA9IChHZXQtVXBkYXRlQ2hhbmdlbG9nICRs +diAkc2NyaXB0OlJlbW90ZVZlcnNpb24pDQogICAgICAgICAgICAgICAgICAgIG1haW50ZW5hbmNl +ICAgICA9IEB7IGxvY2tlZCA9ICRmYWxzZTsgcmVhc29uID0gJycgfQ0KICAgICAgICAgICAgICAg +ICAgICBqb2IgICAgICAgICAgICAgPSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUg +PSAkc2NyaXB0OlVwZGF0ZUpvYi5zdGF0ZTsgcGVyY2VudCA9ICRzY3JpcHQ6VXBkYXRlSm9iLnBl +cmNlbnQNCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAgPSAkc2NyaXB0OlVwZGF0ZUpvYi5z +dGVwOyBtZXNzYWdlID0gJHNjcmlwdDpVcGRhdGVKb2IubWVzc2FnZQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgZXJyb3IgPSAkc2NyaXB0OlVwZGF0ZUpvYi5lcnJvcjsgZnJvbVZlcnNpb24gPSAk +c2NyaXB0OlVwZGF0ZUpvYi5mcm9tVmVyc2lvbg0KICAgICAgICAgICAgICAgICAgICAgICAgdG9W +ZXJzaW9uID0gJHNjcmlwdDpVcGRhdGVKb2IudG9WZXJzaW9uDQogICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFVQREFURTogUFJPR1JF +U1MgKG51ciBTdXBlclVzZXIpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYg +KCRQYXRoIC1lcSAnL2FwaS91cGRhdGUvcHJvZ3Jlc3MnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcp +IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyLicgNDAzOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAg +ICBzdGF0ZSA9ICRzY3JpcHQ6VXBkYXRlSm9iLnN0YXRlOyBwZXJjZW50ID0gJHNjcmlwdDpVcGRh +dGVKb2IucGVyY2VudA0KICAgICAgICAgICAgICAgICAgICBzdGVwID0gJHNjcmlwdDpVcGRhdGVK +b2Iuc3RlcDsgbWVzc2FnZSA9ICRzY3JpcHQ6VXBkYXRlSm9iLm1lc3NhZ2UNCiAgICAgICAgICAg +ICAgICAgICAgZXJyb3IgPSAkc2NyaXB0OlVwZGF0ZUpvYi5lcnJvcjsgZnJvbVZlcnNpb24gPSAk +c2NyaXB0OlVwZGF0ZUpvYi5mcm9tVmVyc2lvbg0KICAgICAgICAgICAgICAgICAgICB0b1ZlcnNp +b24gPSAkc2NyaXB0OlVwZGF0ZUpvYi50b1ZlcnNpb247IHNlbGZ0ZXN0ID0gQCgkc2NyaXB0OlVw +ZGF0ZUpvYi5zZWxmdGVzdCkNCiAgICAgICAgICAgICAgICAgICAgbG9nID0gQCgkc2NyaXB0OlVw +ZGF0ZUpvYi5sb2cgfCBTZWxlY3QtT2JqZWN0IC1MYXN0IDYwKQ0KICAgICAgICAgICAgICAgICAg +ICBtYWludGVuYW5jZSA9IEB7IGxvY2tlZCA9ICRmYWxzZTsgcmVhc29uID0gJycgfQ0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gVVBEQVRFOiBTVEFSVCAobnVyIFN1cGVy +VXNlcikgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAjIEh5YnJpZDogc3RhcnRl +dCBkaWUgZ2V0ZXN0ZXRlLCBzaGFyZS16aWVsZW5kZSB1cGRhdGUuYmF0IGFscyBlaWdlbmVuDQog +ICAgICAgICAgICAjIFByb3plc3MgYXVzIGRlciBLQU5PTklTQ0hFTiBRdWVsbGUuIHVwZGF0ZS5i +YXQgc3RvcHB0K3N0YXJ0ZXQgZGVuDQogICAgICAgICAgICAjIFNlcnZlciBzZWxic3QgKHN0b3Au +YmF0L2RnbC5iYXQpLiBXaXIga29lbm5lbiBkZW4gZXh0ZXJuZW4gTGF1ZiBuaWNodA0KICAgICAg +ICAgICAgIyBpbiBFY2h0emVpdCB2ZXJmb2xnZW4gLT4gSm9iIG1lbGRldCAnZXh0ZXJuIGdlc3Rh +cnRldCcsIGRlciBDbGllbnQNCiAgICAgICAgICAgICMgemVpZ3QgZGVuIEhpbndlaXMgdW5kIGxh +ZWR0IG5hY2ggZGVtIE5ldXN0YXJ0IG5ldS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h +cGkvdXBkYXRlL3N0YXJ0JyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAg +ICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug +J051ciBTdXBlclVzZXIgZGFyZiBVcGRhdGVzIHN0YXJ0ZW4uJyA0MDM7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAkcXVlbGxlID0gR2V0LVVwZGF0ZVF1ZWxsZQ0KICAgICAgICAgICAgICAg +ICRiYXQgPSBKb2luLVBhdGggJHF1ZWxsZSAndXBkYXRlLmJhdCcNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkYmF0KSkgew0KICAgICAgICAgICAgICAg +ICAgICAkbXNnID0gJ3VwZGF0ZS5iYXQgbmljaHQgZ2VmdW5kZW4gKFF1ZWxsZTogJyArICRxdWVs +bGUgKyAnKS4gVXBkYXRlIGJpdHRlIHVlYmVyIHVwZGF0ZS5iYXQgaW4gZGVyIFBvcnRhbC1XdXJ6 +ZWwgYXVzZnVlaHJlbi4nDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnN0 +YXRlICAgPSAnZmFpbGVkJw0KICAgICAgICAgICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5z +dGVwICAgID0gJ2ZhaWxlZCcNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRhdGVKb2Iu +ZXJyb3IgICA9ICRtc2cNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRhdGVKb2IubWVz +c2FnZSA9ICRtc2cNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFwaSAoJ1VQREFURS1TVEFSVCBG +RUhMRVI6ICcgKyAkbXNnKQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25z +ZSAkbXNnIDUwMA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkdHMgPSAoR2V0 +LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZFRISDptbTpzcycpDQogICAgICAgICAgICAgICAgICAg +ICMgc3RkaW4gYXVzIG51bCAoZWluIEFyZ3VtZW50TGlzdC1TdHJpbmcsIHZvbiBTdGFydC1Qcm9j +ZXNzDQogICAgICAgICAgICAgICAgICAgICMgdmVyYmF0aW0gYW4gY21kKSAtPiBkYXMgYWJzY2hs +aWVzc2VuZGUgJ3BhdXNlJyBpbiB1cGRhdGUuYmF0DQogICAgICAgICAgICAgICAgICAgICMgbGll +c3QgRU9GIHVuZCBrZWhydCBzb2ZvcnQgenVydWVjaywga2VpbiBoYWVuZ2VuZGVyIFByb3plc3Mu +DQogICAgICAgICAgICAgICAgICAgIFN0YXJ0LVByb2Nlc3MgLUZpbGVQYXRoICdjbWQuZXhlJyAt +QXJndW1lbnRMaXN0ICgnL2MgIicgKyAkYmF0ICsgJyIgPG51bCcpIGANCiAgICAgICAgICAgICAg +ICAgICAgICAgIC1Xb3JraW5nRGlyZWN0b3J5ICRxdWVsbGUgLVdpbmRvd1N0eWxlIEhpZGRlbg0K +ICAgICAgICAgICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5zdGF0ZSAgICAgICA9ICdydW5u +aW5nJw0KICAgICAgICAgICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5zdGVwICAgICAgICA9 +ICdleHRlcm4nDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnBlcmNlbnQg +ICAgID0gNQ0KICAgICAgICAgICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5lcnJvciAgICAg +ICA9ICcnDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLmZyb21WZXJzaW9u +ID0gKEdldC1Mb2thbGVWZXJzaW9uKQ0KICAgICAgICAgICAgICAgICAgICAkc2NyaXB0OlVwZGF0 +ZUpvYi50b1ZlcnNpb24gICA9ICRzY3JpcHQ6UmVtb3RlVmVyc2lvbg0KICAgICAgICAgICAgICAg +ICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5zZWxmdGVzdCAgICA9IEAoKQ0KICAgICAgICAgICAgICAg +ICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5tZXNzYWdlICAgICA9ICdFeHRlcm5lciBVcGRhdGVyICh1 +cGRhdGUuYmF0KSBnZXN0YXJ0ZXQuIERlciBTZXJ2ZXIgd2lyZCBnbGVpY2ggZ2VzdG9wcHQgdW5k +IG5ldSBnZXN0YXJ0ZXQgLSBiaXR0ZSBkYW5hY2ggZGllIFNlaXRlIG5ldSBsYWRlbi4nDQogICAg +ICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLmxvZyAgICAgICAgID0gQChAeyB0ID0g +JHRzOyBtc2cgPSAndXBkYXRlLmJhdCBhdXMgJyArICRxdWVsbGUgKyAnIGdlc3RhcnRldC4nIH0p +DQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdVUERBVEUtU1RBUlQ6IHVwZGF0ZS5iYXQg +YXVzIHswfSBnZXN0YXJ0ZXQgKFN1cGVyVXNlcikuJyAtZiAkcXVlbGxlKQ0KICAgICAgICAgICAg +ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXJ0ZWQgPSAkdHJ1ZSB9DQog +ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBk +YXRlSm9iLnN0YXRlID0gJ2ZhaWxlZCcNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRh +dGVKb2IuZXJyb3IgPSAkXy5FeGNlcHRpb24uTWVzc2FnZQ0KICAgICAgICAgICAgICAgICAgICBM +b2ctQXBpICgnVVBEQVRFLVNUQVJUIEZFSExFUjogezB9JyAtZiAkXy5FeGNlcHRpb24uTWVzc2Fn +ZSkNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCdVcGRhdGUtU3Rh +cnQgZmVobGdlc2NobGFnZW46ICcgKyAkXy5FeGNlcHRpb24uTWVzc2FnZSkgNTAwDQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAg +ICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2RlYnVnJyAtYW5kICRNZXRob2QgLWVxICdHRVQn +KSB7DQogICAgICAgICAgICAgICAgJGRhdCA9IEB7IFJvb3QgPSAkUm9vdDsgRGF0YURpciA9ICRE +YXRhRGlyOyBGaWxlcyA9IEB7fSB9DQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGYgaW4gJ2Fk +bWluLmpzb24nLCdwbGFudW5nLmpzb24nLCdsb2didWNoLmpzb24nKSB7DQogICAgICAgICAgICAg +ICAgICAgICRmcCA9IEpvaW4tUGF0aCAkRGF0YURpciAkZg0KICAgICAgICAgICAgICAgICAgICAk +aW5mbyA9IEB7IGV4aXN0cyA9IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRmcCkgfQ0KICAgICAg +ICAgICAgICAgICAgICBpZiAoJGluZm8uZXhpc3RzKSB7ICRpbmZvLnNpemUgPSAoR2V0LUl0ZW0g +LUxpdGVyYWxQYXRoICRmcCkuTGVuZ3RoIH0NCiAgICAgICAgICAgICAgICAgICAgJGRhdC5GaWxl +c1skZl0gPSAkaW5mbw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIFJlY2h0 +ZS1JbmZvICh3aWNodGlnIGZ1ZXIgQWRtaW4tVGFiLVNpY2h0YmFya2VpdCkNCiAgICAgICAgICAg +ICAgICAkZGF0LkJlbnV0emVyID0gIiREb21haW5cJFVzZXJuYW1lIg0KICAgICAgICAgICAgICAg +IHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAg +ICAgICAgICAkZGF0LlJlY2h0ZSA9IEB7DQogICAgICAgICAgICAgICAgICAgICAgICByb2xsZSAg +ICAgICAgICAgPSAkci5yb2xsZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaXN0U3VwZXJVc2Vy +ICAgID0gJHIuaXN0U3VwZXJVc2VyDQogICAgICAgICAgICAgICAgICAgICAgICBpc3RGYWNoYXVm +c2ljaHQgPSAkci5pc3RGYWNoYXVmc2ljaHQNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlaGVu +ICAgICAgICAgICA9ICRyLnNlaGVuDQogICAgICAgICAgICAgICAgICAgICAgICBtZWluZVBlcnNv +bklkICAgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgJGRhdC5SZWNodGUgPSBAeyBm +ZWhsZXIgPSAkXy5FeGNlcHRpb24uTWVzc2FnZSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICMgQWRtaW4uanNvbiBLdXJ6Y2hlY2sNCiAgICAgICAgICAgICAgICAkYWRtaW5P +YmogPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRu +dWxsIC1lcSAkYWRtaW5PYmopIHsNCiAgICAgICAgICAgICAgICAgICAgJGRhdC5BZG1pbkpzb25M +ZXNiYXIgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAg +ICAgICAkYW56U1UgPSAwDQogICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW5PYmouc3VwZXJV +c2VyKSB7ICRhbnpTVSA9IEAoJGFkbWluT2JqLnN1cGVyVXNlcikuQ291bnQgfQ0KICAgICAgICAg +ICAgICAgICAgICAkc3VLZW5udW5nZW4gPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRh +ZG1pbk9iai5zdXBlclVzZXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRz +IGluIEAoJGFkbWluT2JqLnN1cGVyVXNlcikpIHsgJHN1S2VubnVuZ2VuICs9IFtzdHJpbmddJHMu +bndLZW5udW5nIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAk +ZGF0LkFkbWluSnNvbkxlc2JhciA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICRkYXQuU3Vw +ZXJVc2VyQW56YWhsID0gJGFuelNVDQogICAgICAgICAgICAgICAgICAgICRkYXQuU3VwZXJVc2Vy +S2VubnVuZ2VuID0gJHN1S2VubnVuZ2VuDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgJGRhdA0KICAgICAgICAgICAgICAgIGNvbnRp +bnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gU1lOQy1DSEVDSyA9PT09 +PQ0KICAgICAgICAgICAgIyBWZXJnbGVpY2h0IHBybyBXZWItQXNzZXQgZGllIERhdGVpLUdyb2Vz +c2UgaW4gZGVyIFNvdXJjZSAoZ2VwdWxsdGVzDQogICAgICAgICAgICAjIFJlcG8sICRzY3JpcHQ6 +QXNzZXRGYWxsYmFjaykgZ2VnZW4gZGllIERhdGVpLUdyb2Vzc2UgaW0gQXNzZXQtQ2FjaGUNCiAg +ICAgICAgICAgICMgKCRSb290LCBSb2JvY29weS1aaWVsKS4gRXJrZW5udCB1bnZvbGxzdGFlbmRp +Z2UgUm9ib2NvcHktVWViZXItDQogICAgICAgICAgICAjIHRyYWd1bmdlbiwgdmVyYWx0ZXRlIEFz +c2V0LUNhY2hlcyB1bmQgZmVobGVuZGUgRGF0ZWllbi4NCiAgICAgICAgICAgIGlmICgkUGF0aCAt +ZXEgJy9hcGkvc3luYy1jaGVjay9kYXRlaWVuJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQog +ICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJl +c3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgIGlmICgtbm90ICRzY3JpcHQ6QXNzZXRGYWxsYmFjaykgew0KICAgICAgICAgICAgICAgICAg +ICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBv +ayA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyID0gJ0Fzc2V0RmFsbGJh +Y2sgbmljaHQga29uZmlndXJpZXJ0IOKAlCBTb3VyY2UtUGZhZCB1bmJla2FubnQsIFZlcmdsZWlj +aCBuaWNodCBtb2VnbGljaC4gKFNlcnZlciB3dXJkZSBvaG5lIC1Bc3NldEZhbGxiYWNrIGdlc3Rh +cnRldC4pJw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRp +bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR3ZWJFeHQgPSAnLmpzJywn +LmNzcycsJy5odG1sJywnLmljbycsJy5wbmcnLCcuanBnJywnLmpwZWcnLCcuc3ZnJw0KICAgICAg +ICAgICAgICAgICRpZ25vcmllcmVUb3AgPSBAKCcuZ2l0JywnZG9jcycsJ2RldicsJ3Rlc3RzJywn +ZGF0YScsJ2NhY2hlJykNCiAgICAgICAgICAgICAgICAkZGF0ZWllbiA9IEAoKQ0KICAgICAgICAg +ICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRhbGxlID0gR2V0LUNoaWxkSXRlbSAt +TGl0ZXJhbFBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNrIC1SZWN1cnNlIC1GaWxlIC1FcnJvckFj +dGlvbiBTaWxlbnRseUNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmIGlu +ICRhbGxlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcmVsID0gJGYuRnVsbE5hbWUuU3Vi +c3RyaW5nKCRzY3JpcHQ6QXNzZXRGYWxsYmFjay5MZW5ndGggKyAxKSAtcmVwbGFjZSAnXFwnLCAn +LycNCiAgICAgICAgICAgICAgICAgICAgICAgICR0b3AgPSAoJHJlbCAtc3BsaXQgJy8nKVswXQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpZ25vcmllcmVUb3AgLWNvbnRhaW5zICR0b3Ap +IHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGV4dCA9ICRmLkV4dGVuc2lv +bi5Ub0xvd2VyKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkd2ViRXh0IC1ub3Rjb250 +YWlucyAkZXh0KSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRkYXRlaWVu +ICs9ICRyZWwNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAjIGRh +dGEvLVNvbmRlcmZhZWxsZTogbnVyIGRpZSB6d2VpIFRhcm4tTWFya3VwcywgYWxsZXMgYW5kZXJl +DQogICAgICAgICAgICAgICAgICAgICMgbGllZ3QgaW0gRGF0YURpciAoYWRtaW4uanNvbi9wbGFu +dW5nLmpzb24vLi4uKSB1bmQgd2lyZCBuaWNodA0KICAgICAgICAgICAgICAgICAgICAjIGluIGRl +biBBc3NldC1DYWNoZSBrb3BpZXJ0Lg0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZXh0 +cmEgaW4gJ2RhdGEvbWFpbmZyYW1lLmh0bWwnLCdkYXRhL3Nhbml0aXplci5odG1sJykgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgJHNyY0V4dHJhID0gSm9pbi1QYXRoICRzY3JpcHQ6QXNzZXRG +YWxsYmFjayAkZXh0cmENCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxp +dGVyYWxQYXRoICRzcmNFeHRyYSkgeyAkZGF0ZWllbiArPSAkZXh0cmEgfQ0KICAgICAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAg -IFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0K -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2Vibmlz -Lm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJu -aXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBEaWZmIGFsdC9uZXUgbmFj -aCBud0tlbm51bmcuIFNVLVJlaW4vUmF1cyBsb2VzdCBtYWlsdG8gdmlhIENsaWVudCBhdXMNCiAg -ICAgICAgICAgICAgICAjIChWZXJhbnR3b3J0dW5ncy1VZWJlcmdhbmcgVm9ybGFnZSAncm9sbGVf -dmVyYW50d29ydHVuZycpLg0KICAgICAgICAgICAgICAgICRtYWlsdG9EaWZmcyA9IEdldC1Sb2xs -ZURpZmZzICRsb2NrRXJnZWJuaXMuYWx0ICRkYXRlbiAnU3VwZXJVc2VyJyAkZmFsc2UNCiAgICAg -ICAgICAgICAgICAjIGFuemFobCBtaXRnZWJlbiDigJQgZGVyIExvZ2J1Y2gtQ2xpZW50IGxpZXN0 -IGUuYW56YWhsOyBvaG5lIGRhcw0KICAgICAgICAgICAgICAgICMgRmVsZCBibGllYiBkaWUgRGV0 -YWlsLVNwYWx0ZSBiZWkgU1UtTGlzdGVuYWVuZGVydW5nZW4gbGVlcg0KICAgICAgICAgICAgICAg -ICMgKGZhY2hhdWZzaWNodC5nZWFlbmRlcnQgdW50ZW4gbWFjaHQgZXMgZ2VuYXVzbykuDQogICAg -ICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3VwZXJVc2VyLmdlYWVuZGVydCcgQHsgYW56 -YWhsID0gJGRhdGVuLkNvdW50OyBkaWZmcyA9ICRtYWlsdG9EaWZmcy5Db3VudCB9DQogICAgICAg -ICAgICAgICAgJHJlc3AgPSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAg -ICAgICBpZiAoJG1haWx0b0RpZmZzLkNvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAg -ICMgUFMtNS4xLVVud3JhcC1TY2h1dHo6IEAoJHgpIGVyendpbmd0IEFycmF5IGF1Y2ggYmVpIDEg -RWxlbWVudC4NCiAgICAgICAgICAgICAgICAgICAgJHJlc3BbJ19icmF1Y2h0X21haWx0byddID0g -W29yZGVyZWRdQHsgdHJpZ2dlciA9ICdyb2xsZV92ZXJhbnR3b3J0dW5nJzsgZGlmZnMgPSBbb2Jq -ZWN0W11dQCgkbWFpbHRvRGlmZnMpIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkcmVzcA0KICAgICAgICAgICAgICAgIGNvbnRp -bnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0LUxpc3RlOiBu -dXIgU3VwZXJVc2VyIGRhcmYgRmFjaGF1ZnNpY2h0IHZlcndhbHRlbg0KICAgICAgICAgICAgaWYg -KCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9mYWNoYXVmc2ljaHQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BV -VCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNl -bmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gRmFjaGF1ZnNpY2h0IHZl -cndhbHRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJv -ZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9y -ICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJGJvZHlPYmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg -ICAkZGF0ZW4gPSBbb2JqZWN0W11dQCgkYm9keU9iaikNCiAgICAgICAgICAgICAgICAkbG9ja0Vy -Z2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAg -ICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29u -Jw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJu -IEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxl -c2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNj -aHV0eiAnZmFjaGF1ZnNpY2h0JyAkZGF0ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNl -OyBzdGF0dXMgPSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgJGFsdEZBID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ2ZhY2hhdWZzaWNodCddKSB7ICRhbHRGQSA9IFtvYmplY3RbXV1AKCRh -ZG1pbi5mYWNoYXVmc2ljaHQpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNr -dXAtQWRtaW5Kc29uICdmYWNoYXVmc2ljaHQnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydmYWNoYXVmc2ljaHQnXSkgeyAkYWRtaW4uZmFj -aGF1ZnNpY2h0ID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRt -aW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdmYWNoYXVmc2ljaHQnIC1Ob3RlUHJv -cGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl -LUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAg -ICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0gJGFsdEZBIH0NCiAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAg -ICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGlu -dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdl -Ym5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0Vy -Z2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0 -LURpZmY6IHRyZW5udCBtYWlsdG8td3VlcmRpZ2UgVmVyYW50d29ydHVuZ3MtDQogICAgICAgICAg -ICAgICAgIyBVZWJlcmdhZW5nZSAoR2VzYW10dmVyYW50d29ydGxpY2ggcmVpbi9yYXVzKSB2b20g -cmVzdGxpY2hlbg0KICAgICAgICAgICAgICAgICMgUm9sbGVuLVVwZGF0ZXMgKEZBIGhpbnp1L3Jh -dXMgb2huZSBHZXNhbXQsIG9kZXIgU2VoZW4tRmxhZy0NCiAgICAgICAgICAgICAgICAjIFdlY2hz -ZWwpLiBFcnN0ZSBmbGllw59lbiBpbiBkZW4gbWFpbHRvLVRyaWdnZXIsIGRlciBSZXN0IHdpcmQN -CiAgICAgICAgICAgICAgICAjIHp1IEluLUFwcC1IaW53ZWlzZW4uDQogICAgICAgICAgICAgICAg -JGZhQXVzd2VydHVuZyA9IEdldC1GYWNoYXVmc2ljaHREaWZmcyAkbG9ja0VyZ2VibmlzLmFsdCAk -ZGF0ZW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdmYWNoYXVmc2ljaHQuZ2Vh -ZW5kZXJ0JyBAeyBhbnphaGwgPSAkZGF0ZW4uQ291bnQ7IG1haWx0byA9ICRmYUF1c3dlcnR1bmcu -bWFpbHRvRGlmZnMuQ291bnQ7IGhpbndlaXNlID0gJGZhQXVzd2VydHVuZy5oaW53ZWlzRGlmZnMu -Q291bnQgfQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRoIGluICRmYUF1c3dlcnR1bmcuaGlu -d2Vpc0RpZmZzKSB7DQogICAgICAgICAgICAgICAgICAgIE5ldy1IaW53ZWlzICdyb2xsZV9nZWFl -bmRlcnQnICRoIChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgJHJlc3AgPSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQn -IH0NCiAgICAgICAgICAgICAgICBpZiAoJGZhQXVzd2VydHVuZy5tYWlsdG9EaWZmcy5Db3VudCAt -Z3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAjIFBTLTUuMS1VbndyYXAtU2NodXR6OiBAKCR4 -KSBlcnp3aW5ndCBBcnJheSBhdWNoIGJlaSAxIEVsZW1lbnQuDQogICAgICAgICAgICAgICAgICAg -ICRyZXNwWydfYnJhdWNodF9tYWlsdG8nXSA9IFtvcmRlcmVkXUB7IHRyaWdnZXIgPSAncm9sbGVf -dmVyYW50d29ydHVuZyc7IGRpZmZzID0gW29iamVjdFtdXUAoJGZhQXVzd2VydHVuZy5tYWlsdG9E -aWZmcykgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl -Y3QgJFJlc3BvbnNlICRyZXNwDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg -IH0NCg0KICAgICAgICAgICAgIyBEaXJla3Rpb25zbGVpdHVuZyArIEZ1ZWhydW5nc3N0ZWxsZSAo -Z2xlaWNoZXMgU2NoZW1hIHdpZQ0KICAgICAgICAgICAgIyBGYWNoYXVmc2ljaHQsIG51ciBzZXBh -cmF0ZSBMaXN0ZW4pLiBCZWlkZSBSb3V0ZW4gdGVpbGVuIGRpZQ0KICAgICAgICAgICAgIyBnbGVp -Y2hlIExvZ2lrOiBTVS1vbmx5IFBVVCwgQmFja3VwLCBTY2hyZWliZW4sIERpZmZzIHp1DQogICAg -ICAgICAgICAjIEluLUFwcC1IaW53ZWlzZW4gdW1zZXR6ZW4uDQogICAgICAgICAgICBpZiAoKCRQ -YXRoIC1lcSAnL2FwaS9hZG1pbi9kaXJla3Rpb25zbGVpdHVuZycgLW9yICRQYXRoIC1lcSAnL2Fw -aS9hZG1pbi9mdWVocnVuZ3NzdGVsbGUnKSAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAg -ICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRS -ZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIFJvbGxlbiB2ZXJ3YWx0ZW4nIDQwMzsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgICRmZWxkTmFtZSA9IGlmICgkUGF0aCAtZXEgJy9hcGkv -YWRtaW4vZGlyZWt0aW9uc2xlaXR1bmcnKSB7ICdkaXJla3Rpb25zbGVpdHVuZycgfSBlbHNlIHsg -J2Z1ZWhydW5nc3N0ZWxsZScgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRS -ZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVz -cG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICRib2R5T2JqID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRh -dGVuID0gW29iamVjdFtdXUAoJGJvZHlPYmopDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5p -cyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxv -Y2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBv -ayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXIn -IH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdCA9IEAoKQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkTmFtZV0pIHsgJGFs -dCA9IFtvYmplY3RbXV1AKCRhZG1pbi4kZmVsZE5hbWUpIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgIFt2b2lkXShCYWNrdXAtQWRtaW5Kc29uICRmZWxkTmFtZSkNCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1skZmVsZE5hbWVdKSB7ICRhZG1p -bi4kZmVsZE5hbWUgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRh -ZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGZlbGROYW1lIC1Ob3RlUHJvcGVy -dHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpz -b25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAg -ICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0gJGFsdCB9DQogICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAg -U2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQog -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMu -b2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5p -cy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICgk -ZmVsZE5hbWUgKyAnLmdlYWVuZGVydCcpIEB7IGFuemFobCA9ICRkYXRlbi5Db3VudCB9DQogICAg -ICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVp -Y2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAg -ICAgICAgICAjIEJlemVpY2hudW5nZW46IE9iamVrdCAoTWFwIGtleS0+bGFiZWwpLiBMZWVyZXMg -T2JqZWt0ID0gUmVzZXQuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2Jl -emVpY2hudW5nZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFk -bWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFk -LUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAg -ICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAg -ICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpz -b24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAn -YWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWlu -KSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNv -biBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydiZXplaWNobnVuZ2VuJ10pIHsgJGFkbWluLmJlemVpY2hudW5n -ZW4gPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFk -ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2JlemVpY2hudW5nZW4nIC1Ob3RlUHJvcGVydHlW -YWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25P -YmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAg -ICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz -cG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiZXplaWNobnVuZ2VuLmdl -YWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA -eyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg -ICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFN0YXRpc3Rpay1CYXVrYXN0ZW4gKHNlbGJzdGdl -YmF1dGUgS2FjaGVsbikgKyBTdXBlclVzZXItTGF5b3V0LVJhc3Rlci4NCiAgICAgICAgICAgICMg -R2F0ZSBiZXd1c3N0IFNVIE9ERVIgR2VzYW10dmVyYW50d29ydGxpY2ggKG5pY2h0IFRlc3QtSXN0 -QWRtaW4pIOKAlCBkZXINCiAgICAgICAgICAgICMgQnVpbGRlciBsZWJ0IGltIFN0YXRpc3Rpay1U -YWIgdW5kIG11c3MgYXVjaCBmdWVyIEdlc2FtdHZlcmFudHdvcnRsaWNoZQ0KICAgICAgICAgICAg -IyBvaG5lIGFkbWluaXN0cmF0aW9uLVp1Z2FuZyBzcGVpY2hlcmJhciBzZWluLiBQYXJ0aWFsLU1l -cmdlIG51ciBkZXINCiAgICAgICAgICAgICMgYmVpZGVuIGJla2FubnRlbiBLZXlzOyBiZWlkZSBh -bHMgW29iamVjdFtdXSB6d2luZ2VuIChQUy01LjEtVW53cmFwKS4NCiAgICAgICAgICAgIGlmICgk -UGF0aCAtZXEgJy9hcGkvYWRtaW4vc3RhdGlzdGlrJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7 -DQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1u -b3QgKChUZXN0LUlzdEFkbWluKSAtb3IgJHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQog -ICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgQWRtaW5zIHVuZCBH -ZXNhbXR2ZXJhbnR3b3J0bGljaGUgZHVlcmZlbiBTdGF0aXN0aWstS2FjaGVsbiBhZW5kZXJuJyA0 -MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0g -UmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAg -ICAgICAgICRoYXRLYWNoZWxuID0gKCRudWxsIC1uZSAkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmpl -Y3QuUHJvcGVydGllc1snc3RhdGlzdGlrS2FjaGVsbiddKQ0KICAgICAgICAgICAgICAgICRoYXRM -YXlvdXQgID0gKCRudWxsIC1uZSAkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGll -c1snc3RhdGlzdGlrTGF5b3V0J10pDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRu -dWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdl -Ym5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRm -YWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoYXRLYWNoZWxuKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJGsgPSBbb2JqZWN0W11dQCgkZGF0ZW4uc3RhdGlzdGlrS2FjaGVsbikN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ3N0YXRpc3Rpa0thY2hlbG4nXSkgeyAkYWRtaW4uc3RhdGlzdGlrS2FjaGVsbiA9ICRrIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAt -Tm90ZVByb3BlcnR5TmFtZSAnc3RhdGlzdGlrS2FjaGVsbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRr -IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJGhhdExheW91dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsID0g -W29iamVjdFtdXUAoJGRhdGVuLnN0YXRpc3Rpa0xheW91dCkNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRpc3Rpa0xheW91dCdd -KSB7ICRhZG1pbi5zdGF0aXN0aWtMYXlvdXQgPSAkbCB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N0YXRp -c3Rpa0xheW91dCcgLU5vdGVQcm9wZXJ0eVZhbHVlICRsIC1Gb3JjZSB9DQogICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdh -ZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0 -dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgi -TG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQog -ICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3RhdGlzdGlrLmNvbmZpZy5nZWFlbmRl -cnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3Rh -dHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg -ICAgIH0NCg0KICAgICAgICAgICAgIyBTdGFuZGFyZHJlY2h0ZSAocmVndWxhZXJlIFVzZXIpOiBn -ZWdlbnNlaXRpZ2UgUGxhbnVuZyBqZSBEaWVuc3RncnVwcGUvDQogICAgICAgICAgICAjIFN0YW5k -b3J0LiBTVS1vbmx5LiBXaXJkIGluIEdldC1SZWNodGUgYWRkaXRpdiBpbiBlZGl0aWVyZW4gZWlu -Z2V3b2Jlbi4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vc3RhbmRhcmRy -ZWNodGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJV -c2VyIGR1ZXJmZW4gU3RhbmRhcmRyZWNodGUgYWVuZGVybicgNDAzOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycg -NDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0 -RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGdnID0gQCgpOyBpZiAoJGRhdGVuIC1hbmQgJGRh -dGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlZ2Vuc2VpdGlnR3J1cHBlbiddKSAgIHsgJGdnID0g -W3N0cmluZ1tdXUAoJGRhdGVuLmdlZ2Vuc2VpdGlnR3J1cHBlbiAgIHwgRm9yRWFjaC1PYmplY3Qg -eyBbc3RyaW5nXSRfIH0pIH0NCiAgICAgICAgICAgICAgICAkZ3MgPSBAKCk7IGlmICgkZGF0ZW4g -LWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZ2VnZW5zZWl0aWdTdGFuZG9ydGUnXSkg -eyAkZ3MgPSBbc3RyaW5nW11dQCgkZGF0ZW4uZ2VnZW5zZWl0aWdTdGFuZG9ydGUgfCBGb3JFYWNo -LU9iamVjdCB7IFtzdHJpbmddJF8gfSkgfQ0KICAgICAgICAgICAgICAgICRzciA9IEB7IGdlZ2Vu -c2VpdGlnR3J1cHBlbiA9ICRnZzsgZ2VnZW5zZWl0aWdTdGFuZG9ydGUgPSAkZ3MgfQ0KICAgICAg -ICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQog -ICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdh -ZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25P -YmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx -ICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2Fk -bWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -YWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snc3RhbmRhcmRSZWNodGUnXSkgeyAkYWRtaW4uc3Rh -bmRhcmRSZWNodGUgPSAkc3IgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1p -biB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N0YW5kYXJkUmVjaHRlJyAtTm90ZVBy -b3BlcnR5VmFsdWUgJHNyIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1K -c29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAg -ICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3RhbmRhcmRyZWNo -dGUuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3Bv -bnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVl -DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgRS1NYWlsLVZvcmxhZ2VuOiBPYmpla3Qg -KG5pY2h0IEFycmF5KSDigJQgZWlnZW5lciBIYW5kbGVyLg0KICAgICAgICAgICAgaWYgKCRQYXRo -IC1lcSAnL2FwaS9hZG1pbi9lbWFpbHZvcmxhZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1u -b3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsg -Y29udGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20t -SnNvbg0KICAgICAgICAgICAgICAgICMgUmljaC1UZXh0LUJvZHkgamUgVm9ybGFnZSBzZXJ2ZXJz -ZWl0aWcgYmVyZWluaWdlbiAoU3RvcmVkLVhTUykuDQogICAgICAgICAgICAgICAgaWYgKCRudWxs -IC1uZSAkZGF0ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJGRhdGVu -LlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR2ID0gJHAu -VmFsdWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHYgLWFuZCAkdi5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10gLWFuZCAoJHYudGV4dCAtaXMgW3N0cmluZ10pKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHYudGV4dCA9IENvbnZlcnRUby1TYWZlUmlj -aEh0bWwgJHYudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMg -PSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2Nr -RXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sg -PSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9 -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGll -c1snZW1haWxWb3JsYWdlbiddKSB7ICRhZG1pbi5lbWFpbFZvcmxhZ2VuID0gJGRhdGVuIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJv -cGVydHlOYW1lICdlbWFpbFZvcmxhZ2VuJyAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3Jj -ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29u -JyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9r -ID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRj -aCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhs -ZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2Nr -RXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgV3JpdGUtTG9nRWludHJhZyAnZW1haWx2b3JsYWdlbi5nZWFlbmRlcnQnIEB7fQ0KICAg -ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3Bl -aWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAg -ICAgICAgICAgIyBFLU1haWwtVHJpZ2dlci1Lb25maWcgKHBybyBUcmlnZ2VyOiBha3RpdiArIEVt -cGZhZW5nZXItVGFncykg4oCUDQogICAgICAgICAgICAjIGF1c3NjaGxpZXNzbGljaCBTdGV1ZXJ1 -bmcgZnVlciBkZW4gRnJvbnRlbmQtbWFpbHRvOi1EaXNwYXRjaGVyLg0KICAgICAgICAgICAgaWYg -KCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9lbWFpbHRyaWdnZXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BV -VCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1F -cnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycg -NDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0 -RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAg -ICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9r -ZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRh -ZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVz -ID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydlbWFpbFRyaWdnZXIn -XSkgeyAkYWRtaW4uZW1haWxUcmlnZ2VyID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdlbWFpbFRy -aWdnZXInIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxs -DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAg -ICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRp -bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJn -ZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tF -cmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYW56ID0gaWYgKCRk -YXRlbikgeyAoJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMgfCBNZWFzdXJlLU9iamVjdCkuQ291 -bnQgfSBlbHNlIHsgMCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZW1haWx0 -cmlnZ2VyLmdlYWVuZGVydCcgQHsgYW56YWhsX3RyaWdnZXIgPSAkYW56IH0NCiAgICAgICAgICAg -ICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcg -fQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAg -ICRhZG1pbktleXMgPSBAew0KICAgICAgICAgICAgICAgICcvYXBpL2FkbWluL2ZlaWVydGFnZScg -ICAgICA9ICdmZWllcnRhZ2UnDQogICAgICAgICAgICAgICAgJy9hcGkvYWRtaW4vZmVyaWVuJyAg -ICAgICAgID0gJ2ZlcmllbicNCiAgICAgICAgICAgICAgICAnL2FwaS9hZG1pbi9zb25kZXJ0ZXJt -aW5lJyAgPSAnc29uZGVydGVybWluZScNCiAgICAgICAgICAgICAgICAnL2FwaS9hZG1pbi9zdGFu -ZG9ydGUnICAgICAgPSAnc3RhbmRvcnRlJw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYg -KCRhZG1pbktleXMuQ29udGFpbnNLZXkoJFBhdGgpIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsN -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAk -UmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgJGtleSA9ICRhZG1pbktleXNbJFBhdGhdDQogICAg -ICAgICAgICAgICAgIyBAKC4uLikgZXJ6d2luZ3QgQXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50IChQ -UyA1LjEgZW50cGFja3Qgc29uc3QpLg0KICAgICAgICAgICAgICAgICRib2R5T2JqID0gJGJvZHkg -fCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0gW29iamVjdFtdXUAo -JGJvZHlPYmopDQogICAgICAgICAgICAgICAgIyBzb25kZXJ0ZXJtaW5lIHRyYWdlbiBSaWNoLVRl -eHQgKHRleHQpIOKAlCBzZXJ2ZXJzZWl0aWcgYmVyZWluaWdlbi4NCiAgICAgICAgICAgICAgICBp -ZiAoJGtleSAtZXEgJ3NvbmRlcnRlcm1pbmUnKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVh -Y2ggKCRlIGluICRkYXRlbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1u -ZSAkZSAtYW5kICRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSAtYW5kICgkZS50ZXh0IC1p -cyBbc3RyaW5nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZS50ZXh0ID0gQ29u -dmVydFRvLVNhZmVSaWNoSHRtbCAkZS50ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkZmFsc2U7IGZlaGxlciA9ICgnU291 +cmNlLVZlcnplaWNobmlzIG5pY2h0IGxlc2JhcjogJyArICRfLkV4Y2VwdGlvbi5NZXNzYWdlKSB9 +DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICRkYXRlaWVuID0gJGRhdGVpZW4gfCBTb3J0LU9iamVjdCAtVW5pcXVlDQogICAg +ICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoKQ0KICAgICAgICAgICAgICAgICRhbnpPayA9IDA7 +ICRhbnpEaWZmID0gMDsgJGFuekZlaGx0QXNzZXQgPSAwOyAkYW56RmVobHRTb3VyY2UgPSAwDQog +ICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJlbCBpbiAkZGF0ZWllbikgew0KICAgICAgICAgICAg +ICAgICAgICAkYXNzZXRQZmFkICA9IEpvaW4tUGF0aCAkUm9vdCAkcmVsDQogICAgICAgICAgICAg +ICAgICAgICRzb3VyY2VQZmFkID0gSm9pbi1QYXRoICRzY3JpcHQ6QXNzZXRGYWxsYmFjayAkcmVs +DQogICAgICAgICAgICAgICAgICAgICRhc3NldEJ5dGVzICA9ICRudWxsDQogICAgICAgICAgICAg +ICAgICAgICRzb3VyY2VCeXRlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgIGlmIChUZXN0 +LVBhdGggLUxpdGVyYWxQYXRoICRhc3NldFBmYWQpICB7ICRhc3NldEJ5dGVzICA9IChHZXQtSXRl +bSAtTGl0ZXJhbFBhdGggJGFzc2V0UGZhZCkuTGVuZ3RoIH0NCiAgICAgICAgICAgICAgICAgICAg +aWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNvdXJjZVBmYWQpIHsgJHNvdXJjZUJ5dGVzID0g +KEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkc291cmNlUGZhZCkuTGVuZ3RoIH0NCiAgICAgICAgICAg +ICAgICAgICAgJHN0YXR1cyA9ICd1bmJla2FubnQnDQogICAgICAgICAgICAgICAgICAgIGlmICgk +bnVsbCAtZXEgJHNvdXJjZUJ5dGVzIC1hbmQgJG51bGwgLWVxICRhc3NldEJ5dGVzKSB7ICRzdGF0 +dXMgPSAnYmVpZGVfZmVobGVuJyB9DQogICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoJG51bGwg +LWVxICRhc3NldEJ5dGVzKSAgeyAkc3RhdHVzID0gJ2Fzc2V0X2ZlaGx0JzsgICRhbnpGZWhsdEFz +c2V0KysgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCRudWxsIC1lcSAkc291cmNlQnl0 +ZXMpIHsgJHN0YXR1cyA9ICdzb3VyY2VfZmVobHQnOyAkYW56RmVobHRTb3VyY2UrKyB9DQogICAg +ICAgICAgICAgICAgICAgIGVsc2VpZiAoJGFzc2V0Qnl0ZXMgLWVxICRzb3VyY2VCeXRlcykgeyAk +c3RhdHVzID0gJ29rJzsgJGFuek9rKysgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHN0 +YXR1cyA9ICdncm9lc3NlX2RpZmYnOyAkYW56RGlmZisrIH0NCiAgICAgICAgICAgICAgICAgICAg +JGVpbnRyYWVnZSArPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgcGZhZCAg +ICAgICAgPSAkcmVsDQogICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VCeXRlcyA9ICRzb3Vy +Y2VCeXRlcw0KICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXRCeXRlcyAgPSAkYXNzZXRCeXRl +cw0KICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkJ5dGVzICAgPSBpZiAoJG51bGwgLW5lICRz +b3VyY2VCeXRlcyAtYW5kICRudWxsIC1uZSAkYXNzZXRCeXRlcykgeyAkYXNzZXRCeXRlcyAtICRz +b3VyY2VCeXRlcyB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0 +dXMgICAgICA9ICRzdGF0dXMNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAg +ICAgICAgICAgICAgIG9rICAgICAgICAgID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgc291 +cmNlUm9vdCAgPSAkc2NyaXB0OkFzc2V0RmFsbGJhY2sNCiAgICAgICAgICAgICAgICAgICAgYXNz +ZXRSb290ICAgPSAkUm9vdA0KICAgICAgICAgICAgICAgICAgICBhbnphaGwgICAgICA9ICRlaW50 +cmFlZ2UuQ291bnQNCiAgICAgICAgICAgICAgICAgICAgYW56T2sgICAgICAgPSAkYW56T2sNCiAg +ICAgICAgICAgICAgICAgICAgYW56RGlmZiAgICAgPSAkYW56RGlmZg0KICAgICAgICAgICAgICAg +ICAgICBhbnpGZWhsdEFzc2V0ICA9ICRhbnpGZWhsdEFzc2V0DQogICAgICAgICAgICAgICAgICAg +IGFuekZlaGx0U291cmNlID0gJGFuekZlaGx0U291cmNlDQogICAgICAgICAgICAgICAgICAgIGRh +dGVpZW4gICAgID0gJGVpbnRyYWVnZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IEFETUlOID09 +PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluJyAtYW5kICRNZXRob2Qg +LWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJHR4dCA9IFJlYWQtVGV4dEZpbGUgJ2FkbWlu +Lmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkdHh0KSB7IFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICdhZG1pbi5qc29uIG5pY2h0IGdlZnVuZGVuJyA0MDQgfQ0KICAgICAgICAgICAg +ICAgIGVsc2UgeyBTZW5kLUpzb25UZXh0ICRSZXNwb25zZSAkdHh0IH0NCiAgICAgICAgICAgICAg +ICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw +aS9hZG1pbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgt +bm90IChUZXN0LURhcmZCZXJlaWNoICdhZG1pbmlzdHJhdGlvbicpKSB7IFNlbmQtRXJyb3IgJFJl +c3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg +JGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNv +bg0KICAgICAgICAgICAgICAgIGlmICgkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snYWRtaW5L +ZW5udW5nZW4nXSkgeyAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ2FkbWluS2Vu +bnVuZ2VuJykgfQ0KICAgICAgICAgICAgICAgICMgUFMtNS4xLVVud3JhcC1TY2h1dHo6IGFsbGUg +TGlzdGVuLUZlbGRlciwgZGllIGRlciBDbGllbnQgdW50ZXINCiAgICAgICAgICAgICAgICAjIEFE +TUlOX0xJU1RfRkVMREVSIGZ1ZWhydCwgc2VydmVyLXNlaXRpZyBhbHMgQXJyYXlzIGVyendpbmdl +bi4NCiAgICAgICAgICAgICAgICAjIFNvbnN0IHdlcmRlbiBMaXN0ZW4gbWl0IG51ciBlaW5lbSBF +bGVtZW50IHZvbSBQb3dlclNoZWxsLUpTT04tDQogICAgICAgICAgICAgICAgIyBSb3VuZHRyaXAg +enVtIEVpbnplbC1PYmpla3QgZW50cGFja3QgdW5kIGNsaWVudC1zZWl0aWcga29tbXQNCiAgICAg +ICAgICAgICAgICAjIGFkbWluTGlzdGVuTm9ybWFsaXNpZXJlbiBnZ2YuIHp1IHNwYWV0ICh6LkIu +IG5hY2ggSG90LVJlbG9hZCkuDQogICAgICAgICAgICAgICAgTm9ybWFsaXNpZXJlLUFkbWluTGlz +dGVuICRkYXRlbg0KICAgICAgICAgICAgICAgICMgU2VydmVyLXNlaXRpZ2UgUmljaC1UZXh0LVNh +bml0aXNpZXJ1bmcgKFN0b3JlZC1YU1MtU2NodXR6KS4NCiAgICAgICAgICAgICAgICBJbnZva2Ut +QWRtaW5SaWNodGV4dFNhbml0aXplICRkYXRlbg0KICAgICAgICAgICAgICAgICRpc3RTVSA9IFRl +c3QtSXN0U3VwZXJVc2VyDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQog +ICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9 +IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICMgTnVyIFN1cGVyVXNlciBkYXJmIGRpZSBSb2xsZW4tTGlzdGVuIHN1cGVyVXNlci9mYWNo +YXVmc2ljaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICMgdWViZXIgL2FwaS9hZG1pbiBhZW5k +ZXJuIOKAlCBzb25zdCBrb2VubnRlIGplbWFuZCBzaWNoIHNlbGJzdA0KICAgICAgICAgICAgICAg +ICAgICAgICAgIyB6dW0gU3VwZXJVc2VyIGJlZm9lcmRlcm4gdW5kIGRhbWl0IGRpZSBzZXBhcmF0 +ZW4gR3VhcmRzIGF1Zg0KICAgICAgICAgICAgICAgICAgICAgICAgIyAvYXBpL2FkbWluL3N1cGVy +dXNlciBiencuIC9hcGkvYWRtaW4vZmFjaGF1ZnNpY2h0IHVtZ2VoZW4uDQogICAgICAgICAgICAg +ICAgICAgICAgICAjIGFkbWluS2VubnVuZ2VuIGlzdCBnZW5lcmVsbCBhYmdlc2NoYWZmdCB1bmQg +d2lyZCBlbnRmZXJudC4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgUmVhZCBkZXIgYWx0ZW4g +V2VydGUgbXVzcyBJTk5FUkhBTEIgZGVzIExvY2tzIHBhc3NpZXJlbiwNCiAgICAgICAgICAgICAg +ICAgICAgICAgICMgZGFtaXQgZGllIFNVL0ZhY2hhdWZzaWNodC1MaXN0ZW4gYXRvbWFyIGVyaGFs +dGVuIGJsZWliZW4uDQogICAgICAgICAgICAgICAgICAgICAgICAkYWx0ID0gUmVhZC1Kc29uT2Jq +ZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGlzdFNV +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZlbGQgaW4gJ3N1cGVy +VXNlcicsJ2ZhY2hhdWZzaWNodCcsJ2RpcmVrdGlvbnNsZWl0dW5nJywnZnVlaHJ1bmdzc3RlbGxl +Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFsdCAtYW5kICRhbHQu +UFNPYmplY3QuUHJvcGVydGllc1skZmVsZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1skZmVsZF0pIHsgJGRhdGVu +LiRmZWxkID0gJGFsdC4kZmVsZCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBlbHNlIHsgJGRhdGVuIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZmVsZCAtTm90 +ZVByb3BlcnR5VmFsdWUgJGFsdC4kZmVsZCAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9IGVsc2VpZiAoJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJGZlbGRdKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0ZW4uUFNPYmplY3QuUHJv +cGVydGllcy5SZW1vdmUoJGZlbGQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAjIEtleS1VbmlvbjogbmljaHQgbWl0Z2VzZW5kZXRl +IFRvcC1MZXZlbC1LZXlzIGVyaGFsdGVuLg0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRd +KE1lcmdlLUFkbWluS2V5cyAkYWx0ICRkYXRlbikNCiAgICAgICAgICAgICAgICAgICAgICAgIFdy +aXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRkYXRlbiB8IE91dC1OdWxsDQogICAgICAgICAg +ICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F +cnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsg +U2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0 +dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdhZG1pbi5n +ZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug +QHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAg +ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBTdXBlci1Vc2VyLUxpc3RlOiBudXIgU3VwZXJV +c2VyIGRhcmYgU3VwZXJVc2VyIHZlcndhbHRlbg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn +L2FwaS9hZG1pbi9zdXBlcnVzZXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gU3VwZXJVc2VyIHZlcndhbHRlbicgNDAzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn +ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBAKC4uLikgZXJ6 +d2luZ3QgQXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50IChQUyA1LjEgZW50cGFja3Qgc29uc3QgenUg +RWluemVsLU9iamVrdCwNCiAgICAgICAgICAgICAgICAjIGRhbm4gd2lyZCBkaWUgTGlzdGUgaW4g +YWRtaW4uanNvbiB6dW0gT2JqZWt0IGRlZ2VuZXJpZXJ0IC0+IENsaWVudC1GZWhsZXIpLg0KICAg +ICAgICAgICAgICAgICRib2R5T2JqID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAg +ICAgICAgICAgJGRhdGVuID0gW29iamVjdFtdXUAoJGJvZHlPYmopDQogICAgICAgICAgICAgICAg JGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg ICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24n IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRt aW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7 IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBu aWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHdpcGVNc2cgPSBUZXN0 -LVdpcGVTY2h1dHogJGtleSAkZGF0ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBz -dGF0dXMgPSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -W3ZvaWRdKEJhY2t1cC1BZG1pbkpzb24gJGtleSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1ska2V5XSkgeyAkYWRtaW4uJGtleSA9ICRkYXRl -biB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAt -Tm90ZVByb3BlcnR5TmFtZSAka2V5IC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRh -ZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAk -dHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsN -CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjog -JF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlm -ICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdl -Ym5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICBXcml0ZS1Mb2dFaW50cmFnICIka2V5LmdlYWVuZGVydCIgQHt9DQogICAgICAgICAgICAgICAg -U2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAg -ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQ -YXRoIC1lcSAnL2FwaS9hZG1pbi9laW5zdGVsbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQVVQn -KSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAg -ICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYg -KC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQx -MzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZy -b20tSnNvbg0KICAgICAgICAgICAgICAgICMgUmljaC1UZXh0IHNlcnZlcnNlaXRpZyBzYW5pdGlz -aWVyZW4g4oCUIGRpZXNlciBQZmFkIHNwZWljaGVydA0KICAgICAgICAgICAgICAgICMgaW5mb3Rl -eHQvaGlsZmV0ZXh0L2JlZGllbnVuZ3N0ZXh0ZS9pbXByZXNzdW0vc3VwcG9ydGluZm8vDQogICAg -ICAgICAgICAgICAgIyBzY2hsaWVzc2luZm8sIHdhciBhYmVyIGJpc2hlciBhbSBTZXJ2ZXItU2Fu -aXRpemVyIHZvcmJlaSAoZGVyDQogICAgICAgICAgICAgICAgIyBudXIgYW0gVm9sbC1QVVQgL2Fw -aS9hZG1pbiBoaW5nKS4gU2NodXR6IGdlZ2VuIG1hbmlwdWxpZXJ0ZW4NCiAgICAgICAgICAgICAg -ICAjIENsaWVudCAvIERpcmVrdC1BUEktQ2FsbC4NCiAgICAgICAgICAgICAgICBJbnZva2UtQWRt -aW5SaWNodGV4dFNhbml0aXplICRkYXRlbg0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMg -PSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2Nr -RXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sg -PSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9 -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRrIGluICdqYWhyJywnaW5mb3Rl -eHQnLCdzdXBwb3J0aW5mbycsJ3NjaGxpZXNzaW5mbycsJ2hpbGZldGV4dCcsJ2JlZGllbnVuZ3N0 -ZXh0ZScsJ3BhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nJywnZW1haWxBdXRvRG9tYWluJywnYXZh -dGFyR3JvZXNzZScsJ2ltcHJlc3N1bScsJ3N1cHBvcnRNYWlsVGV4dCcsJ2VkaXRvclRyaWdnZXIn -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVjdC5Qcm9w -ZXJ0aWVzWyRrXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWlu -LlBTT2JqZWN0LlByb3BlcnRpZXNbJGtdKSB7ICRhZG1pbi4kayA9ICRkYXRlbi4kayB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1O -b3RlUHJvcGVydHlOYW1lICRrIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4uJGsgLUZvcmNlIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAjIGVkaXRvclRyaWdnZXIgaXN0IGVpbiBFbnVtIOKA -lCBmcmVtZGUgV2VydGUgKERpcmVrdC1BUEkpIGF1Zg0KICAgICAgICAgICAgICAgICAgICAgICAg -IyBkZW4gRGVmYXVsdCBrbGVtbWVuLCBkYW1pdCBuaWUgTXVlbGwgaW4gYWRtaW4uanNvbiBsYW5k -ZXQuDQogICAgICAgICAgICAgICAgICAgICAgICAkZXRWYWwgPSBpZiAoJGFkbWluLlBTT2JqZWN0 -LlByb3BlcnRpZXNbJ2VkaXRvclRyaWdnZXInXSkgeyBbc3RyaW5nXSRhZG1pbi5lZGl0b3JUcmln -Z2VyIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAKCdyZWNodHMn -LCdsaW5rcycsJ21pdHRlJywnZG9wcGVsJykgLW5vdGNvbnRhaW5zICRldFZhbCkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZWRp -dG9yVHJpZ2dlciddKSB7ICRhZG1pbi5lZGl0b3JUcmlnZ2VyID0gJ3JlY2h0cycgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJv -cGVydHlOYW1lICdlZGl0b3JUcmlnZ2VyJyAtTm90ZVByb3BlcnR5VmFsdWUgJ3JlY2h0cycgLUZv -cmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -IFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAg -ICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2sp -IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5z -dGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdlaW5z -dGVsbHVuZ2VuLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 -ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBj -b250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFBMQU5VTkcgPT09 -PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZycgLWFuZCAkTWV0aG9k -IC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICR0eHQgPSBSZWFkLVRleHRGaWxlICdwbGFu -dW5nLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkdHh0KSB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIDQwNCB9DQogICAgICAg -ICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICMgVmVyc2lvbnMtU3RlbXBlbCAo -bXRpbWUtVGlja3MpIGZ1ZXIgb3B0aW1pc3Rpc2NoZSBTcGVycmUgZGVzDQogICAgICAgICAgICAg -ICAgICAgICMgRXhjZWwtSW1wb3J0cy4gRGVyIENsaWVudCBzY2hpY2t0IGlobiBiZWltIFBVVCB6 -dXJ1ZWNrLg0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgJHBwViA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAg -ICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHBwVikgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5IZWFkZXJzLkFkZCgnWC1QbGFudW5nLVZlcnNp -b24nLCBbc3RyaW5nXShHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHBwVikuTGFzdFdyaXRlVGltZVV0 -Yy5UaWNrcykNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -fSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25UZXh0ICRSZXNwb25zZSAk -dHh0DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcnIC1hbmQgJE1l -dGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1p -bikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn -ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBSZWFkLU1vZGlm -eS1Xcml0ZSBhdG9tYXIgaW4gZGVyIGdsZWljaGVuIFNwZXJyZSB3aWUgZGllIEVpbnplbC0NCiAg -ICAgICAgICAgICAgICAjIHplbGwtRW5kcG9pbnRzLCBkYW1pdCBkZXIgVm9sbC1JbXBvcnQgbmlj -aHQgbWl0IHBhcmFsbGVsZW4NCiAgICAgICAgICAgICAgICAjIFplbGwtU2NocmVpYnZvcmdhZW5n -ZW4gdmVyemFobnQuIE9wdGlvbmFsZXIgVmVyc2lvbnMtQ2hlY2sNCiAgICAgICAgICAgICAgICAj -IChvcHRpbWlzdGlzY2hlIE5lYmVubGFldWZpZ2tlaXQpOiBoYXQgZGVyIENsaWVudCBlaW5lbg0K -ICAgICAgICAgICAgICAgICMgSWYtUGxhbnVuZy1WZXJzaW9uLUhlYWRlciBnZXNjaGlja3QgdW5k -IHN0aW1tdCBkZXIgbmljaHQgbWVocg0KICAgICAgICAgICAgICAgICMgbWl0IGRlbSBha3R1ZWxs -ZW4gU3RhbmQgdWViZXJlaW4sIHd1cmRlIHp3aXNjaGVuemVpdGxpY2gNCiAgICAgICAgICAgICAg -ICAjIGdlc2NocmllYmVuIC0+IDQwOSwgTklDSFRTIHdpcmQgdWViZXJzY2hyaWViZW4uDQogICAg -ICAgICAgICAgICAgJGVyd2FydGV0ZVZlcnNpb24gPSAkUmVxdWVzdC5IZWFkZXJzWydJZi1QbGFu -dW5nLVZlcnNpb24nXQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAg +LVdpcGVTY2h1dHogJ3N1cGVyVXNlcicgJGRhdGVuICRhZG1pbiAkUmVxdWVzdCAkYm9keU9iag0K +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR3aXBlTXNnKSB7IHJldHVybiBAeyBvayA9ICRm +YWxzZTsgc3RhdHVzID0gNDA5OyBtc2cgPSAkd2lwZU1zZyB9IH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICMgQWx0ZSBMaXN0ZSB2b3IgZGVtIE92ZXJ3cml0ZSBzbmFwc2hvdHRlbiDigJQgd2ly +IGJyYXVjaGVuDQogICAgICAgICAgICAgICAgICAgICAgICAjIHNpZSBuYWNoIGRlbSBMb2NrIGZ1 +ZXIgZGllIERpZmYtQmVyZWNobnVuZyAobWFpbHRvIGJlaQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgIyBTVSByZWluL3JhdXMpLg0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdFNVID0gQCgp +DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNb +J3N1cGVyVXNlciddKSB7ICRhbHRTVSA9IFtvYmplY3RbXV1AKCRhZG1pbi5zdXBlclVzZXIpIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNrdXAtQWRtaW5Kc29uICdzdXBlclVz +ZXInKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0 +aWVzWydzdXBlclVzZXInXSkgeyAkYWRtaW4uc3VwZXJVc2VyID0gJGRhdGVuIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlO +YW1lICdzdXBlclVzZXInIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8 +IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZTsg +YWx0ID0gJGFsdFNVIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0g +Y2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2st +RmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAk +bG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAg +ICAgICAgICAgICMgRGlmZiBhbHQvbmV1IG5hY2ggbndLZW5udW5nLiBTVS1SZWluL1JhdXMgbG9l +c3QgbWFpbHRvIHZpYSBDbGllbnQgYXVzDQogICAgICAgICAgICAgICAgIyAoVmVyYW50d29ydHVu +Z3MtVWViZXJnYW5nIFZvcmxhZ2UgJ3JvbGxlX3ZlcmFudHdvcnR1bmcnKS4NCiAgICAgICAgICAg +ICAgICAkbWFpbHRvRGlmZnMgPSBHZXQtUm9sbGVEaWZmcyAkbG9ja0VyZ2VibmlzLmFsdCAkZGF0 +ZW4gJ1N1cGVyVXNlcicgJGZhbHNlDQogICAgICAgICAgICAgICAgIyBhbnphaGwgbWl0Z2ViZW4g +4oCUIGRlciBMb2didWNoLUNsaWVudCBsaWVzdCBlLmFuemFobDsgb2huZSBkYXMNCiAgICAgICAg +ICAgICAgICAjIEZlbGQgYmxpZWIgZGllIERldGFpbC1TcGFsdGUgYmVpIFNVLUxpc3RlbmFlbmRl +cnVuZ2VuIGxlZXINCiAgICAgICAgICAgICAgICAjIChmYWNoYXVmc2ljaHQuZ2VhZW5kZXJ0IHVu +dGVuIG1hY2h0IGVzIGdlbmF1c28pLg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcg +J3N1cGVyVXNlci5nZWFlbmRlcnQnIEB7IGFuemFobCA9ICRkYXRlbi5Db3VudDsgZGlmZnMgPSAk +bWFpbHRvRGlmZnMuQ291bnQgfQ0KICAgICAgICAgICAgICAgICRyZXNwID0gQHsgc3RhdHVzID0g +J2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgaWYgKCRtYWlsdG9EaWZmcy5Db3VudCAt +Z3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAjIFBTLTUuMS1VbndyYXAtU2NodXR6OiBAKCR4 +KSBlcnp3aW5ndCBBcnJheSBhdWNoIGJlaSAxIEVsZW1lbnQuDQogICAgICAgICAgICAgICAgICAg +ICRyZXNwWydfYnJhdWNodF9tYWlsdG8nXSA9IFtvcmRlcmVkXUB7IHRyaWdnZXIgPSAncm9sbGVf +dmVyYW50d29ydHVuZyc7IGRpZmZzID0gW29iamVjdFtdXUAoJG1haWx0b0RpZmZzKSB9DQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug +JHJlc3ANCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAg +ICAgICAjIEZhY2hhdWZzaWNodC1MaXN0ZTogbnVyIFN1cGVyVXNlciBkYXJmIEZhY2hhdWZzaWNo +dCB2ZXJ3YWx0ZW4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZmFjaGF1 +ZnNpY2h0JyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1u +b3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVy +VXNlciBkdWVyZmVuIEZhY2hhdWZzaWNodCB2ZXJ3YWx0ZW4nIDQwMzsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3Mn +IDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5T2JqID0gJGJvZHkgfCBDb252 +ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0gW29iamVjdFtdXUAoJGJvZHlP +YmopDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAg +ICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRo +RmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9 +IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAw +OyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgJHdpcGVNc2cgPSBUZXN0LVdpcGVTY2h1dHogJ2ZhY2hhdWZzaWNodCcgJGRhdGVuICRh +ZG1pbiAkUmVxdWVzdCAkYm9keU9iag0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR3aXBl +TXNnKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNDA5OyBtc2cgPSAkd2lwZU1z +ZyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRhbHRGQSA9IEAoKQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydmYWNoYXVmc2ljaHQn +XSkgeyAkYWx0RkEgPSBbb2JqZWN0W11dQCgkYWRtaW4uZmFjaGF1ZnNpY2h0KSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICBbdm9pZF0oQmFja3VwLUFkbWluSnNvbiAnZmFjaGF1ZnNpY2h0JykN +CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1sn +ZmFjaGF1ZnNpY2h0J10pIHsgJGFkbWluLmZhY2hhdWZzaWNodCA9ICRkYXRlbiB9DQogICAgICAg +ICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5 +TmFtZSAnZmFjaGF1ZnNpY2h0JyAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQog +ICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRt +aW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRy +dWU7IGFsdCA9ICRhbHRGQSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJM +b2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAjIEZhY2hhdWZzaWNodC1EaWZmOiB0cmVubnQgbWFpbHRvLXd1ZXJkaWdl +IFZlcmFudHdvcnR1bmdzLQ0KICAgICAgICAgICAgICAgICMgVWViZXJnYWVuZ2UgKEdlc2FtdHZl +cmFudHdvcnRsaWNoIHJlaW4vcmF1cykgdm9tIHJlc3RsaWNoZW4NCiAgICAgICAgICAgICAgICAj +IFJvbGxlbi1VcGRhdGVzIChGQSBoaW56dS9yYXVzIG9obmUgR2VzYW10LCBvZGVyIFNlaGVuLUZs +YWctDQogICAgICAgICAgICAgICAgIyBXZWNoc2VsKS4gRXJzdGUgZmxpZcOfZW4gaW4gZGVuIG1h +aWx0by1UcmlnZ2VyLCBkZXIgUmVzdCB3aXJkDQogICAgICAgICAgICAgICAgIyB6dSBJbi1BcHAt +SGlud2Vpc2VuLg0KICAgICAgICAgICAgICAgICRmYUF1c3dlcnR1bmcgPSBHZXQtRmFjaGF1ZnNp +Y2h0RGlmZnMgJGxvY2tFcmdlYm5pcy5hbHQgJGRhdGVuDQogICAgICAgICAgICAgICAgV3JpdGUt +TG9nRWludHJhZyAnZmFjaGF1ZnNpY2h0LmdlYWVuZGVydCcgQHsgYW56YWhsID0gJGRhdGVuLkNv +dW50OyBtYWlsdG8gPSAkZmFBdXN3ZXJ0dW5nLm1haWx0b0RpZmZzLkNvdW50OyBoaW53ZWlzZSA9 +ICRmYUF1c3dlcnR1bmcuaGlud2Vpc0RpZmZzLkNvdW50IH0NCiAgICAgICAgICAgICAgICBmb3Jl +YWNoICgkaCBpbiAkZmFBdXN3ZXJ0dW5nLmhpbndlaXNEaWZmcykgew0KICAgICAgICAgICAgICAg +ICAgICBOZXctSGlud2VpcyAncm9sbGVfZ2VhZW5kZXJ0JyAkaCAoR2V0LUFrdHVlbGxlckJlbnV0 +emVyKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRyZXNw +ID0gQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgaWYgKCRmYUF1 +c3dlcnR1bmcubWFpbHRvRGlmZnMuQ291bnQgLWd0IDApIHsNCiAgICAgICAgICAgICAgICAgICAg +IyBQUy01LjEtVW53cmFwLVNjaHV0ejogQCgkeCkgZXJ6d2luZ3QgQXJyYXkgYXVjaCBiZWkgMSBF +bGVtZW50Lg0KICAgICAgICAgICAgICAgICAgICAkcmVzcFsnX2JyYXVjaHRfbWFpbHRvJ10gPSBb +b3JkZXJlZF1AeyB0cmlnZ2VyID0gJ3JvbGxlX3ZlcmFudHdvcnR1bmcnOyBkaWZmcyA9IFtvYmpl +Y3RbXV1AKCRmYUF1c3dlcnR1bmcubWFpbHRvRGlmZnMpIH0NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkcmVzcA0KICAgICAgICAg +ICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgRGlyZWt0aW9u +c2xlaXR1bmcgKyBGdWVocnVuZ3NzdGVsbGUgKGdsZWljaGVzIFNjaGVtYSB3aWUNCiAgICAgICAg +ICAgICMgRmFjaGF1ZnNpY2h0LCBudXIgc2VwYXJhdGUgTGlzdGVuKS4gQmVpZGUgUm91dGVuIHRl +aWxlbiBkaWUNCiAgICAgICAgICAgICMgZ2xlaWNoZSBMb2dpazogU1Utb25seSBQVVQsIEJhY2t1 +cCwgU2NocmVpYmVuLCBEaWZmcyB6dQ0KICAgICAgICAgICAgIyBJbi1BcHAtSGlud2Vpc2VuIHVt +c2V0emVuLg0KICAgICAgICAgICAgaWYgKCgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZGlyZWt0aW9u +c2xlaXR1bmcnIC1vciAkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZnVlaHJ1bmdzc3RlbGxlJykgLWFu +ZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlz +dFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZl +biBSb2xsZW4gdmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkZmVs +ZE5hbWUgPSBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2RpcmVrdGlvbnNsZWl0dW5nJykgeyAn +ZGlyZWt0aW9uc2xlaXR1bmcnIH0gZWxzZSB7ICdmdWVocnVuZ3NzdGVsbGUnIH0NCiAgICAgICAg +ICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgt +bm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keU9iaiA9ICRib2R5IHwgQ29udmVydEZy +b20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXRlbiA9IFtvYmplY3RbXV1AKCRib2R5T2JqKQ0K +ICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRy +eSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVM +b2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFk +LUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNn +ID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICRhbHQgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3Qu +UHJvcGVydGllc1skZmVsZE5hbWVdKSB7ICRhbHQgPSBbb2JqZWN0W11dQCgkYWRtaW4uJGZlbGRO +YW1lKSB9DQogICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0oQmFja3VwLUFkbWluSnNvbiAk +ZmVsZE5hbWUpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJGZlbGROYW1lXSkgeyAkYWRtaW4uJGZlbGROYW1lID0gJGRhdGVuIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVy +dHlOYW1lICRmZWxkTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAg +ICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4g +fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWU7 +IGFsdCA9ICRhbHQgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBj +YXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1G +ZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRs +b2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAoJGZlbGROYW1lICsgJy5nZWFlbmRlcnQnKSBAeyBh +bnphaGwgPSAkZGF0ZW4uQ291bnQgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk +UmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBCZXplaWNobnVuZ2VuOiBPYmpl +a3QgKE1hcCBrZXktPmxhYmVsKS4gTGVlcmVzIE9iamVrdCA9IFJlc2V0Lg0KICAgICAgICAgICAg +aWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9iZXplaWNobnVuZ2VuJyAtYW5kICRNZXRob2QgLWVx +ICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNl +bmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAg +ICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jv +c3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29u +dmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAg ICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJ -bnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkZXJ3YXJ0ZXRlVmVyc2lvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICRwcFYgPSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkYWt0dWVsbGVWZXJzaW9uID0gJycNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcHBWKSB7ICRha3R1ZWxsZVZlcnNp -b24gPSBbc3RyaW5nXShHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHBwVikuTGFzdFdyaXRlVGltZVV0 -Yy5UaWNrcyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRha3R1ZWxsZVZlcnNp -b24gLW5lICRlcndhcnRldGVWZXJzaW9uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIHJldHVybiBAeyB0eXAgPSAna29uZmxpa3QnOyBha3R1ZWxsID0gJGFrdHVlbGxlVmVyc2lv -biB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtVGV4dEZpbGUgJ3BsYW51bmcuanNv -bicgJGJvZHkgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5 -cCA9ICdvaycgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRj +bnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0 +YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snYmV6ZWljaG51 +bmdlbiddKSB7ICRhZG1pbi5iZXplaWNobnVuZ2VuID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdi +ZXplaWNobnVuZ2VuJyAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBP +dXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0K +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAg +ICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAz +OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +bG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNn +ICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUt +TG9nRWludHJhZyAnYmV6ZWljaG51bmdlbi5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAg +IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQog +ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBT +dGF0aXN0aWstQmF1a2FzdGVuIChzZWxic3RnZWJhdXRlIEthY2hlbG4pICsgU3VwZXJVc2VyLUxh +eW91dC1SYXN0ZXIuDQogICAgICAgICAgICAjIEdhdGUgYmV3dXNzdCBTVSBPREVSIEdlc2FtdHZl +cmFudHdvcnRsaWNoIChuaWNodCBUZXN0LUlzdEFkbWluKSDigJQgZGVyDQogICAgICAgICAgICAj +IEJ1aWxkZXIgbGVidCBpbSBTdGF0aXN0aWstVGFiIHVuZCBtdXNzIGF1Y2ggZnVlciBHZXNhbXR2 +ZXJhbnR3b3J0bGljaGUNCiAgICAgICAgICAgICMgb2huZSBhZG1pbmlzdHJhdGlvbi1adWdhbmcg +c3BlaWNoZXJiYXIgc2Vpbi4gUGFydGlhbC1NZXJnZSBudXIgZGVyDQogICAgICAgICAgICAjIGJl +aWRlbiBiZWthbm50ZW4gS2V5czsgYmVpZGUgYWxzIFtvYmplY3RbXV0gendpbmdlbiAoUFMtNS4x +LVVud3JhcCkuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3N0YXRpc3Rp +aycgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJl +Y2h0ZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgoVGVzdC1Jc3RBZG1pbikgLW9yICRyLmlz +dEdlc2FtdHZlcmFudHdvcnRsaWNoKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9y +ICRSZXNwb25zZSAnTnVyIEFkbWlucyB1bmQgR2VzYW10dmVyYW50d29ydGxpY2hlIGR1ZXJmZW4g +U3RhdGlzdGlrLUthY2hlbG4gYWVuZGVybicgNDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAg +ICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1 +IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8 +IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkaGF0S2FjaGVsbiA9ICgkbnVsbCAt +bmUgJGRhdGVuIC1hbmQgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRpc3Rpa0thY2hl +bG4nXSkNCiAgICAgICAgICAgICAgICAkaGF0TGF5b3V0ICA9ICgkbnVsbCAtbmUgJGRhdGVuIC1h +bmQgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRpc3Rpa0xheW91dCddKQ0KICAgICAg +ICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQog +ICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdh +ZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25P +YmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx +ICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2Fk +bWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +aGF0S2FjaGVsbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRrID0gW29iamVjdFtd +XUAoJGRhdGVuLnN0YXRpc3Rpa0thY2hlbG4pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGF0aXN0aWtLYWNoZWxuJ10pIHsgJGFk +bWluLnN0YXRpc3Rpa0thY2hlbG4gPSAkayB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N0YXRpc3Rpa0th +Y2hlbG4nIC1Ob3RlUHJvcGVydHlWYWx1ZSAkayAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoYXRMYXlvdXQpIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAkbCA9IFtvYmplY3RbXV1AKCRkYXRlbi5zdGF0aXN0aWtM +YXlvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Q +cm9wZXJ0aWVzWydzdGF0aXN0aWtMYXlvdXQnXSkgeyAkYWRtaW4uc3RhdGlzdGlrTGF5b3V0ID0g +JGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVt +YmVyIC1Ob3RlUHJvcGVydHlOYW1lICdzdGF0aXN0aWtMYXlvdXQnIC1Ob3RlUHJvcGVydHlWYWx1 +ZSAkbCAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51bGwN +CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAg +ICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGlu +dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdl +Ym5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0Vy +Z2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRy +YWcgJ3N0YXRpc3Rpay5jb25maWcuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgU3RhbmRh +cmRyZWNodGUgKHJlZ3VsYWVyZSBVc2VyKTogZ2VnZW5zZWl0aWdlIFBsYW51bmcgamUgRGllbnN0 +Z3J1cHBlLw0KICAgICAgICAgICAgIyBTdGFuZG9ydC4gU1Utb25seS4gV2lyZCBpbiBHZXQtUmVj +aHRlIGFkZGl0aXYgaW4gZWRpdGllcmVuIGVpbmdld29iZW4uDQogICAgICAgICAgICBpZiAoJFBh +dGggLWVxICcvYXBpL2FkbWluL3N0YW5kYXJkcmVjaHRlJyAtYW5kICRNZXRob2QgLWVxICdQVVQn +KSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIFN0YW5kYXJkcmVjaHRlIGFl +bmRlcm4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5 +ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRn +ZyA9IEAoKTsgaWYgKCRkYXRlbiAtYW5kICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWdl +bnNlaXRpZ0dydXBwZW4nXSkgICB7ICRnZyA9IFtzdHJpbmdbXV1AKCRkYXRlbi5nZWdlbnNlaXRp +Z0dydXBwZW4gICB8IEZvckVhY2gtT2JqZWN0IHsgW3N0cmluZ10kXyB9KSB9DQogICAgICAgICAg +ICAgICAgJGdzID0gQCgpOyBpZiAoJGRhdGVuIC1hbmQgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ2dlZ2Vuc2VpdGlnU3RhbmRvcnRlJ10pIHsgJGdzID0gW3N0cmluZ1tdXUAoJGRhdGVuLmdl +Z2Vuc2VpdGlnU3RhbmRvcnRlIHwgRm9yRWFjaC1PYmplY3QgeyBbc3RyaW5nXSRfIH0pIH0NCiAg +ICAgICAgICAgICAgICAkc3IgPSBAeyBnZWdlbnNlaXRpZ0dydXBwZW4gPSAkZ2c7IGdlZ2Vuc2Vp +dGlnU3RhbmRvcnRlID0gJGdzIH0NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51 +bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2Vi +bmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZh +bHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQog +ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0 +YW5kYXJkUmVjaHRlJ10pIHsgJGFkbWluLnN0YW5kYXJkUmVjaHRlID0gJHNyIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlO +YW1lICdzdGFuZGFyZFJlY2h0ZScgLU5vdGVQcm9wZXJ0eVZhbHVlICRzciAtRm9yY2UgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWlu +IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVl +IH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAg +ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIp +IDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1u +b3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2Vibmlz +Lm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdy +aXRlLUxvZ0VpbnRyYWcgJ3N0YW5kYXJkcmVjaHRlLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAg +ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQn +IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg +ICAjIEUtTWFpbC1Wb3JsYWdlbjogT2JqZWt0IChuaWNodCBBcnJheSkg4oCUIGVpZ2VuZXIgSGFu +ZGxlci4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZW1haWx2b3JsYWdl +bicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChU +ZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRl +JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVx +dWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk +ZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAjIFJpY2gt +VGV4dC1Cb2R5IGplIFZvcmxhZ2Ugc2VydmVyc2VpdGlnIGJlcmVpbmlnZW4gKFN0b3JlZC1YU1Mp +Lg0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJGRhdGVuKSB7DQogICAgICAgICAgICAg +ICAgICAgIGZvcmVhY2ggKCRwIGluICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAkdiA9ICRwLlZhbHVlDQogICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJG51bGwgLW5lICR2IC1hbmQgJHYuUFNPYmplY3QuUHJvcGVydGllc1sndGV4dCddIC1h +bmQgKCR2LnRleHQgLWlzIFtzdHJpbmddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICR2LnRleHQgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICR2LnRleHQNCiAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkg +ew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9j +ayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1K +c29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxs +IC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9 +ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VtYWlsVm9ybGFnZW4nXSkgeyAkYWRtaW4u +ZW1haWxWb3JsYWdlbiA9ICRkYXRlbiB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsg +JGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZW1haWxWb3JsYWdlbicgLU5v +dGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +V3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAg +ICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykg +eyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0 +YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2VtYWls +dm9ybGFnZW4uZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3Qg +JFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNv +bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgRS1NYWlsLVRyaWdnZXItS29u +ZmlnIChwcm8gVHJpZ2dlcjogYWt0aXYgKyBFbXBmYWVuZ2VyLVRhZ3MpIOKAlA0KICAgICAgICAg +ICAgIyBhdXNzY2hsaWVzc2xpY2ggU3RldWVydW5nIGZ1ZXIgZGVuIEZyb250ZW5kLW1haWx0bzot +RGlzcGF0Y2hlci4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZW1haWx0 +cmlnZ2VyJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1u +b3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1S +ZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5 +ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRs +b2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAg +ICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWlu +Lmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyBy +ZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmlj +aHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmpl +Y3QuUHJvcGVydGllc1snZW1haWxUcmlnZ2VyJ10pIHsgJGFkbWluLmVtYWlsVHJpZ2dlciA9ICRk +YXRlbiB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJl +ciAtTm90ZVByb3BlcnR5TmFtZSAnZW1haWxUcmlnZ2VyJyAtTm90ZVByb3BlcnR5VmFsdWUgJGRh +dGVuIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdh +ZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0 +dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgi +TG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgJGFueiA9IGlmICgkZGF0ZW4pIHsgKCRkYXRlbi5QU09iamVjdC5Qcm9w +ZXJ0aWVzIHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IH0gZWxzZSB7IDAgfQ0KICAgICAgICAgICAg +ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2VtYWlsdHJpZ2dlci5nZWFlbmRlcnQnIEB7IGFuemFobF90 +cmlnZ2VyID0gJGFueiB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z +ZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K +ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkYWRtaW5LZXlzID0gQHsNCiAgICAgICAgICAg +ICAgICAnL2FwaS9hZG1pbi9mZWllcnRhZ2UnICAgICAgPSAnZmVpZXJ0YWdlJw0KICAgICAgICAg +ICAgICAgICcvYXBpL2FkbWluL2ZlcmllbicgICAgICAgICA9ICdmZXJpZW4nDQogICAgICAgICAg +ICAgICAgJy9hcGkvYWRtaW4vc29uZGVydGVybWluZScgID0gJ3NvbmRlcnRlcm1pbmUnDQogICAg +ICAgICAgICAgICAgJy9hcGkvYWRtaW4vc3RhbmRvcnRlJyAgICAgID0gJ3N0YW5kb3J0ZScNCiAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkYWRtaW5LZXlzLkNvbnRhaW5zS2V5KCRQYXRo +KSAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl +c3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUn +IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1 +ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRr +ZXkgPSAkYWRtaW5LZXlzWyRQYXRoXQ0KICAgICAgICAgICAgICAgICMgQCguLi4pIGVyendpbmd0 +IEFycmF5IGF1Y2ggYmVpIDEgRWxlbWVudCAoUFMgNS4xIGVudHBhY2t0IHNvbnN0KS4NCiAgICAg +ICAgICAgICAgICAkYm9keU9iaiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAg +ICAgICAgICRkYXRlbiA9IFtvYmplY3RbXV1AKCRib2R5T2JqKQ0KICAgICAgICAgICAgICAgICMg +c29uZGVydGVybWluZSB0cmFnZW4gUmljaC1UZXh0ICh0ZXh0KSDigJQgc2VydmVyc2VpdGlnIGJl +cmVpbmlnZW4uDQogICAgICAgICAgICAgICAgaWYgKCRrZXkgLWVxICdzb25kZXJ0ZXJtaW5lJykg +ew0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZSBpbiAkZGF0ZW4pIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJGUgLWFuZCAkZS5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyd0ZXh0J10gLWFuZCAoJGUudGV4dCAtaXMgW3N0cmluZ10pKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJGUudGV4dCA9IENvbnZlcnRUby1TYWZlUmljaEh0bWwgJGUudGV4dA0K +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAg +ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZv +a2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAk +YWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1 +cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICR3aXBlTXNnID0gVGVzdC1XaXBlU2NodXR6ICRrZXkgJGRhdGVuICRhZG1p +biAkUmVxdWVzdCAkYm9keU9iag0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR3aXBlTXNn +KSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNDA5OyBtc2cgPSAkd2lwZU1zZyB9 +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNrdXAtQWRtaW5Kc29uICRrZXkp +DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNb +JGtleV0pIHsgJGFkbWluLiRrZXkgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGtleSAtTm90ZVBy +b3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0 +ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAg +ICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy +b3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNl +bmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVz +OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAiJGtleS5nZWFl +bmRlcnQiIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg +c3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZWluc3RlbGx1 +bmdlbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90 +IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVj +aHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAk +UmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJl +c3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAjIFJp +Y2gtVGV4dCBzZXJ2ZXJzZWl0aWcgc2FuaXRpc2llcmVuIOKAlCBkaWVzZXIgUGZhZCBzcGVpY2hl +cnQNCiAgICAgICAgICAgICAgICAjIGluZm90ZXh0L2hpbGZldGV4dC9iZWRpZW51bmdzdGV4dGUv +aW1wcmVzc3VtL3N1cHBvcnRpbmZvLw0KICAgICAgICAgICAgICAgICMgc2NobGllc3NpbmZvLCB3 +YXIgYWJlciBiaXNoZXIgYW0gU2VydmVyLVNhbml0aXplciB2b3JiZWkgKGRlcg0KICAgICAgICAg +ICAgICAgICMgbnVyIGFtIFZvbGwtUFVUIC9hcGkvYWRtaW4gaGluZykuIFNjaHV0eiBnZWdlbiBt +YW5pcHVsaWVydGVuDQogICAgICAgICAgICAgICAgIyBDbGllbnQgLyBEaXJla3QtQVBJLUNhbGwu +DQogICAgICAgICAgICAgICAgSW52b2tlLUFkbWluUmljaHRleHRTYW5pdGl6ZSAkZGF0ZW4NCiAg +ICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkg +ew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9j +ayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1K +c29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxs +IC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9 +ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBm +b3JlYWNoICgkayBpbiAnamFocicsJ2luZm90ZXh0Jywnc3VwcG9ydGluZm8nLCdzY2hsaWVzc2lu +Zm8nLCdoaWxmZXRleHQnLCdiZWRpZW51bmdzdGV4dGUnLCdwYXBpZXJrb3JiVGFnZUF1ZmJld2Fo +cnVuZycsJ2VtYWlsQXV0b0RvbWFpbicsJ2F2YXRhckdyb2Vzc2UnLCdpbXByZXNzdW0nLCdzdXBw +b3J0TWFpbFRleHQnLCdlZGl0b3JUcmlnZ2VyJykgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1ska10pIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRrXSkgeyAk +YWRtaW4uJGsgPSAkZGF0ZW4uJGsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl +bHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkayAtTm90ZVByb3Bl +cnR5VmFsdWUgJGRhdGVuLiRrIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBl +ZGl0b3JUcmlnZ2VyIGlzdCBlaW4gRW51bSDigJQgZnJlbWRlIFdlcnRlIChEaXJla3QtQVBJKSBh +dWYNCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVuIERlZmF1bHQga2xlbW1lbiwgZGFtaXQg +bmllIE11ZWxsIGluIGFkbWluLmpzb24gbGFuZGV0Lg0KICAgICAgICAgICAgICAgICAgICAgICAg +JGV0VmFsID0gaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydlZGl0b3JUcmlnZ2VyJ10p +IHsgW3N0cmluZ10kYWRtaW4uZWRpdG9yVHJpZ2dlciB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg +ICAgICAgICAgICAgICBpZiAoQCgncmVjaHRzJywnbGlua3MnLCdtaXR0ZScsJ2RvcHBlbCcpIC1u +b3Rjb250YWlucyAkZXRWYWwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFk +bWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VkaXRvclRyaWdnZXInXSkgeyAkYWRtaW4uZWRpdG9y +VHJpZ2dlciA9ICdyZWNodHMnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsg +JGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZWRpdG9yVHJpZ2dlcicgLU5v +dGVQcm9wZXJ0eVZhbHVlICdyZWNodHMnIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29u +JyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9r +ID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRj aCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhs ZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICBpZiAoJGxvY2tFcmdlYm5pcy50eXAgLWVxICdrb25mbGlrdCcpIHsNCiAgICAgICAgICAgICAg -ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICAg -ICAgZmVobGVyICAgICAgICAgID0gJ2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAgICAgICAgICAg -bWVsZHVuZyAgICAgICAgID0gJ0RpZSBQbGFudW5nIHd1cmRlIHp3aXNjaGVuemVpdGxpY2ggdm9u -IGVpbmVyIGFuZGVyZW4gUGVyc29uIGdlYWVuZGVydC4nDQogICAgICAgICAgICAgICAgICAgICAg -ICBha3R1ZWxsZVZlcnNpb24gPSAkbG9ja0VyZ2VibmlzLmFrdHVlbGwNCiAgICAgICAgICAgICAg -ICAgICAgfSA0MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg -PSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3plbGxlJyAtYW5kICRN +ICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2Nr +RXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgV3JpdGUtTG9nRWludHJhZyAnZWluc3RlbGx1bmdlbi5nZWFlbmRlcnQnIEB7fQ0KICAg +ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3Bl +aWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAg +ICAgICAgICAgIyA9PT09PSBQTEFOVU5HID09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVx +ICcvYXBpL3BsYW51bmcnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAg +ICAkdHh0ID0gUmVhZC1UZXh0RmlsZSAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgIGlm +ICgkbnVsbCAtZXEgJHR4dCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAncGxhbnVuZy5qc29uIG5p +Y2h0IGdlZnVuZGVuJyA0MDQgfQ0KICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAg +ICAgICAgICAjIFZlcnNpb25zLVN0ZW1wZWwgKG10aW1lLVRpY2tzKSBmdWVyIG9wdGltaXN0aXNj +aGUgU3BlcnJlIGRlcw0KICAgICAgICAgICAgICAgICAgICAjIEV4Y2VsLUltcG9ydHMuIERlciBD +bGllbnQgc2NoaWNrdCBpaG4gYmVpbSBQVVQgenVydWVjay4NCiAgICAgICAgICAgICAgICAgICAg +dHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwcFYgPSBKb2luLVBhdGggJERhdGFEaXIg +J3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxp +dGVyYWxQYXRoICRwcFYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2Uu +SGVhZGVycy5BZGQoJ1gtUGxhbnVuZy1WZXJzaW9uJywgW3N0cmluZ10oR2V0LUl0ZW0gLUxpdGVy +YWxQYXRoICRwcFYpLkxhc3RXcml0ZVRpbWVVdGMuVGlja3MpDQogICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICAg +ICAgU2VuZC1Kc29uVGV4dCAkUmVzcG9uc2UgJHR4dA0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRo +IC1lcSAnL2FwaS9wbGFudW5nJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdL +ZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5 +ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsg +U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICMgUmVhZC1Nb2RpZnktV3JpdGUgYXRvbWFyIGluIGRlciBnbGVpY2hl +biBTcGVycmUgd2llIGRpZSBFaW56ZWwtDQogICAgICAgICAgICAgICAgIyB6ZWxsLUVuZHBvaW50 +cywgZGFtaXQgZGVyIFZvbGwtSW1wb3J0IG5pY2h0IG1pdCBwYXJhbGxlbGVuDQogICAgICAgICAg +ICAgICAgIyBaZWxsLVNjaHJlaWJ2b3JnYWVuZ2VuIHZlcnphaG50LiBPcHRpb25hbGVyIFZlcnNp +b25zLUNoZWNrDQogICAgICAgICAgICAgICAgIyAob3B0aW1pc3Rpc2NoZSBOZWJlbmxhZXVmaWdr +ZWl0KTogaGF0IGRlciBDbGllbnQgZWluZW4NCiAgICAgICAgICAgICAgICAjIElmLVBsYW51bmct +VmVyc2lvbi1IZWFkZXIgZ2VzY2hpY2t0IHVuZCBzdGltbXQgZGVyIG5pY2h0IG1laHINCiAgICAg +ICAgICAgICAgICAjIG1pdCBkZW0gYWt0dWVsbGVuIFN0YW5kIHVlYmVyZWluLCB3dXJkZSB6d2lz +Y2hlbnplaXRsaWNoDQogICAgICAgICAgICAgICAgIyBnZXNjaHJpZWJlbiAtPiA0MDksIE5JQ0hU +UyB3aXJkIHVlYmVyc2NocmllYmVuLg0KICAgICAgICAgICAgICAgICRlcndhcnRldGVWZXJzaW9u +ID0gJFJlcXVlc3QuSGVhZGVyc1snSWYtUGxhbnVuZy1WZXJzaW9uJ10NCiAgICAgICAgICAgICAg +ICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAg +ICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5q +c29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGVyd2FydGV0ZVZlcnNpb24pIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHBWID0gSm9pbi1QYXRoICREYXRhRGlyICdw +bGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFrdHVlbGxlVmVyc2lv +biA9ICcnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJh +bFBhdGggJHBwVikgeyAkYWt0dWVsbGVWZXJzaW9uID0gW3N0cmluZ10oR2V0LUl0ZW0gLUxpdGVy +YWxQYXRoICRwcFYpLkxhc3RXcml0ZVRpbWVVdGMuVGlja3MgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkYWt0dWVsbGVWZXJzaW9uIC1uZSAkZXJ3YXJ0ZXRlVmVyc2lvbikgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ2tvbmZsaWt0 +JzsgYWt0dWVsbCA9ICRha3R1ZWxsZVZlcnNpb24gfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IFdyaXRlLVRleHRGaWxlICdwbGFudW5nLmpzb24nICRib2R5IHwgT3V0LU51bGwNCiAgICAgICAg +ICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAnb2snIH0NCiAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRsb2NrRXJnZWJuaXMudHlwIC1lcSAn +a29uZmxpa3QnKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u +c2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxlciAgICAgICAgICA9ICdrb25mbGlr +dCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICAgICAgICA9ICdEaWUgUGxhbnVu +ZyB3dXJkZSB6d2lzY2hlbnplaXRsaWNoIHZvbiBlaW5lciBhbmRlcmVuIFBlcnNvbiBnZWFlbmRl +cnQuJw0KICAgICAgICAgICAgICAgICAgICAgICAgYWt0dWVsbGVWZXJzaW9uID0gJGxvY2tFcmdl +Ym5pcy5ha3R1ZWxsDQogICAgICAgICAgICAgICAgICAgIH0gNDA5DQogICAgICAgICAgICAgICAg +ICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv +bk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvcGxhbnVuZy96ZWxsZScgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAg +ICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgt +bm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNv +bg0KICAgICAgICAgICAgICAgICRkYXR1bSA9ICRhLmRhdHVtDQogICAgICAgICAgICAgICAgJHBl +cnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAgICAgICR3ZXJ0ID0gaWYg +KCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3dlcnQnXSkgeyAkYS53ZXJ0IH0gZWxzZSB7ICcnIH0N +CiAgICAgICAgICAgICAgICAjIE9wdGltaXN0aWMtQ29uY3VycmVuY3k6IFdlbm4gZGVyIENsaWVu +dCBzZWluZW4genVsZXR6dCBnZXNlaGVuZW4NCiAgICAgICAgICAgICAgICAjIFdlcnQgbWl0bGll +ZmVydCwgcHJ1ZWZlbiB3aXIgdm9yIGRlbSBTY2hyZWliZW4gb2IgZGVyIFNlcnZlcg0KICAgICAg +ICAgICAgICAgICMgbm9jaCBkZW5zZWxiZW4gU3RhbmQgaGF0LiBNaXNtYXRjaCAtPiA0MDkgbWl0 +IGFrdHVlbGxlcldlcnQuDQogICAgICAgICAgICAgICAgJGhhdEVyd2FydGV0ID0gJGEuUFNPYmpl +Y3QuUHJvcGVydGllc1snZXJ3YXJ0ZXRlckFsdGVyV2VydCddDQogICAgICAgICAgICAgICAgJGVy +d2FydGV0ID0gaWYgKCRoYXRFcndhcnRldCkgeyBbc3RyaW5nXSRhLmVyd2FydGV0ZXJBbHRlcldl +cnQgfSBlbHNlIHsgJG51bGwgfQ0KDQogICAgICAgICAgICAgICAgIyBFZGl0LVJlY2h0IGdlZ2Vu +IGFrdHVlbGxlbiBTdGFuZCBwcnVlZmVuIChub2NoIG9obmUgTG9jayDigJQgbnVyIExvb2t1cCkN +CiAgICAgICAgICAgICAgICAkcGxhbnVuZ0NoZWNrID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5n +Lmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZ0NoZWNrKSB7IFNl +bmQtRXJyb3IgJFJlc3BvbnNlICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgICR6aWVsUGVyc29uID0gJG51bGwNCiAgICAgICAgICAg +ICAgICBpZiAoJHBsYW51bmdDaGVjay5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICBm +b3JlYWNoICgkcHAgaW4gQCgkcGxhbnVuZ0NoZWNrLnBlcnNvbmVuKSkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKFtzdHJpbmddJHBwLmlkIC1lcSAkcGVyc29uSWQpIHsgJHppZWxQZXJz +b24gPSAkcHA7IGJyZWFrIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmWmVsbGVFZGl0aWVyZW4gJHpp +ZWxQZXJzb24pKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdL +ZWluZSBCZXJlY2h0aWd1bmcgZnVlciBkaWVzZSBaZWxsZScgNDAzOyBjb250aW51ZQ0KICAgICAg +ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICMgUmVhZC1Nb2RpZnktV3JpdGUgYXRvbWFy +IGluIExvY2s6DQogICAgICAgICAgICAgICAgJGNsaWVudFF1aXR0aWVydCA9ICgkYS5QU09iamVj +dC5Qcm9wZXJ0aWVzWyd1bnRlcmJlc2V0enVuZ1NjaGljaHQnXSAtYW5kICRhLnVudGVyYmVzZXR6 +dW5nU2NoaWNodCkNCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAg +ICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52 +b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZykgeyByZXR1cm4gQHsgdHlwID0gJ2Vy +cm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgfSB9 +DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5QU09iamVjdC5Qcm9w +ZXJ0aWVzWydlaW50cmFlZ2UnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFu +dW5nIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZWludHJhZWdlJyAtTm90ZVByb3Bl +cnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcuZWludHJh +ZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRhdHVtXSkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRwbGFudW5nLmVpbnRyYWVnZSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUg +JGRhdHVtIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkgLUZvcmNlDQog +ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZXIg +PSAnJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0 +dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7ICRhbHRlciA9IFtzdHJpbmddJHBs +YW51bmcuZWludHJhZWdlLiRkYXR1bS4kcGVyc29uSWQgfQ0KDQogICAgICAgICAgICAgICAgICAg +ICAgICAjIE9wdGltaXN0aWMtQ29uY3VycmVuY3ktQ2hlY2sNCiAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkaGF0RXJ3YXJ0ZXQgLWFuZCAkZXJ3YXJ0ZXQgLW5lICRhbHRlcikgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAna29uZmxpa3QnOyBha3R1ZWxs +ID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAg +ICAgICAgICAgIyBGdWVocnVuZ3MtVW50ZXJiZXNldHp1bmcgKFZlcmJpbmRsaWNoa2VpdHNmZW5z +dGVyKSAtIGdsZWljaGVzIFByaW56aXAgd2llIHZvcmhlciwNCiAgICAgICAgICAgICAgICAgICAg +ICAgICMgamV0enQgYWJlciBnZWdlbiBkZW4gZ2Vsb2NrdGVuIFN0YW5kLg0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKC1ub3QgJGNsaWVudFF1aXR0aWVydCAtYW5kIChUZXN0LUluVmVyYmlu +ZGxpY2hrZWl0ICRkYXR1bSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZVNj +aGljaHQgPSBHZXQtRnVlaHJ1bmdzU2NoaWNodExldHRlciAkYWx0ZXINCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkbmV1ZVNjaGljaHQgPSBHZXQtRnVlaHJ1bmdzU2NoaWNodExldHRlciAk +d2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWx0ZVNjaGljaHQgLWFuZCAk +YWx0ZVNjaGljaHQgLW5lICRuZXVlU2NoaWNodCkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkYWt0dWVsbENvdW50ID0gR2V0LUZ1ZWhydW5nc0NvdW50ICRwbGFudW5nICRkYXR1 +bSAkYWx0ZVNjaGljaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkYWt0 +dWVsbENvdW50IC0gMSkgLWx0IDIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIHJldHVybiBAeyB0eXAgPSAndW50ZXJiZXNldHp1bmcnOyBzY2hpY2h0ID0gJGFsdGVTY2hp +Y2h0OyBha3R1ZWxsQ291bnQgPSAkYWt0dWVsbENvdW50OyBhbHRlciA9ICRhbHRlciB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgtbm90ICR3ZXJ0IC1vciBbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCR3ZXJ0KSkg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5laW50cmFlZ2UuJGRh +dHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRp +ZXMuUmVtb3ZlKCRwZXJzb25JZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNv +bklkXSkgeyAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLiRwZXJzb25JZCA9ICR3ZXJ0IH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1 +bSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHBlcnNvbklkIC1Ob3RlUHJvcGVydHlW +YWx1ZSAkd2VydCAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8 +IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJzsg +YWx0ZXIgPSAkYWx0ZXIgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +fSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9j +ay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAg +ICAgICAgICAgIGlmICgkbG9ja0VyZ2VibmlzLnR5cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9y +ICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLmNvZGU7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICBpZiAoJGxvY2tFcmdlYm5pcy50eXAgLWVxICdrb25mbGlrdCcp +IHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAg +ICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgICA9ICdrb25mbGlrdCcNCiAgICAgICAg +ICAgICAgICAgICAgICAgIG1lbGR1bmcgICAgICAgPSAnRGllc2UgWmVsbGUgd3VyZGUgaW56d2lz +Y2hlbiBnZWFlbmRlcnQuJw0KICAgICAgICAgICAgICAgICAgICAgICAgYWt0dWVsbGVyV2VydCA9 +ICRsb2NrRXJnZWJuaXMuYWt0dWVsbA0KICAgICAgICAgICAgICAgICAgICB9IDQwOQ0KICAgICAg +ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICBpZiAoJGxvY2tFcmdlYm5pcy50eXAgLWVxICd1bnRlcmJlc2V0enVuZycpIHsNCiAgICAgICAg +ICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAg +ICAgICAgICAgZmVobGVyICAgICAgICAgPSAnRnVlaHJ1bmdzLVVudGVyYmVzZXR6dW5nJw0KICAg +ICAgICAgICAgICAgICAgICAgICAga29uZmxpa3RUeXAgICAgPSAndW50ZXJiZXNldHp1bmcnDQog +ICAgICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgICAgICA9ICRsb2NrRXJnZWJuaXMuc2No +aWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgYWt0dWVsbENvdW50ICAgPSAkbG9ja0VyZ2Vi +bmlzLmFrdHVlbGxDb3VudA0KICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJXZXJ0ICAgICAg +PSAkbG9ja0VyZ2VibmlzLmFsdGVyDQogICAgICAgICAgICAgICAgICAgICAgICBuZXVlcldlcnQg +ICAgICA9ICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgIH0gNDA5DQogICAgICAgICAgICAgICAg +ICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJGFsdGVy +ID0gJGxvY2tFcmdlYm5pcy5hbHRlcg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcg +J3plbGxlLmdlYWVuZGVydCcgQHsgZGF0dW0gPSAkZGF0dW07IHBlcnNvbklkID0gJHBlcnNvbklk +OyBhbHRlcldlcnQgPSAiJGFsdGVyIjsgbmV1ZXJXZXJ0ID0gIiR3ZXJ0IiB9DQogICAgICAgICAg +ICAgICAgIyBMaXZlLVN5bmM6IENoYW5nZS1Mb2cgZnVlciBkZW4gc3luYy13b3JrZXIuDQogICAg +ICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VpbnRyYWcgJ3plbGxlJyBAew0KICAgICAgICAgICAg +ICAgICAgICBkYXR1bSAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCA9 +ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBhbHQgICAgICA9ICIkYWx0ZXIiDQogICAg +ICAgICAgICAgICAgICAgIG5ldSAgICAgID0gIiR3ZXJ0Ig0KICAgICAgICAgICAgICAgIH0NCg0K +ICAgICAgICAgICAgICAgICMgVW50ZXJiZXNldHp1bmdzLVF1aXR0dW5nOiBleHRyYSBMb2didWNo +LUVpbnRyYWcsIGRlbiBGYWNoYXVmc2ljaHQvV0wgc2VoZW4gc29sbA0KICAgICAgICAgICAgICAg +IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd1bnRlcmJlc2V0enVuZ1NjaGljaHQnXSAtYW5k +ICRhLnVudGVyYmVzZXR6dW5nU2NoaWNodCkgew0KICAgICAgICAgICAgICAgICAgICAkc2NoaWNo +dExldHRlciA9IFtzdHJpbmddJGEudW50ZXJiZXNldHp1bmdTY2hpY2h0DQogICAgICAgICAgICAg +ICAgICAgICRzY2hpY2h0VGV4dCA9IHN3aXRjaCAoJHNjaGljaHRMZXR0ZXIpIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICdGJyB7ICdGcnVlaHNjaGljaHQnIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICdTJyB7ICdTcGFldHNjaGljaHQnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICdO +JyB7ICdOYWNodHNjaGljaHQnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgeyAk +c2NoaWNodExldHRlciB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg +ICAgJG9lVHh0ID0gJycNCiAgICAgICAgICAgICAgICAgICAgaWYgKCR6aWVsUGVyc29uIC1hbmQg +JHppZWxQZXJzb24uUFNPYmplY3QuUHJvcGVydGllc1snb2UnXSkgeyAkb2VUeHQgPSBbc3RyaW5n +XSR6aWVsUGVyc29uLm9lIH0NCiAgICAgICAgICAgICAgICAgICAgJG5hbWVUeHQgPSAnJw0KICAg +ICAgICAgICAgICAgICAgICBpZiAoJHppZWxQZXJzb24pIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICR2biA9ICcnOyBpZiAoJHppZWxQZXJzb24uUFNPYmplY3QuUHJvcGVydGllc1sndm9ybmFt +ZSddKSB7ICR2biA9IFtzdHJpbmddJHppZWxQZXJzb24udm9ybmFtZSB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAkbmFtZVR4dCA9ICgiJHZuICQoJHppZWxQZXJzb24ubmFtZSkiKS5UcmltKCkN +CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50 +cmFnICd1bnRlcmJlc2V0enVuZy5xdWl0dGllcnQnIEB7DQogICAgICAgICAgICAgICAgICAgICAg +ICBkYXR1bSAgICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbklkICA9 +ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uICAgID0gJG5hbWVUeHQN +CiAgICAgICAgICAgICAgICAgICAgICAgIG9lICAgICAgICA9ICRvZVR4dA0KICAgICAgICAgICAg +ICAgICAgICAgICAgc2NoaWNodCAgID0gJHNjaGljaHRUZXh0DQogICAgICAgICAgICAgICAgICAg +ICAgICBhbHRlcldlcnQgPSAiJGFsdGVyIg0KICAgICAgICAgICAgICAgICAgICAgICAgbmV1ZXJX +ZXJ0ID0gIiR3ZXJ0Ig0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICMgUGhhc2UgRC4zICgyMDI2LTA1LTIxKTogd2VubiBkaWUgS3Jhbmtt +ZWxkdW5nIHp1cnVlY2tnZW5vbW1lbg0KICAgICAgICAgICAgICAgICMgd2lyZCAoYWx0ZXIgV2Vy +dCB3YXIga3IvS3VyLCBuZXVlciBXZXJ0IGlzdCBlcyBuaWNodCBtZWhyKSwNCiAgICAgICAgICAg +ICAgICAjIGVudGZlcm5lbiB3aXIgZGVuIG9mZmVuZW4gSGlud2VpcyDigJQgc29uc3QgaXN0IGVy +IGJpcyB6dQ0KICAgICAgICAgICAgICAgICMgMzAgVGFnZSBwcmFlc2VudCwgb2J3b2hsIGRhcyBF +cmVpZ25pcyBlcmxlZGlndCBpc3QuDQogICAgICAgICAgICAgICAgaWYgKCgkYWx0ZXIgLWVxICdr +cicgLW9yICRhbHRlciAtZXEgJ0t1cicpIC1hbmQgKCR3ZXJ0IC1uZSAna3InIC1hbmQgJHdlcnQg +LW5lICdLdXInKSkgew0KICAgICAgICAgICAgICAgICAgICBSZW1vdmUtT2ZmZW5lS3JhbmttZWxk +dW5nc0hpbndlaXNlICRwZXJzb25JZCAkZGF0dW0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgIyBIaW53ZWlzLVRyaWdnZXI6IEtyYW5rbWVsZHVuZyBlcnpldWd0IGVpbmVuIElu +LUFwcC1IaW53ZWlzDQogICAgICAgICAgICAgICAgIyBmdWVyIFNVICsgR2VzYW10dmVyYW50d29y +dGxpY2hlIChTY2hpY2h0bG9jaCBpbSBNb2RhbCBkaXJla3QNCiAgICAgICAgICAgICAgICAjIGFk +cmVzc2llcmJhciB2aWEgIkthbmRpZGF0ZW4gYW5zY2hyZWliZW4iLUJ1dHRvbikuDQogICAgICAg +ICAgICAgICAgaWYgKCR3ZXJ0IC1lcSAna3InIC1vciAkd2VydCAtZXEgJ0t1cicpIHsNCiAgICAg +ICAgICAgICAgICAgICAgJGttTmFtZSA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgkemll +bFBlcnNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGt2biA9ICcnOyBpZiAoJHppZWxQ +ZXJzb24uUFNPYmplY3QuUHJvcGVydGllc1sndm9ybmFtZSddKSB7ICRrdm4gPSBbc3RyaW5nXSR6 +aWVsUGVyc29uLnZvcm5hbWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGttTmFtZSA9ICgi +JGt2biAkKCR6aWVsUGVyc29uLm5hbWUpIikuVHJpbSgpDQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgJGttR3J1cHBlID0gJycNCiAgICAgICAgICAgICAgICAgICAg +aWYgKCR6aWVsUGVyc29uIC1hbmQgJHppZWxQZXJzb24uUFNPYmplY3QuUHJvcGVydGllc1snZ3J1 +cHBlJ10pIHsgJGttR3J1cHBlID0gW3N0cmluZ10kemllbFBlcnNvbi5ncnVwcGUgfQ0KICAgICAg +ICAgICAgICAgICAgICAka21TY2hpY2h0TGV0dGVyID0gJycNCiAgICAgICAgICAgICAgICAgICAg +aWYgKCIkYWx0ZXIiIC1tYXRjaCAnXihbRlNOXSktJykgeyAka21TY2hpY2h0TGV0dGVyID0gJE1h +dGNoZXNbMV0gfQ0KICAgICAgICAgICAgICAgICAgICBOZXctSGlud2VpcyAna3JhbmttZWxkdW5n +JyAoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbl9pZCAgICA9ICRw +ZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uX25hbWUgID0gJGttTmFtZQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgZ3J1cHBlICAgICAgID0gJGttR3J1cHBlDQogICAgICAg +ICAgICAgICAgICAgICAgICBkYXR1bSAgICAgICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAg +ICAgICAgIHNjaGljaHRDb2RlICA9ICIkYWx0ZXIiDQogICAgICAgICAgICAgICAgICAgICAgICBz +Y2hpY2h0S3VyeiAgPSAka21TY2hpY2h0TGV0dGVyDQogICAgICAgICAgICAgICAgICAgICAgICBj +b2RlICAgICAgICAgPSAiJHdlcnQiDQogICAgICAgICAgICAgICAgICAgIH0pIChHZXQtQWt0dWVs +bGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBh +bHRlcldlcnQgPSAkYWx0ZXIgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg +ICB9DQogICAgICAgICAgICAjIEJ1bGstU2NocmVpYmVuIG1laHJlcmVyIFplbGxlbiBpbiBlaW5l +bSBTY2hyaXR0IOKAlCBhdWZnZXJ1ZmVuDQogICAgICAgICAgICAjIHZvbSBFeGNlbC1GdWVsbC1H +cmlmZi4gU3BhcnQgcHJvIERyYWcgYmlzIHp1IDEwMCsgSFRUUC1Sb3VuZHRyaXBzDQogICAgICAg +ICAgICAjIHVuZCBEYXRlaS1TY2hyZWlidm9yZ2FlbmdlLiBQZXJtaXNzaW9uLUNoZWNrIHBybyBa +ZWxsZSwgZWluDQogICAgICAgICAgICAjIGVpbnppZ2VyIExvZ2J1Y2gtRWludHJhZyBmYXNzdCBk +aWUgQWt0aW9uIHp1c2FtbWVuLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFu +dW5nL3plbGxlbi1idWxrJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAg +ICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg +JGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQog +ICAgICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoJGEuZWludHJhZWdlKQ0KICAgICAgICAgICAg +ICAgIGlmICgtbm90ICRlaW50cmFlZ2UgLW9yICRlaW50cmFlZ2UuQ291bnQgLWVxIDApIHsNCiAg +ICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAn +b2snOyBvayA9IDA7IGFiZ2VsZWhudCA9IEAoKSB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRp +bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgUmVhZC1Nb2RpZnktV3Jp +dGUgYXRvbWFyIGluIGRlciBEYXRlaS1TcGVycmUg4oCUIHdpZSBkZXIgRWluemVsLQ0KICAgICAg +ICAgICAgICAgICMgemVsbC1FbmRwb2ludC4gT2huZSBMb2NrIGthbm4gZWluIHBhcmFsbGVsZXIg +RWRpdC9CdWxrIChhdWNoDQogICAgICAgICAgICAgICAgIyBhdXMgZWluZW0gYW5kZXJlbiBTZXJ2 +ZXItUHJvemVzcyBhdWYgZGVtc2VsYmVuIFNoYXJlKSBkZW4NCiAgICAgICAgICAgICAgICAjIGdl +cmFkZSBnZWxlc2VuZW4gR2VzYW10c3RhbmQgdWViZXJzY2hyZWliZW4gKExvc3QgVXBkYXRlIHVl +YmVyDQogICAgICAgICAgICAgICAgIyBkaWUgR0FOWkUgRGF0ZWkpLiBMb2didWNoICsgTGl2ZS1T +eW5jIGxhdWZlbiBOQUNIIGRlciBTcGVycmUsDQogICAgICAgICAgICAgICAgIyB1bSBnZXNjaGFj +aHRlbHRlIExvY2tzIChsb2didWNoL2NoYW5nZXMpIHp1IHZlcm1laWRlbi4NCiAgICAgICAgICAg +ICAgICAkcmVzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAg +ICAgICAkcmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u +Jw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZykgeyByZXR1 +cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcuanNvbiBuaWNo +dCBnZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVu +Zy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRwbGFudW5nIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZWludHJh +ZWdlJyAtTm90ZVByb3BlcnR5VmFsdWUgKFtQU0N1c3RvbU9iamVjdF1Ae30pIC1Gb3JjZQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQZXJzb25l +bi1NYXAgZWlubWFsIGF1ZmJhdWVuIOKAlCBQZXJtaXNzaW9uLUNoZWNrIHBybw0KICAgICAgICAg +ICAgICAgICAgICAgICAgIyBFaW50cmFnIG9obmUgUmVzY2FuIGRlciBQZXJzb25lbmxpc3RlLg0K +ICAgICAgICAgICAgICAgICAgICAgICAgJHBlcnNvbk1hcCA9IEB7fQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgZm9yZWFjaCAoJHBwIGluIEAoJHBsYW51bmcucGVyc29uZW4pKSB7ICRwZXJzb25NYXBb +W3N0cmluZ10kcHAuaWRdID0gJHBwIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgICRva0NvdW50ID0gMA0KICAgICAgICAgICAgICAgICAgICAgICAg +JGFiZ2VsZWhudCA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGVyc3Rlc1BpZCA9ICRu +dWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkZXJzdGVzV2VydCA9ICRudWxsDQogICAgICAg +ICAgICAgICAgICAgICAgICAkZXJzdGVzRGF0dW0gPSAkbnVsbA0KICAgICAgICAgICAgICAgICAg +ICAgICAgJGxldHp0ZXNEYXR1bSA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAjIGFs +dGVXZXJ0ZS1NYXAgZnVlciBMb2didWNoLVJlc3RvcmU6IEtleSA9ICI8ZGF0dW0+fDxwZXJzb25J +ZD4iLg0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZSA9IEB7fQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgIyBzeW5jRWludHJhZWdlOiBwcm8gZ2VtdXRpZXJ0ZXIgWmVsbGUgZWlu +IEVpbnRyYWcgZnVlcg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBkZW4gTGl2ZS1TeW5jLUNo +YW5nZS1Mb2cgKEZvcm1hdCB3aWUgU2luZ2xlLUNlbGwpLg0KICAgICAgICAgICAgICAgICAgICAg +ICAgJHN5bmNFaW50cmFlZ2UgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxp +c3QNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlIGluICRlaW50cmFlZ2UpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0dW0gPSBbc3RyaW5nXSRlLmRhdHVtDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kZS5wZXJzb25J +ZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3ZXJ0ID0gaWYgKCRlLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ3dlcnQnXSAtYW5kICRudWxsIC1uZSAkZS53ZXJ0KSB7IFtzdHJpbmddJGUud2Vy +dCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGRh +dHVtIC1vciAtbm90ICRwZXJzb25JZCkgeyAkYWJnZWxlaG50ICs9IEB7IGRhdHVtID0gJGRhdHVt +OyBwZXJzb25JZCA9ICRwZXJzb25JZDsgZ3J1bmQgPSAndW52b2xsc3RhZW5kaWcnIH07IGNvbnRp +bnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemllbFBlcnNvbiA9ICRwZXJzb25N +YXBbJHBlcnNvbklkXQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0 +LURhcmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNvbikpIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJGFiZ2VsZWhudCArPSBAeyBkYXR1bSA9ICRkYXR1bTsgcGVyc29uSWQgPSAk +cGVyc29uSWQ7IGdydW5kID0gJ2tlaW4tcmVjaHQnIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcuZWludHJhZWdlLlBTT2JqZWN0 +LlByb3BlcnRpZXNbJGRhdHVtXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +cGxhbnVuZy5laW50cmFlZ2UgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRkYXR1bSAt +Tm90ZVByb3BlcnR5VmFsdWUgKFtQU0N1c3RvbU9iamVjdF1Ae30pIC1Gb3JjZQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFsdGVu +IFdlcnQgbWVya2VuIEJFVk9SIHdpciBkaWUgWmVsbGUgdWViZXJzY2hyZWliZW4uDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJGFsdGVyV2VydCA9ICcnDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGll +c1skcGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHRlcldl +cnQgPSBbc3RyaW5nXSRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uJHBlcnNvbklkDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHRl +V2VydGVbKCJ7MH18ezF9IiAtZiAkZGF0dW0sICRwZXJzb25JZCldID0gJGFsdGVyV2VydA0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JFbXB0eSgkd2Vy +dCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRy +YWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLlBTT2Jq +ZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwZXJzb25JZCkNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLlBT +T2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS4kcGVyc29uSWQgPSAkd2VydA0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bSB8IEFkZC1NZW1i +ZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHBlcnNvbklkIC1Ob3RlUHJvcGVydHlWYWx1ZSAkd2VydCAt +Rm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2tDb3VudCsrDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkZXJzdGVzUGlkKSB7ICRl +cnN0ZXNQaWQgPSAkcGVyc29uSWQ7ICRlcnN0ZXNXZXJ0ID0gJHdlcnQ7ICRlcnN0ZXNEYXR1bSA9 +ICRkYXR1bSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxldHp0ZXNEYXR1bSA9ICRk +YXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRzeW5jRWludHJhZWdlLkFk +ZChAeyBkYXR1bSA9ICRkYXR1bTsgcGVyc29uSWQgPSAkcGVyc29uSWQ7IGFsdCA9ICIkYWx0ZXJX +ZXJ0IjsgbmV1ID0gIiR3ZXJ0IiB9KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgIyBEYXRlaSBudXIgc2NocmVpYmVuLCB3ZW5uIHRhdHNhZWNobGlj +aCB3YXMgZ2VhZW5kZXJ0IHd1cmRlLg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRva0Nv +dW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVj +dCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJzsgb2tD +b3VudCA9ICRva0NvdW50OyBhYmdlbGVobnQgPSAkYWJnZWxlaG50OyBlcnN0ZXNQaWQgPSAkZXJz +dGVzUGlkOyBlcnN0ZXNXZXJ0ID0gJGVyc3Rlc1dlcnQ7IGVyc3Rlc0RhdHVtID0gJGVyc3Rlc0Rh +dHVtOyBsZXR6dGVzRGF0dW0gPSAkbGV0enRlc0RhdHVtOyBhbHRlV2VydGUgPSAkYWx0ZVdlcnRl +OyBzeW5jRWludHJhZWdlID0gJHN5bmNFaW50cmFlZ2UgfQ0KICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy +b3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJHJlcy50eXAgLWVxICdlcnJvcicpIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJHJlcy5tc2cgJHJlcy5jb2RlOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgIyBMb2didWNoICsgTGl2ZS1TeW5jIE5BQ0ggZGVtIExvY2sgKGtlaW4gZ2VzY2hh +Y2h0ZWx0ZXMgTG9jaykuDQogICAgICAgICAgICAgICAgaWYgKCRyZXMub2tDb3VudCAtZ3QgMCkg +ew0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICd6ZWxsZW4uYnVsay5nZWFl +bmRlcnQnIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgICA9ICRyZXMuZXJz +dGVzUGlkDQogICAgICAgICAgICAgICAgICAgICAgICB3ZXJ0ICAgICAgICA9ICRyZXMuZXJzdGVz +V2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgYW56YWhsICAgICAgPSAkcmVzLm9rQ291bnQN +CiAgICAgICAgICAgICAgICAgICAgICAgIGVyc3RlclRhZyAgID0gJHJlcy5lcnN0ZXNEYXR1bQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgbGV0enRlclRhZyAgPSAkcmVzLmxldHp0ZXNEYXR1bQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgYWJnZWxlaG50ICAgPSAkcmVzLmFiZ2VsZWhudC5Db3Vu +dA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXN0b3JlLVBheWxvYWQ6IHBybyBaZWxsZSBk +ZXIgV2VydCB2b3IgZGVyIEFlbmRlcnVuZy4NCiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVX +ZXJ0ZSAgID0gJHJlcy5hbHRlV2VydGUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAjIExpdmUtU3luYzogcHJvIFplbGxlIGVpbiAnemVsbGUnLUVpbnRyYWcgaW5z +IGNoYW5nZXMuanNvbi4NCiAgICAgICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VpbnRyYWVn +ZSAnemVsbGUnICRyZXMuc3luY0VpbnRyYWVnZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7IG9rID0g +JHJlcy5va0NvdW50OyBhYmdlbGVobnQgPSBAKCRyZXMuYWJnZWxlaG50KSB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgUE9TVCAvYXBpL3Bs +YW51bmcva29tbWVudGFyDQogICAgICAgICAgICAjIEhhZW5ndCBlaW5lbiBuZXVlbiBLb21tZW50 +YXIgYW4gZGllIExpc3RlIGZ1ZXIgKGRhdHVtLHBlcnNvbklkKSBhbi4NCiAgICAgICAgICAgICMg +U2NoZW1hLU1pZ3JhdGlvbiAobGF6eSk6IHZvcmhhbmRlbmVyIFN0cmluZyBvZGVyIE9iamVrdC1F +aW50cmFnIHdpcmQNCiAgICAgICAgICAgICMgYmVpbSBlcnN0ZW4gU2NocmVpYmVuIGluIGVpbmUg +TGlzdGUga29udmVydGllcnQuIExlZXJlciBUZXh0IHdpcmQNCiAgICAgICAgICAgICMgYWJnZWxl +aG50IOKAlCBMb2VzY2hlbiBlaW56ZWxuZXIgS29tbWVudGFyZSBsYWV1ZnQgdWViZXIgZGVuIERF +TEVURS0NCiAgICAgICAgICAgICMgRW5kcHVua3QgKG1pdCBLb21tZW50YXItSUQpLCBkYXMgTG9l +c2NoZW4gZ2FuemVyIExpc3RlbiBpc3QgdWViZXINCiAgICAgICAgICAgICMgZGllIEFQSSBuaWNo +dCBtZWhyIG1vZWdsaWNoICh2ZXJzZWhlbnRsaWNoZXIgVmVybHVzdCBhdXNnZXNjaGxvc3Nlbiku +DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcva29tbWVudGFyJyAtYW5k +ICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5 +ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdHVt +ID0gJGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbc3RyaW5nXSRhLnBlcnNv +bklkDQogICAgICAgICAgICAgICAgJHRleHQgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1sn +dGV4dCddKSB7ICgiJCgkYS50ZXh0KSIpLlRyaW0oKSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJHRleHQpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ0xlZXJlciBLb21tZW50YXIg4oCUIGJpdHRlIERFTEVURSAvYXBpL3BsYW51bmcv +a29tbWVudGFyIGZ1ZXIgTG9lc2NoZW4gdmVyd2VuZGVuJyA0MDANCiAgICAgICAgICAgICAgICAg +ICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBFZGl0LVJl +Y2h0IHZvciBMb2NrIHBydWVmZW4NCiAgICAgICAgICAgICAgICAkcGxhbnVuZ0NoZWNrID0gUmVh +ZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l +cSAkcGxhbnVuZ0NoZWNrKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdwbGFudW5nLmpzb24gbmlj +aHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICR6aWVsUGVyc29u +ID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmdDaGVjay5wZXJzb25lbikgew0K +ICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gQCgkcGxhbnVuZ0NoZWNrLnBlcnNv +bmVuKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddJHBwLmlkIC1lcSAk +cGVyc29uSWQpIHsgJHppZWxQZXJzb24gPSAkcHA7IGJyZWFrIH0NCiAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1E +YXJmWmVsbGVFZGl0aWVyZW4gJHppZWxQZXJzb24pKSB7DQogICAgICAgICAgICAgICAgICAgIFNl +bmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgZnVlciBkaWVzZW4gS29tbWVu +dGFyJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRq +ZXR6dCA9IChHZXQtRGF0ZSkuVG9TdHJpbmcoJ28nKSAgIyBJU08gODYwMSBtaXQgWmVpdHpvbmUN +CiAgICAgICAgICAgICAgICAkYmVudXR6ZXIgPSAiJERvbWFpblwkVXNlcm5hbWUiDQogICAgICAg +ICAgICAgICAgJG5ldWVJZCA9ICdrXycgKyAoW0RhdGVUaW1lT2Zmc2V0XTo6Tm93LlRvVW5peFRp +bWVNaWxsaXNlY29uZHMoKSkgKyAnXycgKyAoR2V0LVJhbmRvbSAtTWF4aW11bSA5OTk5OSkNCiAg +ICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbnVsbCA9IEludm9rZS1X +aXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBs +YW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkbnVsbCAtZXEgJHBsYW51bmcpIHsgcmV0dXJuICRudWxsIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tv +bW1lbnRhcmUnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nIHwgQWRk +LU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAna29tbWVudGFyZScgLU5vdGVQcm9wZXJ0eVZhbHVl +IChOZXctT2JqZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLmtvbW1lbnRhcmUuUFNP +YmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +JHBsYW51bmcua29tbWVudGFyZSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGRhdHVt +IC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkgLUZvcmNlDQogICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIEFrdHVlbGxlIExp +c3RlIGhlcmF1c3ppZWhlbiArIGdnZi4gYXVzIEFsdHNjaGVtYSBtaWdyaWVyZW4uDQogICAgICAg +ICAgICAgICAgICAgICAgICAjIExpc3RlIGlzdCBjaHJvbm9sb2dpc2NoIChhZWx0ZXN0ZSB6dWVy +c3QpLCBkZXIgbmV1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBFaW50cmFnIHdpcmQgaGlu +dGVuIGFuZ2VoYWVuZ3QuDQogICAgICAgICAgICAgICAgICAgICAgICAkbGlzdGUgPSBOZXctT2Jq +ZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3Rbb2JqZWN0XQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJHBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2b3JoID0g +JHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCR2b3JoIC1pcyBbc3RyaW5nXSAtYW5kICR2b3JoKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZXIgU3RyaW5nLUVpbnRyYWcg4oCUIGVpbiBFbGVt +ZW50IG9obmUgTWV0YQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGlzdGUuQWRk +KFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWQgICAgICAgICAgID0gJ2tfbGVnYWN5XycgKyAoR2V0LVJhbmRvbSAtTWF4aW11bSA5OTk5OSkN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgICAgICAgICA9ICR2b3Jo +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSAkbnVs +bA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gJG51 +bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfCBPdXQtTnVsbA0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdm9yaCAtaXMgW2FycmF5XSAtb3IgKCR2 +b3JoIC1pcyBbU3lzdGVtLkNvbGxlY3Rpb25zLklFbnVtZXJhYmxlXSAtYW5kIC1ub3QgKCR2b3Jo +IC1pcyBbc3RyaW5nXSkpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2No +b24gZWluIEFycmF5IChuZXVlcyBTY2hlbWEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGZvcmVhY2ggKCRlIGluIEAoJHZvcmgpKSB7ICRsaXN0ZS5BZGQoJGUpIHwgT3V0LU51bGwg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdm9yaCAtYW5kICR2b3Jo +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAjIEFsdGVzIE9iamVrdC1TY2hlbWEgeyB0ZXh0LCBnZWFlbmRlcnRBbSwgZ2VhZW5k +ZXJ0Vm9uIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1pZ0lkID0gaWYgKCR2 +b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lkJ10pIHsgW3N0cmluZ10kdm9yaC5pZCB9IGVsc2Ug +eyAna19sZWdhY3lfJyArIChHZXQtUmFuZG9tIC1NYXhpbXVtIDk5OTk5KSB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3VzdG9tT2JqZWN0XUB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAgPSAkbWlnSWQNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgICAgICAgICA9IFtzdHJpbmdd +JHZvcmgudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0 +QW0gID0gaWYgKCR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlYWVuZGVydEFtJ10pICB7ICR2 +b3JoLmdlYWVuZGVydEFtIH0gIGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBnZWFlbmRlcnRWb24gPSBpZiAoJHZvcmguUFNPYmplY3QuUHJvcGVydGll +c1snZ2VhZW5kZXJ0Vm9uJ10pIHsgJHZvcmguZ2VhZW5kZXJ0Vm9uIH0gZWxzZSB7ICRudWxsIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfCBPdXQtTnVsbA0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3VzdG9tT2JqZWN0XUB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgID0gJG5ldWVJZA0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIHRleHQgICAgICAgICA9ICR0ZXh0DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgZ2VhZW5kZXJ0QW0gID0gJGpldHp0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +Z2VhZW5kZXJ0Vm9uID0gJGJlbnV0emVyDQogICAgICAgICAgICAgICAgICAgICAgICB9KSB8IE91 +dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAjIFp1cnVlY2sgYWxzIEFycmF5IChQUy1T +ZXJpYWxpc2llcnVuZykNCiAgICAgICAgICAgICAgICAgICAgICAgICRhcnIgPSBAKCRsaXN0ZS5U +b0FycmF5KCkpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcua29tbWVudGFy +ZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uJHBlcnNvbklkID0gJGFy +cg0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9w +ZXJ0eU5hbWUgJHBlcnNvbklkIC1Ob3RlUHJvcGVydHlWYWx1ZSAkYXJyIC1Gb3JjZQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9i +amVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAg +ICAgICAgICByZXR1cm4gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAo +IkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgIyBSZWRhY3Rpb24gd2llIGJlaSBrb21tZW50YXIuZ2Vsb2VzY2h0IChTcHJp +bnQgMSDigJQgU2ljaGVyaGVpdHMtDQogICAgICAgICAgICAgICAgIyBOb3RicmVtc2UgMjAyNi0w +NS0yOCk6IFZvbGx0ZXh0IGJsZWlidCBpbiBwbGFudW5nLmpzb24gKGRvcnQNCiAgICAgICAgICAg +ICAgICAjIGVkaXRpZXJiYXIvbG9lc2NoYmFyKSwgZGFzIExvZ2J1Y2ggYmVrb21tdCBudXIgVm9y +c2NoYXUgKyBMYWVuZ2UuDQogICAgICAgICAgICAgICAgIyBWZXJtZWlkZXQgUElJLUVjaG8sIHdl +bm4gZWluIEtvbW1lbnRhciBzcGFldGVyIGdlbG9lc2NodCB3aXJkDQogICAgICAgICAgICAgICAg +IyBhYmVyIGltIExvZyBpbW1lciBub2NoIGtvbXBsZXR0IGxpZXN0IHN0ZWh0Lg0KICAgICAgICAg +ICAgICAgICR0ZXh0Vm9yc2NoYXUgPSAkdGV4dA0KICAgICAgICAgICAgICAgIGlmICgkdGV4dFZv +cnNjaGF1Lkxlbmd0aCAtZ3QgNDApIHsgJHRleHRWb3JzY2hhdSA9ICR0ZXh0Vm9yc2NoYXUuU3Vi +c3RyaW5nKDAsIDQwKSArICfigKYnIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFn +ICdrb21tZW50YXIuaGluenVnZWZ1ZWd0JyBAew0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAg +ICAgICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkICAgICAgPSAkcGVy +c29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFySWQgICA9ICRuZXVlSWQNCiAgICAg +ICAgICAgICAgICAgICAgdGV4dFZvcnNjaGF1ICA9ICR0ZXh0Vm9yc2NoYXUNCiAgICAgICAgICAg +ICAgICAgICAgdGV4dExhZW5nZSAgICA9ICR0ZXh0Lkxlbmd0aA0KICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRWludHJhZyAna29tbWVudGFyJyBAew0KICAg +ICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBw +ZXJzb25JZCA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBrb21tZW50YXJJZCA9ICRu +ZXVlSWQNCiAgICAgICAgICAgICAgICAgICAgIyBMaXZlLVN5bmMgYnJhdWNodCBkZW4gVGV4dCBu +aWNodCDigJQgbmFlY2hzdGVyIFJlbmRlciBsYWVkdA0KICAgICAgICAgICAgICAgICAgICAjIGlo +biBhdXMgcGxhbnVuZy5qc29uLiBOdXIgTWV0YWRhdGVuIGZ1ZXIgQWt0aXZpdGFldHMtQW56ZWln +ZS4NCiAgICAgICAgICAgICAgICAgICAgemVpdHN0ZW1wZWwgPSAkamV0enQNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAg +ICAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgPSAnaGluenVnZWZ1ZWd0Jw0KICAgICAgICAg +ICAgICAgICAgICBrb21tZW50YXJJZCAgPSAkbmV1ZUlkDQogICAgICAgICAgICAgICAgICAgIGdl +YWVuZGVydEFtICA9ICRqZXR6dA0KICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24gPSAk +YmVudXR6ZXINCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAg +ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBERUxFVEUgL2FwaS9wbGFudW5nL2tvbW1lbnRh +cg0KICAgICAgICAgICAgIyBCb2R5OiB7IGRhdHVtLCBwZXJzb25JZCwga29tbWVudGFySWQgfQ0K +ICAgICAgICAgICAgIyBCZXJlY2h0aWd1bmc6IFN1cGVyVXNlciBvZGVyIEdlc2FtdHZlcmFudHdv +cnRsaWNoZS4gQW5kZXJlIFJvbGxlbg0KICAgICAgICAgICAgIyBiZWtvbW1lbiA0MDMg4oCUIGF1 +Y2ggZGVyIFZlcmZhc3NlciBzZWxic3QgZGFyZiBuaWNodCBsb2VzY2hlbg0KICAgICAgICAgICAg +IyAoYmV3dXNzdGUgRGVzaWduZW50c2NoZWlkdW5nOiBLb21tZW50YXItVmVybGF1ZiBpc3QgQ2hy +b25paykuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcva29tbWVudGFy +JyAtYW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBS +ZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg +ICAkZGF0dW0gPSAkYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtzdHJpbmdd +JGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICAka29tbWVudGFySWQgPSBbc3RyaW5nXSRhLmtv +bW1lbnRhcklkDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGRhdHVtIC1vciAtbm90ICRwZXJz +b25JZCAtb3IgLW5vdCAka29tbWVudGFySWQpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F +cnJvciAkUmVzcG9uc2UgJ2RhdHVtLCBwZXJzb25JZCB1bmQga29tbWVudGFySWQgc2luZCBQZmxp +Y2h0JyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRy +ID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkci5pc3RTdXBlclVzZXIg +LW9yICRyLmlzdEdlc2FtdHZlcmFudHdvcnRsaWNoKSkgew0KICAgICAgICAgICAgICAgICAgICBT +ZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciB1bmQgR2VzYW10dmVyYW50d29ydGxp +Y2hlIGR1ZXJmZW4gS29tbWVudGFyZSBsb2VzY2hlbicgNDAzDQogICAgICAgICAgICAgICAgICAg +IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRnZWxvZXNjaHRl +clRleHQgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAg +ICRlcmcgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAg +ICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQog +ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRwbGFudW5nIC1vciAtbm90ICRw +bGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRhcmUnXSkgeyByZXR1cm4gQHsgdGV4 +dCA9ICRudWxsIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcu +a29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bV0pIHsgcmV0dXJuIEB7IHRleHQg +PSAkbnVsbCB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLmtv +bW1lbnRhcmUuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgeyByZXR1cm4g +QHsgdGV4dCA9ICRudWxsIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHZvcmggPSAkcGxh +bnVuZy5rb21tZW50YXJlLiRkYXR1bS4kcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAg +ICMgQ29tcGF0IGZ1ZXIgQWx0LUZvcm1hdGUgKFNwcmludCAzIOKAlCBEcmlmdC9Sb2J1c3RoZWl0 +DQogICAgICAgICAgICAgICAgICAgICAgICAjIDIwMjYtMDUtMjgpOiBDbGllbnQga2VubnplaWNo +bmV0IFN0cmluZy0gb2RlciBTaW5nbGUtDQogICAgICAgICAgICAgICAgICAgICAgICAjIE9iamVj +dC1vaG5lLUlEIEVpbnRyYWVnZSBpbiBrb21tZW50YXJMaXN0ZSgpIG1pdA0KICAgICAgICAgICAg +ICAgICAgICAgICAgIyBTZW50aW5lbC1JRCAna19sZWdhY3knLiBERUxFVEUgbWl0IGRpZXNlciBJ +RCBnZWdlbg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBlaW5lbiBBbHQtRWludHJhZyA9IGtv +bXBsZXR0ZXIgRWludHJhZyB3aXJkIGVudGZlcm50DQogICAgICAgICAgICAgICAgICAgICAgICAj +IChNaWdyYXRpb24gKyBMb2VzY2h1bmcgaW4gZWluZW0gU2Nocml0dCkuDQogICAgICAgICAgICAg +ICAgICAgICAgICAkdHJlZmZlciA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkbmV1 +ZUxpc3RlID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0W29iamVj +dF0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdm9yaCAtaXMgW3N0cmluZ10gLWFuZCAk +dm9yaCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgka29tbWVudGFySWQgLWVx +ICdrX2xlZ2FjeScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyZWZmZXIg +PSBbUFNDdXN0b21PYmplY3RdQHsgdGV4dCA9ICR2b3JoIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g +QHsgdGV4dCA9ICRudWxsOyBmZWhsZXIgPSAna29tbWVudGFyTmljaHRHZWZ1bmRlbicgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz +ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlID0gQCgpDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKCR2b3JoIC1pcyBbYXJyYXldIC1vciAoJHZvcmggLWlzIFtT +eXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFibGVdIC1hbmQgLW5vdCAoJHZvcmggLWlzIFtzdHJp +bmddKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlID0gQCgkdm9y +aCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHZvcmggLWFuZCAkdm9y +aC5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJGFsdElkID0gaWYgKCR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lkJ10pIHsg +W3N0cmluZ10kdm9yaC5pZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgtbm90ICRhbHRJZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRrb21tZW50YXJJZCAtZXEgJ2tfbGVnYWN5Jykgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICR0cmVmZmVyID0gJHZvcmgNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgcmV0dXJuIEB7IHRleHQgPSAkbnVsbDsgZmVobGVyID0gJ2tvbW1lbnRh +ck5pY2h0R2VmdW5kZW4nIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZSA9IEAoJHZvcmgpDQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRyZWZmZXIpIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGUgaW4gJGxpc3RlKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAkZWlkID0gaWYgKCRlIC1hbmQgJGUuUFNPYmplY3QuUHJv +cGVydGllc1snaWQnXSkgeyBbc3RyaW5nXSRlLmlkIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZWlkIC1lcSAka29tbWVudGFySWQpIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHJlZmZlciA9ICRlDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICRuZXVlTGlzdGUuQWRkKCRlKSB8IE91dC1OdWxsDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdHJlZmZl +cikgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxsOyBmZWhsZXIgPSAna29tbWVudGFyTmljaHRHZWZ1 +bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG5ldWVMaXN0ZS5Db3VudCAt +ZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTGV0enRlciBLb21tZW50YXIg +ZW50ZmVybnQgLT4gUHJvcGVydHkga29tcGxldHQgcmF1cw0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVt +b3ZlKCRwZXJzb25JZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExlZXJlciBUYWdl +cy1CdWNrZXQgYXVmcmFldW1lbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWdQcm9w +cyA9IEAoJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcykNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRhZ1Byb3BzLkNvdW50IC1lcSAwKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmtvbW1lbnRhcmUuUFNPYmpl +Y3QuUHJvcGVydGllcy5SZW1vdmUoJGRhdHVtKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uJHBlcnNvbklkID0gQCgkbmV1ZUxp +c3RlLlRvQXJyYXkoKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQt +TnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgJGVudGZlcm50VGV4dCA9IGlmICgkdHJlZmZl +ci5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsgW3N0cmluZ10kdHJlZmZlci50ZXh0IH0g +ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0ZXh0ID0gJGVu +dGZlcm50VGV4dCB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +aWYgKCRlcmcuZmVobGVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGVyZy5mZWhs +ZXIgLWVxICdrb21tZW50YXJOaWNodEdlZnVuZGVuJykgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLb21tZW50YXIgbWl0IGRpZXNlciBJRCBuaWNo +dCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRnZWxvZXNjaHRlclRleHQg +PSAkZXJnLnRleHQNCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAg +ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVl +DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgUmVkYWN0aW9uIChTcHJpbnQg +MSDigJQgU2ljaGVyaGVpdHMtTm90YnJlbXNlIDIwMjYtMDUtMjgpOg0KICAgICAgICAgICAgICAg +ICMgUElJLVNjaHV0ei4gRnJ1ZWhlciBsYW5kZXRlIGRlciB2b2xsc3RhZW5kaWdlIEtvbW1lbnRh +ci1UZXh0IGltDQogICAgICAgICAgICAgICAgIyBMb2didWNoIOKAlCB3ZW5uIGRlciBLb21tZW50 +YXIgS3JhbmtoZWl0cy0vRGlzemlwbGluYXItSW5mbyBlbnRoaWVsdCwNCiAgICAgICAgICAgICAg +ICAjIGxlYnRlIHNpZSBuYWNoICdMb2VzY2hlbicgd2VpdGVyIGltIExvZy4gSmV0enQgbnVyIExh +ZW5nZSArIGt1cnplcg0KICAgICAgICAgICAgICAgICMgQXVzenVnICg0MCBaZWljaGVuKSwgZ2Vu +dWcgZnVlciBOYWNodm9sbHppZWhiYXJrZWl0IG9obmUgVm9sbHRleHQuDQogICAgICAgICAgICAg +ICAgJHRleHRWb3JzY2hhdSA9ICcnDQogICAgICAgICAgICAgICAgaWYgKCRnZWxvZXNjaHRlclRl +eHQpIHsNCiAgICAgICAgICAgICAgICAgICAgJGt1cnogPSAkZ2Vsb2VzY2h0ZXJUZXh0DQogICAg +ICAgICAgICAgICAgICAgIGlmICgka3Vyei5MZW5ndGggLWd0IDQwKSB7ICRrdXJ6ID0gJGt1cnou +U3Vic3RyaW5nKDAsIDQwKSArICfigKYnIH0NCiAgICAgICAgICAgICAgICAgICAgJHRleHRWb3Jz +Y2hhdSA9ICRrdXJ6DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR0ZXh0TGFl +bmdlID0gaWYgKCRnZWxvZXNjaHRlclRleHQpIHsgJGdlbG9lc2NodGVyVGV4dC5MZW5ndGggfSBl +bHNlIHsgMCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAna29tbWVudGFyLmdl +bG9lc2NodCcgQHsNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgICAgICA9ICRkYXR1bQ0K +ICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgICAgID0gJHBlcnNvbklkDQogICAgICAgICAg +ICAgICAgICAgIGtvbW1lbnRhcklkICAgPSAka29tbWVudGFySWQNCiAgICAgICAgICAgICAgICAg +ICAgdGV4dFZvcnNjaGF1ICA9ICR0ZXh0Vm9yc2NoYXUNCiAgICAgICAgICAgICAgICAgICAgdGV4 +dExhZW5nZSAgICA9ICR0ZXh0TGFlbmdlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgIEFkZC1DaGFuZ2VMb2dFaW50cmFnICdrb21tZW50YXInIEB7DQogICAgICAgICAgICAgICAg +ICAgIGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBl +cnNvbklkDQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklkID0gJGtvbW1lbnRhcklkDQog +ICAgICAgICAgICAgICAgICAgICMgTGl2ZS1TeW5jLUNoYW5uZWwgYnJhdWNodCBkZW4gVGV4dCBu +aWNodCDigJQgQnJvd3NlciBsYWVkdA0KICAgICAgICAgICAgICAgICAgICAjIGJlaSBuYWVjaHN0 +ZW0gUmVuZGVyIGVoIGF1cyBwbGFudW5nLmpzb24gKHdvIGRlciBFaW50cmFnDQogICAgICAgICAg +ICAgICAgICAgICMgd2VnIGlzdCkuIEhpZXIgbnVyIE1ldGFkYXRlbiBmdWVyIEFrdGl2aXRhZXRz +LUFuemVpZ2UuDQogICAgICAgICAgICAgICAgICAgIG5ldSAgICAgID0gJycNCiAgICAgICAgICAg +ICAgICAgICAgemVpdHN0ZW1wZWwgPSAoR2V0LURhdGUpLlRvU3RyaW5nKCdvJykNCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBz +dGF0dXMgPSAnZ2Vsb2VzY2h0Jzsga29tbWVudGFySWQgPSAka29tbWVudGFySWQgfQ0KICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0g +UEVSU09ORU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGVyc29uZW4n +IC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl +c3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUn +IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1 +ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRu +ZXUgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAjIFJlYWQtTW9k +aWZ5LVdyaXRlIGF0b21hciBpbiBkZXIgRGF0ZWktU3BlcnJlLiBXaWNodGlnIG5pY2h0IG51cg0K +ICAgICAgICAgICAgICAgICMgZ2VnZW4gTG9zdCBVcGRhdGVzLCBzb25kZXJuIGdlZ2VuIGRpZSBt +YXhJZC1SYWNlOiB6d2VpIHBhcmFsbGVsZQ0KICAgICAgICAgICAgICAgICMgUGVyc29uZW4tQW5s +YWdlbiB3dWVyZGVuIHNvbnN0IGRpZXNlbGJlIG1heElkIGxlc2VuIHVuZCBJREVOVElTQ0hFDQog +ICAgICAgICAgICAgICAgIyBJRHMgdmVyZ2ViZW4gKGRvcHBlbHRlIFBlcnNvbmVuLUlEcyA9IGtv +cnJ1cHRlciBTdGF0ZSkuDQogICAgICAgICAgICAgICAgJHBlcnNSZXMgPSAkbnVsbA0KICAgICAg +ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgJHBlcnNSZXMgPSBJbnZva2UtV2l0aEZp +bGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQt +SnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRtYXhJZCA9IDANCiAg +ICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgeyBpZiAoJHAu +aWQgLWd0ICRtYXhJZCkgeyAkbWF4SWQgPSAkcC5pZCB9IH0NCiAgICAgICAgICAgICAgICAkbmV1 +ZUlkID0gJG1heElkICsgMQ0KDQogICAgICAgICAgICAgICAgIyBFaW5yZWlodW5ncy1Mb2dpazog +InVudGVuIiAoRGVmYXVsdCksICJ2b3IiIG9kZXIgIm5hY2giIGVpbmVyIFJlZmVyZW56cGVyc29u +DQogICAgICAgICAgICAgICAgJGVpbnJlaWhlbiA9ICd1bnRlbicNCiAgICAgICAgICAgICAgICBp +ZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW5yZWloZW4nXSAtYW5kICRuZXUuZWlucmVp +aGVuKSB7ICRlaW5yZWloZW4gPSAoW3N0cmluZ10kbmV1LmVpbnJlaWhlbikuVG9Mb3dlcigpIH0N +CiAgICAgICAgICAgICAgICAkcmVmSWQgPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgkbmV1 +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3JlZmVyZW56SWQnXSAtYW5kICRudWxsIC1uZSAkbmV1LnJl +ZmVyZW56SWQpIHsgJHJlZklkID0gW2ludF0kbmV1LnJlZmVyZW56SWQgfQ0KDQogICAgICAgICAg +ICAgICAgJHppZWxQb3MgPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgoJGVpbnJlaWhlbiAt +ZXEgJ3ZvcicgLW9yICRlaW5yZWloZW4gLWVxICduYWNoJykgLWFuZCAkbnVsbCAtbmUgJHJlZklk +KSB7DQogICAgICAgICAgICAgICAgICAgICRyZWZQb3MgPSAkbnVsbA0KICAgICAgICAgICAgICAg +ICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKFtpbnRdJHAuaWQgLWVxICRyZWZJZCkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRyZWZQb3MgPSBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sncG9zaXRpb24n +XSAtYW5kICRwLnBvc2l0aW9uKSB7IFtpbnRdJHAucG9zaXRpb24gfSBlbHNlIHsgMCB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5l +ICRyZWZQb3MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR6aWVsUG9zID0gaWYgKCRlaW5y +ZWloZW4gLWVxICd2b3InKSB7ICRyZWZQb3MgfSBlbHNlIHsgJHJlZlBvcyArIDEgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgIyBQb3NpdGlvbmVuIGFiIHppZWxQb3MgdW0gMSBuYWNoIGhpbnRl +biBzY2hpZWJlbg0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51 +bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHAgPSBpZiAoJHAu +UFNPYmplY3QuUHJvcGVydGllc1sncG9zaXRpb24nXSAtYW5kICRwLnBvc2l0aW9uKSB7IFtpbnRd +JHAucG9zaXRpb24gfSBlbHNlIHsgMCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRwcCAtZ2UgJHppZWxQb3MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10pIHsgJHAucG9zaXRpb24gPSAkcHAg +KyAxIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRwIHwgQWRkLU1l +bWJlciAtTm90ZVByb3BlcnR5TmFtZSAncG9zaXRpb24nIC1Ob3RlUHJvcGVydHlWYWx1ZSAoJHBw +ICsgMSkgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkemllbFBvcykgew0KICAgICAgICAgICAg +ICAgICAgICAkbWF4UG9zID0gMA0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAk +cGxhbnVuZy5wZXJzb25lbikgeyAkcG9zID0gaWYgKCRwLnBvc2l0aW9uKSB7IFtpbnRdJHAucG9z +aXRpb24gfSBlbHNlIHsgMCB9OyBpZiAoJHBvcyAtZ3QgJG1heFBvcykgeyAkbWF4UG9zID0gJHBv +cyB9IH0NCiAgICAgICAgICAgICAgICAgICAgJHppZWxQb3MgPSAkbWF4UG9zICsgMQ0KICAgICAg +ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRwZXJzb24gPSBbb3JkZXJlZF1Aew0KICAg +ICAgICAgICAgICAgICAgICBpZCA9ICRuZXVlSWQNCiAgICAgICAgICAgICAgICAgICAgYWt0aXYg +PSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3RpdiddKSB7ICRuZXUuYWt0aXYgfSBl +bHNlIHsgJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICBuYW1lID0gJG5ldS5uYW1lDQogICAg +ICAgICAgICAgICAgICAgIHZvcm5hbWUgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2 +b3JuYW1lJ10pIHsgJG5ldS52b3JuYW1lIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAg +ICAgZGllbnN0Z3JhZCA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2RpZW5zdGdyYWQn +XSkgeyAkbmV1LmRpZW5zdGdyYWQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBm +dW5rdGlvbiA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Z1bmt0aW9uJ10pIHsgJG5l +dS5mdW5rdGlvbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGdydXBwZSA9IGlm +ICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dydXBwZSddKSB7ICRuZXUuZ3J1cHBlIH0gZWxz +ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgb2UgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9w +ZXJ0aWVzWydvZSddKSB7ICRuZXUub2UgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAg +ICBkaWVuc3RudW1tZXIgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydkaWVuc3RudW1t +ZXInXSkgeyAkbmV1LmRpZW5zdG51bW1lciB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAg +ICAgIHRlbGVmb24gPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZWxlZm9uJ10pIHsg +JG5ldS50ZWxlZm9uIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24g +PSAkemllbFBvcw0KICAgICAgICAgICAgICAgICAgICBlbWFpbCA9IGlmICgkbmV1LlBTT2JqZWN0 +LlByb3BlcnRpZXNbJ2VtYWlsJ10pIHsgJG5ldS5lbWFpbCB9IGVsc2UgeyAnJyB9DQogICAgICAg +ICAgICAgICAgICAgIG53S2VubnVuZyA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ253 +S2VubnVuZyddKSB7ICRuZXUubndLZW5udW5nIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAg +ICAgICAgZ2VidXJ0c2RhdHVtID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZ2VidXJ0 +c2RhdHVtJ10pIHsgJG5ldS5nZWJ1cnRzZGF0dW0gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAg +ICAgICAgICBlbERnbFF1YWxpZml6aWVydCA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNb +J2VsRGdsUXVhbGlmaXppZXJ0J10pIHsgW2Jvb2xdJG5ldS5lbERnbFF1YWxpZml6aWVydCB9IGVs +c2UgeyAkZmFsc2UgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIE1hcmtl +ciBmdWVyIFBlcnNvbmVuLCBkaWUgcGVyIEV4Y2VsLUltcG9ydCBmcmlzY2ggYW5nZWxlZ3QNCiAg +ICAgICAgICAgICAgICAjIHd1cmRlbi4gUGVyc29uYWx2ZXJ3YWx0dW5nIGJsZW5kZXQgc2llIGlt +IE5ldWltcG9ydC1CbG9jaw0KICAgICAgICAgICAgICAgICMgb2JlbiBlaW4sIGJpcyBkYXMgRmxh +ZyBtYW51ZWxsIHdlZ2dlc2V0enQgd2lyZCAoRXJsZWRpZ3QtDQogICAgICAgICAgICAgICAgIyBC +dXR0b24pIG9kZXIgZGFzIGxldHp0ZSBQZmxpY2h0ZmVsZCAoRGllbnN0Z3J1cHBlKSBnZXBmbGVn +dA0KICAgICAgICAgICAgICAgICMgaXN0IHVuZCBkZXIgVXNlciBhdWYgIkJsb2NrIGxlZXJlbiIg +a2xpY2t0Lg0KICAgICAgICAgICAgICAgIGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lt +cG9ydE5ldUFtJ10gLWFuZCAkbmV1LmltcG9ydE5ldUFtKSB7DQogICAgICAgICAgICAgICAgICAg +ICRwZXJzb25bJ2ltcG9ydE5ldUFtJ10gPSBbc3RyaW5nXSRuZXUuaW1wb3J0TmV1QW0NCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHBsYW51bmcucGVyc29uZW4gKz0gW1BTQ3Vz +dG9tT2JqZWN0XSRwZXJzb24NCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFu +dW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICByZXR1cm4gQHsg +bmV1ZUlkID0gJG5ldWVJZDsgemllbFBvcyA9ICR6aWVsUG9zOyBlaW5yZWloZW4gPSAkZWlucmVp +aGVuIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAg +ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikg +NTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1M +b2dFaW50cmFnICdwZXJzb24uYW5nZWxlZ3QnIEB7IHBlcnNvbklkID0gJHBlcnNSZXMubmV1ZUlk +OyBuYW1lID0gIiQoJG5ldS52b3JuYW1lKSAkKCRuZXUubmFtZSkiLlRyaW0oKTsgZWlucmVpaGVu +ID0gJHBlcnNSZXMuZWlucmVpaGVuOyBwb3NpdGlvbiA9ICRwZXJzUmVzLnppZWxQb3MgfQ0KICAg +ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2FuZ2Vs +ZWd0JzsgaWQgPSAkcGVyc1Jlcy5uZXVlSWQ7IHBvc2l0aW9uID0gJHBlcnNSZXMuemllbFBvcyB9 +DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlm +ICgkUGF0aCAtbWF0Y2ggJ14vYXBpL3BlcnNvbmVuLyhcZCspJCcgLWFuZCAkTWV0aG9kIC1lcSAn +UFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbaW50XSRNYXRjaGVzWzFdDQogICAgICAgICAgICAg +ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJHVwZGF0ZSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNv +bg0KICAgICAgICAgICAgICAgICMgQXVkaXQtUGhhc2UgQS4zICgyMDI2LTA1LTIxKTogUHJpdmls +ZWdpZW4tU2NodXR6LiBSZWluZQ0KICAgICAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0LUFkbWlu +cyAoc2VoZW4uYWRtaW5pc3RyYXRpb249dHJ1ZSwgYWJlciBrZWluIFNVKQ0KICAgICAgICAgICAg +ICAgICMgZHVlcmZlbiBTdGFtbWRhdGVuIGVkaXRpZXJlbiwgYWJlciBLRUlORSBTaWNodGJhcmtl +aXRzLQ0KICAgICAgICAgICAgICAgICMgT3ZlcnJpZGVzIChgc2VoZW5gKSBvZGVyIGVkaXRpZXIt +UmVjaHRlIChgZWRpdFJlY2h0ZWApIHNldHplbg0KICAgICAgICAgICAgICAgICMg4oCUIHNvbnN0 +IGtvZW5udGVuIHNpZSBzaWNoIExvZ2J1Y2gtL1N0YXRpc3Rpay1TaWNodCBzZWxic3QNCiAgICAg +ICAgICAgICAgICAjIGZyZWlzY2hhbHRlbi4gUGVyIERldlRvb2xzLW1hbmlwdWxpZXJ0ZXMgUGF5 +bG9hZCBhYmZhbmdlbi4NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVz +ZXIpKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ3NlaGVuJ10pICAgICAgeyAkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCdz +ZWhlbicpIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCR1cGRhdGUuUFNPYmplY3QuUHJvcGVy +dGllc1snZWRpdFJlY2h0ZSddKSB7ICR1cGRhdGUuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUo +J2VkaXRSZWNodGUnKSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRwdXRS +ZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgJHB1dFJl +cyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAg +ICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAg +ICAgJGdlZnVuZGVuICAgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAkYWx0ZVdlcnRlICA9IEB7 +fQ0KICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0gJycNCiAgICAgICAgICAgICAgICBmb3Jl +YWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAo +JHAuaWQgLWVxICRwZXJzb25JZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBlcnNvbk5h +bWUgPSAoKCIkKCRwLnZvcm5hbWUpICQoJHAubmFtZSkiKS5UcmltKCkpDQogICAgICAgICAgICAg +ICAgICAgICAgICBmb3JlYWNoICgkcHJvcCBpbiAkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXMp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHByb3AuTmFtZSAtbmUgJ2lkJykg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZVdlcnRlWyRwcm9wLk5hbWVd +ID0gaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJHByb3AuTmFtZV0pIHsgJHAuKCRwcm9wLk5h +bWUpIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJHByb3AuTmFtZV0pIHsgJHAuKCRwcm9wLk5hbWUpID0g +JHByb3AuVmFsdWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHAg +fCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRwcm9wLk5hbWUgLU5vdGVQcm9wZXJ0eVZh +bHVlICRwcm9wLlZhbHVlIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGdlZnVu +ZGVuID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGdl +ZnVuZGVuKSB7IHJldHVybiBAeyBnZWZ1bmRlbiA9ICRmYWxzZSB9IH0NCiAgICAgICAgICAgICAg +ICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAg +ICAgICAgICAgICAgICByZXR1cm4gQHsgZ2VmdW5kZW4gPSAkdHJ1ZTsgYWx0ZVdlcnRlID0gJGFs +dGVXZXJ0ZTsgcGVyc29uTmFtZSA9ICRwZXJzb25OYW1lIH0NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcHV0UmVzLmdlZnVuZGVuKSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICJQZXJzb24gJHBlcnNvbklkIG5pY2h0IGdlZnVuZGVuIiA0MDQ7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYWx0ZVdlcnRlICA9ICRwdXRSZXMuYWx0ZVdlcnRl +DQogICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAkcHV0UmVzLnBlcnNvbk5hbWUNCg0KICAg +ICAgICAgICAgICAgICMgRGlmZi1EaWN0IOKAlCBudXIgRmVsZGVyLCBpbiBkZW5lbiBzaWNoIGRl +ciBXZXJ0IHRhdHNhZWNobGljaA0KICAgICAgICAgICAgICAgICMgZ2VhZW5kZXJ0IGhhdC4gSlNP +Ti1zdGFiaWxlIFZlcmdsZWljaHNiYXNpcy4NCiAgICAgICAgICAgICAgICAkZ2VhZW5kZXJ0ID0g +W29yZGVyZWRdQHt9DQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHByb3AgaW4gJHVwZGF0ZS5Q +U09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcHJvcC5OYW1l +IC1lcSAnaWQnKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgJGFsdFZhbCAgPSAk +YWx0ZVdlcnRlWyRwcm9wLk5hbWVdDQogICAgICAgICAgICAgICAgICAgICRuZXVWYWwgID0gJHBy +b3AuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAgJGFsdEpzb24gPSAoJGFsdFZhbCB8IENvbnZl +cnRUby1Kc29uIC1Db21wcmVzcyAtRGVwdGggOCkNCiAgICAgICAgICAgICAgICAgICAgJG5ldUpz +b24gPSAoJG5ldVZhbCB8IENvbnZlcnRUby1Kc29uIC1Db21wcmVzcyAtRGVwdGggOCkNCiAgICAg +ICAgICAgICAgICAgICAgaWYgKCRhbHRKc29uIC1uZSAkbmV1SnNvbikgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgJGdlYWVuZGVydFskcHJvcC5OYW1lXSA9IFtvcmRlcmVkXUB7IGFsdCA9ICRh +bHRWYWw7IG5ldSA9ICRuZXVWYWwgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgfQ0KDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVyc29uLmdlYWVu +ZGVydCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkICA9ICRwZXJz +b25JZA0KICAgICAgICAgICAgICAgICAgICBuYW1lICAgICAgPSAkcGVyc29uTmFtZQ0KICAgICAg +ICAgICAgICAgICAgICBnZWFlbmRlcnQgPSAkZ2VhZW5kZXJ0DQogICAgICAgICAgICAgICAgfSkN +CiAgICAgICAgICAgICAgICAjIEhpbndlaXMtVHJpZ2dlcjogSWRlbnRpdGFldHMtQWVuZGVydW5n +IChud0tlbm51bmcgLyBlbWFpbCkgYmVrb21tdA0KICAgICAgICAgICAgICAgICMgZWluZW4gSW4t +QXBwLUhpbndlaXMgZnVlciBTVSArIEdlc2FtdHZlcmFudHdvcnRsaWNoZS4gUHJvIEZlbGQgZWlu +DQogICAgICAgICAgICAgICAgIyBlaWdlbmVyIEVpbnRyYWcsIGRhbWl0IGRhcyBNb2RhbCBsZXNi +YXIgYmxlaWJ0Lg0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmZWxkIGluIEAoJ253S2VubnVu +ZycsICdlbWFpbCcpKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkZ2VhZW5kZXJ0LkNvbnRh +aW5zKCRmZWxkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGRpZmYgPSAkZ2VhZW5kZXJ0 +WyRmZWxkXQ0KICAgICAgICAgICAgICAgICAgICAgICAgTmV3LUhpbndlaXMgJ2lkZW50aXRhZXRf +Z2VhZW5kZXJ0JyAoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJz +b25faWQgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbl9u +YW1lID0gJHBlcnNvbk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWxkICAgICAg +ICA9ICRmZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJfd2VydCAgPSAiJCgk +ZGlmZi5hbHQpIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldWVyX3dlcnQgID0gIiQo +JGRpZmYubmV1KSINCiAgICAgICAgICAgICAgICAgICAgICAgIH0pIChHZXQtQWt0dWVsbGVyQmVu +dXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9 +ICdha3R1YWxpc2llcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgIyBERUxFVEUgL2FwaS9wZXJzb25lbi97aWR9ICAgICAgICAgICAgLT4g +U29mdC1EZWxldGUgKGdlbG9lc2NodEFtIGdlc2V0enQsIFBlcnNvbiBibGVpYnQgaW0gRGF0ZW5z +YXR6IGZ1ZXIgUGFwaWVya29yYi1SdWVja2hvbHVuZykNCiAgICAgICAgICAgICMgREVMRVRFIC9h +cGkvcGVyc29uZW4ve2lkfT9lbmRndWVsdGlnPTEgLT4gSGFyZC1EZWxldGUgKFBlcnNvbiBrb21w +bGV0dCBlbnRmZXJuZW4sIEVpbnRyYWVnZS9Lb21tZW50YXJlIHZlcndhaXNlbikNCiAgICAgICAg +ICAgICMgVm9yIGRlbSBTb2Z0LURlbGV0ZSB3ZXJkZW4gaW0gc2VsYmVuIFp1ZyBiZXJlaXRzIFBh +cGllcmtvcmItRWludHJhZWdlIGF1ZmdlcmFldW10LCBkaWUgYWVsdGVyIGFscw0KICAgICAgICAg +ICAgIyBhZG1pbi5wYXBpZXJrb3JiVGFnZUF1ZmJld2FocnVuZyAoRGVmYXVsdCAzMCBUYWdlKSBz +aW5kLiBTbyBibGVpYnQgZGVyIERhdGVuc2F0eiBzY2hsYW5rLCBvaG5lDQogICAgICAgICAgICAj +IGVpbmVuIHNlcGFyYXRlbiBDcm9uLUpvYiB6dSBicmF1Y2hlbi4NCiAgICAgICAgICAgIGlmICgk +UGF0aCAtbWF0Y2ggJ14vYXBpL3BlcnNvbmVuLyhcZCspJCcgLWFuZCAkTWV0aG9kIC1lcSAnREVM +RVRFJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbaW50XSRNYXRjaGVzWzFdDQogICAgICAgICAgICAg +ICAgJGVuZGd1ZWx0aWcgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICBpZiAoJFJlcXVlc3QuVXJs +LlF1ZXJ5KSB7DQogICAgICAgICAgICAgICAgICAgICRxID0gW1N5c3RlbS5XZWIuSHR0cFV0aWxp +dHldOjpQYXJzZVF1ZXJ5U3RyaW5nKCRSZXF1ZXN0LlVybC5RdWVyeSkNCiAgICAgICAgICAgICAg +ICAgICAgJGVuZGd1ZWx0aWcgPSAoW3N0cmluZ10kcVsnZW5kZ3VlbHRpZyddKSAtZXEgJzEnDQog +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRkZWxSZXMgPSAkbnVsbA0KICAgICAg +ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgJGRlbFJlcyA9IEludm9rZS1XaXRoRmls +ZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1K +c29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgJGFkbWluICAgPSBSZWFk +LUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgJGF1ZmJld2FocnVuZyA9 +IDMwDQogICAgICAgICAgICAgICAgaWYgKCRhZG1pbiAtYW5kICRhZG1pbi5QU09iamVjdC5Qcm9w +ZXJ0aWVzWydwYXBpZXJrb3JiVGFnZUF1ZmJld2FocnVuZyddKSB7DQogICAgICAgICAgICAgICAg +ICAgIHRyeSB7ICRhdWZiZXdhaHJ1bmcgPSBbaW50XSRhZG1pbi5wYXBpZXJrb3JiVGFnZUF1ZmJl +d2FocnVuZyB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRq +ZXR6dCA9IChHZXQtRGF0ZSkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgICRwZXJzb25O +YW1lID0gJycNCiAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gPSAkZmFsc2UNCiAgICAgICAgICAg +ICAgICAkbmV1ZVBlcnNvbmVuID0gQCgpDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4g +JHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwLmlkIC1lcSAk +cGVyc29uSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRnZWZ1bmRlbiA9ICR0cnVlDQog +ICAgICAgICAgICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9ICgoIiQoJHAudm9ybmFtZSkgJCgk +cC5uYW1lKSIpLlRyaW0oKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZW5kZ3VlbHRp +Zykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGFyZC1EZWxldGU6IHVlYmVyc3By +aW5nZW4sIFBlcnNvbiBmbGllZ3QgcmF1cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWxvZXNjaHRBbSddKSB7 +ICRwLmdlbG9lc2NodEFtID0gJGpldHp0IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBl +bHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdnZWxvZXNjaHRBbScgLU5v +dGVQcm9wZXJ0eVZhbHVlICRqZXR6dCAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICRuZXVlUGVyc29uZW4gKz0gJHANCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICMgQXV0by1Q +dXJnZTogU29mdC1EZWxldGVkLVBlcnNvbmVuLCBkZXJlbiBnZWxvZXNjaHRBbSBhZWx0ZXINCiAg +ICAgICAgICAgICAgICAgICAgICAgICMgYWxzICRhdWZiZXdhaHJ1bmcgVGFnZSBpc3QsIHdlcmRl +biBoaWVyIGVuZGd1ZWx0aWcgZW50ZmVybnQuDQogICAgICAgICAgICAgICAgICAgICAgICAkcHVy +Z2UgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9w +ZXJ0aWVzWydnZWxvZXNjaHRBbSddIC1hbmQgJHAuZ2Vsb2VzY2h0QW0pIHsNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +YWx0ZXIgPSBbZGF0ZXRpbWVdJHAuZ2Vsb2VzY2h0QW0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKChOZXctVGltZVNwYW4gLVN0YXJ0ICRhbHRlciAtRW5kIChHZXQtRGF0ZSkp +LlRvdGFsRGF5cyAtZ3QgJGF1ZmJld2FocnVuZykgeyAkcHVyZ2UgPSAkdHJ1ZSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHB1cmdlKSB7ICRuZXVlUGVyc29u +ZW4gKz0gJHAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIGlmICgtbm90ICRnZWZ1bmRlbikgeyByZXR1cm4gQHsgZ2VmdW5kZW4gPSAk +ZmFsc2UgfSB9DQogICAgICAgICAgICAgICAgJHBsYW51bmcucGVyc29uZW4gPSBbb2JqZWN0W11d +QCgkbmV1ZVBlcnNvbmVuKQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51 +bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIHJldHVybiBAeyBn +ZWZ1bmRlbiA9ICR0cnVlOyBwZXJzb25OYW1lID0gJHBlcnNvbk5hbWU7IGpldHp0ID0gJGpldHp0 +IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAg +ICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAz +OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +ZGVsUmVzLmdlZnVuZGVuKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICJQZXJzb24gJHBlcnNvbklk +IG5pY2h0IGdlZnVuZGVuIiA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGVyc29u +TmFtZSA9ICRkZWxSZXMucGVyc29uTmFtZQ0KICAgICAgICAgICAgICAgICRqZXR6dCA9ICRkZWxS +ZXMuamV0enQNCiAgICAgICAgICAgICAgICBpZiAoJGVuZGd1ZWx0aWcpIHsNCiAgICAgICAgICAg +ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVyc29uLmVuZGd1ZWx0aWcuZ2Vsb2VzY2h0JyBA +eyBwZXJzb25JZCA9ICRwZXJzb25JZDsgbmFtZSA9ICRwZXJzb25OYW1lIH0NCiAgICAgICAgICAg +ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwZXJz +b24uaW4ucGFwaWVya29yYicgQHsgcGVyc29uSWQgPSAkcGVyc29uSWQ7IG5hbWUgPSAkcGVyc29u +TmFtZTsgZ2Vsb2VzY2h0QW0gPSAkamV0enQgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQn +OyBtb2R1cyA9IGlmICgkZW5kZ3VlbHRpZykgeyAnZW5kZ3VlbHRpZycgfSBlbHNlIHsgJ3BhcGll +cmtvcmInIH0gfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAg +ICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BlcnNvbmVuL3JlaWhlbmZvbGdlJyAtYW5kICRN +ZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRt +aW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAg +ICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJh +Z2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRyZWloZW5mb2xn +ZSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAg +ICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcu +anNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRyIGluICRyZWloZW5mb2xn +ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5n +LnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5pZCAt +ZXEgJHIuaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddKSB7ICRwLnBvc2l0aW9uID0gJHIucG9zaXRp +b24gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRwIHwgQWRk +LU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAncG9zaXRpb24nIC1Ob3RlUHJvcGVydHlWYWx1ZSAk +ci5wb3NpdGlvbiAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +YnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQt +TnVsbA0KICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICB9 +IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2Nr +LUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbmVuLnJlaWhlbmZvbGdlLmdlYWVuZGVydCcg +QHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg +PSAnYWt0dWFsaXNpZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg +IH0NCg0KICAgICAgICAgICAgIyA9PT09PSBISU5XRUlTRSAoSW4tQXBwLUJhbm5lci9Nb2RhbC1T +eXN0ZW0pID09PT09DQogICAgICAgICAgICAjIEdFVCAgL2FwaS9oaW53ZWlzZSAgICAgICAgICAg +IC0+IG9mZmVuZSBIaW53ZWlzZSBmdWVyIGRlbiBlaW5nZWxvZ2d0ZW4gVXNlcg0KICAgICAgICAg +ICAgIyBQT1NUIC9hcGkvaGlud2Vpc2Uve2lkfS9rZW5udG5pcyAtPiBLZW5udG5pc25haG1lIHNl +dHplbg0KICAgICAgICAgICAgIyBHRVQgIC9hcGkvaGlud2Vpc2UvdWViZXJzaWNodCAtPiBTVS1v +bmx5LCB2b2xsc3RhZW5kaWdlIFNpY2h0IGlua2wuIExlc2UtU3RhdHVzDQogICAgICAgICAgICBp +ZiAoJFBhdGggLWVxICcvYXBpL2hpbndlaXNlJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQog +ICAgICAgICAgICAgICAgIyBHYXRlZDogbnVyIEVtcGZhZW5nZXIgKFNVIG9kZXIgR2VzYW10dmVy +YW50d29ydGxpY2gpIGR1ZXJmZW4gdWViZXJoYXVwdCBmcmFnZW4NCiAgICAgICAgICAgICAgICAk +ciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJHIuaXN0U3VwZXJVc2Vy +IC1vciAkci5pc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCkpIHsNCiAgICAgICAgICAgICAgICAgICAg +U2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9IEAoKSB9DQogICAgICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIElu +dm9rZS1IaW53ZWlzUHJ1bmluZw0KICAgICAgICAgICAgICAgICRoID0gUmVhZC1Kc29uT2JqZWN0 +ICdoaW53ZWlzZS5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGggLW9yIC1u +b3QgJGguUFNPYmplY3QuUHJvcGVydGllc1snaGlud2Vpc2UnXSkgew0KICAgICAgICAgICAgICAg +ICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNlID0gQCgpIH0NCiAgICAg +ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgJG9mZmVuID0gQCgpDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGVpbnRyYWcgaW4gQCgk +aC5oaW53ZWlzZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlzdEVtcGZhZW5nZXIgPSAkZmFs +c2UNCiAgICAgICAgICAgICAgICAgICAgJGlzdEdlbGVzZW4gICAgPSAkZmFsc2UNCiAgICAgICAg +ICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJGVpbnRyYWcua2VubnRuaXNuYWhtZW4uUFNPYmpl +Y3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtTWF0Y2hL +ZW5udW5nIChbc3RyaW5nXSRwLk5hbWUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +JGlzdEVtcGZhZW5nZXIgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +bnVsbCAtbmUgJHAuVmFsdWUpIHsgJGlzdEdlbGVzZW4gPSAkdHJ1ZSB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGlzdEVtcGZhZW5nZXIgLWFu +ZCAtbm90ICRpc3RHZWxlc2VuKSB7ICRvZmZlbiArPSAkZWludHJhZyB9DQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgaGlud2Vp +c2UgPSBbb2JqZWN0W11dJG9mZmVuIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvaGlud2Vpc2UvKFxk +Kykva2VubnRuaXMkJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAg +ICRoaW53ZWlzSWQgPSBbaW50XSRNYXRjaGVzWzFdDQogICAgICAgICAgICAgICAgJHIgPSBHZXQt +UmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKCRyLmlzdFN1cGVyVXNlciAtb3IgJHIu +aXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy +b3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUNCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNHZXNldHp0 +ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNUeXAgPSAk +bnVsbA0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ2hpbndlaXNlLmpzb24n +IHsNCiAgICAgICAgICAgICAgICAgICAgJGggPSBSZWFkLUpzb25PYmplY3QgJ2hpbndlaXNlLmpz +b24nDQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGggLW9yIC1ub3QgJGguUFNP +YmplY3QuUHJvcGVydGllc1snaGlud2Vpc2UnXSkgeyByZXR1cm4gfQ0KICAgICAgICAgICAgICAg +ICAgICBmb3JlYWNoICgkZWludHJhZyBpbiBAKCRoLmhpbndlaXNlKSkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKFtpbnRdJGVpbnRyYWcuaWQgLW5lICRoaW53ZWlzSWQpIHsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBFcnN0IGRlbiBNYXRjaC1TbG90IGVybWl0 +dGVsbiwgZGFubiBhdXNzZXJoYWxiIGRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm9w +ZXJ0eS1FbnVtZXJhdGlvbiBpbi1wbGFjZSBzZXR6ZW4gKFBTIDUuMSBtYWcgZGFzDQogICAgICAg +ICAgICAgICAgICAgICAgICAjIE1vZGlmaXppZXJlbiB3YWVocmVuZCBmb3JlYWNoIG5pY2h0IGlt +bWVyKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaE5hbWUgPSAkbnVsbA0KICAgICAg +ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJGVpbnRyYWcua2VubnRuaXNuYWhtZW4u +UFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChU +ZXN0LU1hdGNoS2VubnVuZyAoW3N0cmluZ10kcC5OYW1lKSkgeyAkbWF0Y2hOYW1lID0gJHAuTmFt +ZTsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRtYXRjaE5hbWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHMg +PSAoR2V0LURhdGUpLlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5nKCd5eXl5LU1NLWRkVEhIOm1t +OnNzWicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVpbnRyYWcua2VubnRuaXNuYWht +ZW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRtYXRjaE5hbWUgLU5vdGVQcm9wZXJ0 +eVZhbHVlICR0cyAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NyaXB0Omhp +bndlaXNLZW5udG5pc0dlc2V0enQgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgkZWludHJhZy5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0eXAnXSkgeyAkc2NyaXB0Omhpbndl +aXNLZW5udG5pc1R5cCA9IFtzdHJpbmddJGVpbnRyYWcudHlwIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2Vz +ZXR6dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnaGlud2Vp +c2UuanNvbicgJGggfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgJGdlc2V0enQgPSBbYm9vbF0kc2Ny +aXB0OmhpbndlaXNLZW5udG5pc0dlc2V0enQNCiAgICAgICAgICAgICAgICAka2VubnRuaXNUeXAg +PSAkc2NyaXB0OmhpbndlaXNLZW5udG5pc1R5cA0KICAgICAgICAgICAgICAgICRzY3JpcHQ6aGlu +d2Vpc0tlbm50bmlzR2VzZXR6dCA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6aGlu +d2Vpc0tlbm50bmlzVHlwID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZ2VzZXR6 +dCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAiSGlud2VpcyAk +aGlud2Vpc0lkIG5pY2h0IGdlZnVuZGVuIG9kZXIgbmljaHQgZnVlciBTaWUgYmVzdGltbXQiIDQw +NDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGxvZ0ZlbGRl +ciA9IEB7IGhpbndlaXNJZCA9ICRoaW53ZWlzSWQgfQ0KICAgICAgICAgICAgICAgIGlmICgka2Vu +bnRuaXNUeXApIHsgJGxvZ0ZlbGRlclsndHlwJ10gPSAka2VubnRuaXNUeXAgfQ0KICAgICAgICAg +ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2hpbndlaXMua2VubnRuaXMnICRsb2dGZWxkZXINCiAg +ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdrZW5u +dG5pc19nZXNldHp0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0N +CiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGlud2Vpc2UvdWViZXJzaWNodCcgLWFu +ZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlz +dFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXInIDQwMzsg +Y29udGludWUgfQ0KICAgICAgICAgICAgICAgIEludm9rZS1IaW53ZWlzUHJ1bmluZw0KICAgICAg +ICAgICAgICAgICRoID0gUmVhZC1Kc29uT2JqZWN0ICdoaW53ZWlzZS5qc29uJw0KICAgICAgICAg +ICAgICAgIGlmICgkbnVsbCAtZXEgJGggLW9yIC1ub3QgJGguUFNPYmplY3QuUHJvcGVydGllc1sn +aGlud2Vpc2UnXSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3Bv +bnNlIEB7IGhpbndlaXNlID0gQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z +ZSBAeyBoaW53ZWlzZSA9IFtvYmplY3RbXV1AKCRoLmhpbndlaXNlKSB9DQogICAgICAgICAgICAg +ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBNSVRURUlM +VU5HRU4gKFNwcmludCBELTNiLCAyMDI2LTA1LTI5KSA9PT09PQ0KICAgICAgICAgICAgIyBWb20g +U1UgbWFudWVsbCBnZXBmbGVndGVzIEhpbndlaXMtTW9kYWwtU3lzdGVtIChzZXBhcmF0IHZvbg0K +ICAgICAgICAgICAgIyAvYXBpL2hpbndlaXNlLCBkYXMgaXN0IG51ciBmdWVyIFN5c3RlbS1FcmVp +Z25pc3NlIFNVL0dWKS4NCiAgICAgICAgICAgICMgU2NoZW1hICsgRmlsdGVydW5nLUxvZ2lrIGdl +c3BpZWdlbHQgYXVzIGRldi9zZXJ2ZXIucHk6DQogICAgICAgICAgICAjICAgX21pdHRlaWx1bmdl +bl9mdWVyX2FrdHVlbGxlbl91c2VyKCkgYnp3LiBfcGVyc29uX2F1c19waWQoKS4NCiAgICAgICAg +ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVxICdH +RVQnKSB7DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBtaXR0 +ZWlsdW5nZW4gPSAoR2V0LU1pdHRlaWx1bmdlbkZ1ZXJBa3R1ZWxsZW5Vc2VyKSB9DQogICAgICAg +ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAt +ZXEgJy9hcGkvbWl0dGVpbHVuZ2VuL2FsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAg +ICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nDQogICAgICAgICAgICAg +ICAgJGxpc3RlID0gQCgpDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkbSAtYW5kICRt +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdlbiddKSB7DQogICAgICAgICAgICAgICAg +ICAgICRsaXN0ZSA9IEAoJG0ubWl0dGVpbHVuZ2VuKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG1pdHRlaWx1bmdlbiA9IFtv +YmplY3RbXV0kbGlzdGUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9 +DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL21pdHRlaWx1bmdlbicgLWFuZCAkTWV0 +aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBl +clVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gTWl0 +dGVpbHVuZ2VuIGFubGVnZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRyYXcg +PSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcmF3KSB7IFNl +bmQtRXJyb3IgJFJlc3BvbnNlICdCb2R5IGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAg +ICAgICAgICB0cnkgeyAkYm9keSA9ICRyYXcgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBT +ZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZXMgSlNPTicgNDAwOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgIyBTZXJ2ZXItc2VpdGlnZSBTYW5pdGlzaWVydW5nIChTdG9yZWQtWFNT +KTogdGl0ZWwgKyB0ZXh0IHdlcmRlbg0KICAgICAgICAgICAgICAgICMgaW0gQ2xpZW50IHZpYSBp +bm5lckhUTUwgZ2VyZW5kZXJ0Lg0KICAgICAgICAgICAgICAgICR0aXRlbCA9IENvbnZlcnRUby1T +YWZlUmljaEh0bWwgKChbc3RyaW5nXSgkYm9keS50aXRlbCkpLlRyaW0oKSkNCiAgICAgICAgICAg +ICAgICAkdGV4dCAgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICgoW3N0cmluZ10oJGJvZHkudGV4 +dCkpLlRyaW0oKSkNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdGl0ZWwpIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJ1RpdGVsIGlzdCBQZmxpY2h0ZmVsZCcgNDAwOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgaWYgKC1ub3QgJHRleHQpICB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdUZXh0 +IGlzdCBQZmxpY2h0ZmVsZCcgIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRyYW5k +ID0gLWpvaW4gKCg0OC4uNTcpICsgKDk3Li4xMjIpIHwgR2V0LVJhbmRvbSAtQ291bnQgNiB8IEZv +ckVhY2gtT2JqZWN0IHsgW2NoYXJdJF8gfSkNCiAgICAgICAgICAgICAgICAkbXMgPSBbaW50NjRd +KFtEYXRlVGltZU9mZnNldF06OlV0Y05vdy5Ub1VuaXhUaW1lTWlsbGlzZWNvbmRzKCkpDQogICAg +ICAgICAgICAgICAgJG5ldWVJZCA9ICJtXyR7bXN9XyR7cmFuZH0iDQogICAgICAgICAgICAgICAg +JGVtcGZEZWZhdWx0ID0gW3BzY3VzdG9tb2JqZWN0XUB7DQogICAgICAgICAgICAgICAgICAgIGFs +bGUgPSAkdHJ1ZTsgcGVyc29uZW4gPSBAKCk7IGdydXBwZW4gPSBAKCk7IHJvbGxlbiA9IEAoKQ0K +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZW1wZiA9IGlmICgkYm9keS5QU09i +amVjdC5Qcm9wZXJ0aWVzWydlbXBmYWVuZ2VyJ10pIHsgJGJvZHkuZW1wZmFlbmdlciB9IGVsc2Ug +eyAkZW1wZkRlZmF1bHQgfQ0KICAgICAgICAgICAgICAgICRuZXUgPSBbcHNjdXN0b21vYmplY3Rd +QHsNCiAgICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgID0gJG5ldWVJZA0KICAgICAgICAg +ICAgICAgICAgICB0aXRlbCAgICAgICAgPSAkdGl0ZWwNCiAgICAgICAgICAgICAgICAgICAgdGV4 +dCAgICAgICAgID0gJHRleHQNCiAgICAgICAgICAgICAgICAgICAgdGh1bWJuYWlsICAgID0gaWYg +KCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RodW1ibmFpbCddKSB7ICRib2R5LnRodW1ibmFp +bCB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAgIHBkZiAgICAgICAgICA9IGlm +ICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZGYnXSkgICAgICAgeyAkYm9keS5wZGYgfSAg +ICAgICBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyICAgICAgPSBp +ZiAoJGJvZHkuUFNPYmplY3QuUHJvcGVydGllc1sndHJpZ2dlciddIC1hbmQgJGJvZHkudHJpZ2dl +cikgeyBbc3RyaW5nXSRib2R5LnRyaWdnZXIgfSBlbHNlIHsgJ2Vpbm1hbCcgfQ0KICAgICAgICAg +ICAgICAgICAgICBiaXNEYXR1bSAgICAgPSBpZiAoJGJvZHkuUFNPYmplY3QuUHJvcGVydGllc1sn +YmlzRGF0dW0nXSkgIHsgJGJvZHkuYmlzRGF0dW0gfSAgZWxzZSB7ICRudWxsIH0NCiAgICAgICAg +ICAgICAgICAgICAgZW1wZmFlbmdlciAgID0gJGVtcGYNCiAgICAgICAgICAgICAgICAgICAgZXJz +dGVsbHRBbSAgID0gKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygneXl5eS1N +TS1kZFRISDptbTpzc1onKQ0KICAgICAgICAgICAgICAgICAgICBlcnN0ZWxsdFZvbiAgPSAoR2V0 +LUFrdHVlbGxlckJlbnV0emVyKQ0KICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSAk +bnVsbA0KICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24gPSAkbnVsbA0KICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdtaXR0ZWlsdW5n +ZW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0 +dGVpbHVuZ2VuLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJG0pIHsg +JG0gPSBbcHNjdXN0b21vYmplY3RdQHsgbWl0dGVpbHVuZ2VuID0gQCgpOyBnZWxlc2VuID0gW3Bz +Y3VzdG9tb2JqZWN0XUB7fSB9IH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJG0uUFNP +YmplY3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICRtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSBtaXR0ZWlsdW5nZW4gLU5vdGVQ +cm9wZXJ0eVZhbHVlIEAoKSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWxlc2VuJ10pIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICRtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFt +ZSBnZWxlc2VuIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW3BzY3VzdG9tb2JqZWN0XUB7fSkgLUZvcmNl +DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgIyBuZXVlc3RlIG9i +ZW4NCiAgICAgICAgICAgICAgICAgICAgJG0ubWl0dGVpbHVuZ2VuID0gQCgkbmV1KSArIEAoJG0u +bWl0dGVpbHVuZ2VuKQ0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdtaXR0 +ZWlsdW5nZW4uanNvbicgJG0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVs +bA0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21pdHRlaWx1bmcuYW5nZWxlZ3Qn +IEB7IGlkID0gJG5ldWVJZDsgdGl0ZWwgPSAkdGl0ZWwgfQ0KICAgICAgICAgICAgICAgIFNlbmQt +SnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2FuZ2VsZWd0JzsgbWl0dGVpbHVuZyA9 +ICRuZXUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAg +ICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2FwaS9taXR0ZWlsdW5nZW4vKFtcdy1dKykkJyAtYW5k +ICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0 +U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlcicgNDAzOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgJG1pZCA9ICRNYXRjaGVzWzFdDQogICAgICAgICAg +ICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90 +ICRyYXcpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JvZHkgZmVobHQnIDQwMDsgY29udGludWUg +fQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRib2R5ID0gJHJhdyB8IENvbnZlcnRGcm9tLUpzb24g +fSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdHZWZ1bmRlbiA9ICRm +YWxzZQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ1ppZWwgPSAkbnVsbA0KICAg +ICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21pdHRlaWx1bmdlbi5qc29uJyB7DQog +ICAgICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNv +bicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkbSAtb3IgLW5vdCAkbS5QU09i +amVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgeyByZXR1cm4gfQ0KICAgICAgICAgICAg +ICAgICAgICBmb3JlYWNoICgkZWludHJhZyBpbiBAKCRtLm1pdHRlaWx1bmdlbikpIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXSRlaW50cmFnLmlkIC1uZSAkbWlkKSB7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmZWxkIGluICd0aXRl +bCcsJ3RleHQnLCd0aHVtYm5haWwnLCdwZGYnLCd0cmlnZ2VyJywnYmlzRGF0dW0nLCdlbXBmYWVu +Z2VyJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYm9keS5QU09iamVjdC5Q +cm9wZXJ0aWVzWyRmZWxkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2Vy +dCA9ICRib2R5LiRmZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGZl +bGQgLWVxICd0aXRlbCcgLW9yICRmZWxkIC1lcSAndGV4dCcpIC1hbmQgKCR3ZXJ0IC1pcyBbc3Ry +aW5nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3ZXJ0ID0gQ29u +dmVydFRvLVNhZmVSaWNoSHRtbCAkd2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlaW50cmFnIHwgQWRkLU1lbWJl +ciAtTm90ZVByb3BlcnR5TmFtZSAkZmVsZCAtTm90ZVByb3BlcnR5VmFsdWUgJHdlcnQgLUZvcmNl +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGVpbnRyYWcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJv +cGVydHlOYW1lIGdlYWVuZGVydEFtICAtTm90ZVByb3BlcnR5VmFsdWUgKChHZXQtRGF0ZSkuVG9V +bml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ3l5eXktTU0tZGRUSEg6bW06c3NaJykpIC1Gb3JjZQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgJGVpbnRyYWcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVy +dHlOYW1lIGdlYWVuZGVydFZvbiAtTm90ZVByb3BlcnR5VmFsdWUgKEdldC1Ba3R1ZWxsZXJCZW51 +dHplcikgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdH +ZWZ1bmRlbiA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1 +bmdaaWVsID0gJGVpbnRyYWcNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRzY3JpcHQ6bWl0dGVpbHVu +Z0dlZnVuZGVuKSB7IFdyaXRlLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91 +dC1OdWxsIH0NCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkc2NyaXB0Om1pdHRlaWx1bmdHZWZ1bmRlbikgew0KICAgICAgICAgICAgICAgICAg +ICBTZW5kLUVycm9yICRSZXNwb25zZSAiTWl0dGVpbHVuZyAkbWlkIG5pY2h0IGdlZnVuZGVuIiA0 +MDQ7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR6aWVsID0g +JHNjcmlwdDptaXR0ZWlsdW5nWmllbA0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVu +Z0dlZnVuZGVuID0gJGZhbHNlOyAkc2NyaXB0Om1pdHRlaWx1bmdaaWVsID0gJG51bGwNCiAgICAg +ICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdtaXR0ZWlsdW5nLmdlYWVuZGVydCcgQHsgaWQg +PSAkbWlkIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 +YXR1cyA9ICdnZWFlbmRlcnQnOyBtaXR0ZWlsdW5nID0gJHppZWwgfQ0KICAgICAgICAgICAgICAg +IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICde +L2FwaS9taXR0ZWlsdW5nZW4vKFtcdy1dKykkJyAtYW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7 +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVy +cm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlcicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJG1pZCA9ICRNYXRjaGVzWzFdDQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWls +dW5nR2Vsb2VzY2h0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9j +ayAnbWl0dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgJG0gPSBSZWFkLUpz +b25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLWVxICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdlbidd +KSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICR2b3JoZXIgPSBAKCRtLm1pdHRlaWx1 +bmdlbikNCiAgICAgICAgICAgICAgICAgICAgJG5hY2hoZXIgPSBAKCR2b3JoZXIgfCBXaGVyZS1P +YmplY3QgeyBbc3RyaW5nXSRfLmlkIC1uZSAkbWlkIH0pDQogICAgICAgICAgICAgICAgICAgIGlm +ICgkdm9yaGVyLkNvdW50IC1lcSAkbmFjaGhlci5Db3VudCkgeyByZXR1cm4gfQ0KICAgICAgICAg +ICAgICAgICAgICAkbS5taXR0ZWlsdW5nZW4gPSAkbmFjaGhlcg0KICAgICAgICAgICAgICAgICAg +ICAjIGdlbGVzZW4tRWludHJhZWdlIGZ1ZXIgZGllc2UgTWl0dGVpbHVuZyBhdWZyYWV1bWVuDQog +ICAgICAgICAgICAgICAgICAgIGlmICgkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWxlc2VuJ10p +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluIEAoJG0uZ2VsZXNlbi5Q +U09iamVjdC5Qcm9wZXJ0aWVzKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +cC5WYWx1ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRtaWRdKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRwLlZhbHVlLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRtaWQpDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmpl +Y3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAg +ICRzY3JpcHQ6bWl0dGVpbHVuZ0dlbG9lc2NodCA9ICR0cnVlDQogICAgICAgICAgICAgICAgfSB8 +IE91dC1OdWxsDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNjcmlwdDptaXR0ZWlsdW5nR2Vs +b2VzY2h0KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICJNaXR0 +ZWlsdW5nICRtaWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2Vsb2VzY2h0ID0gJGZhbHNl +DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnbWl0dGVpbHVuZy5nZWxvZXNjaHQn +IEB7IGlkID0gJG1pZCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z +ZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICMgUE9TVCAvYXBpL21pdHRlaWx1bmdlbi91cGxvYWQg +4oCUIFNVLW9ubHksIEJpbGQgKDIgTUIpIG9kZXIgUERGICgxMCBNQikNCiAgICAgICAgICAgICMg +Qm9keTogeyJhcnQiOiAiYmlsZCJ8InBkZiIsICJkYXRlaW5hbWUiOiAieC5wbmciLCAiZGF0YVVy +bCI6ICJkYXRhOi4uLiJ9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL21pdHRlaWx1 +bmdlbi91cGxvYWQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVy +IFN1cGVyVXNlciBkdWVyZmVuIE1pdHRlaWx1bmdzLUFuaGFlbmdlIGhvY2hsYWRlbicgNDAzOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgIyAxNCBNQiBNYXhTaXplLCB3ZWlsIDEwTUIgUERG +IGJhc2U2NC1jb2RpZXJ0IH4xMy40IE1CIFBheWxvYWQgd2lyZA0KICAgICAgICAgICAgICAgICRy +YXcgPSBSZWFkLUJvZHkgJFJlcXVlc3QgLU1heFNpemUgMTRNQg0KICAgICAgICAgICAgICAgIGlm +ICgtbm90ICRyYXcpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MgKG1h +eCAxNCBNQiknIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRib2R5ID0g +JHJhdyB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdV +bmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYXJ0ID0g +KFtzdHJpbmddJGJvZHkuYXJ0KS5Ub0xvd2VyKCkNCiAgICAgICAgICAgICAgICAkZGF0YVVybCA9 +IFtzdHJpbmddJGJvZHkuZGF0YVVybA0KICAgICAgICAgICAgICAgIGlmICgkYXJ0IC1uZSAnYmls +ZCcgLWFuZCAkYXJ0IC1uZSAncGRmJykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9y +ICRSZXNwb25zZSAnYXJ0IG11c3MgImJpbGQiIG9kZXIgInBkZiIgc2VpbicgNDAwOyBjb250aW51 +ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZXh0ID0gJG51bGw7ICRtYXhC +eXRlcyA9IDANCiAgICAgICAgICAgICAgICBpZiAoJGFydCAtZXEgJ2JpbGQnKSB7DQogICAgICAg +ICAgICAgICAgICAgIGlmICgkZGF0YVVybCAtbWF0Y2ggJ15kYXRhOmltYWdlLyhqcGVnfGpwZ3xw +bmd8d2VicCk7YmFzZTY0LCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRleHQgPSAoJE1h +dGNoZXNbMV0gLXJlcGxhY2UgJ2pwZWcnLCdqcGcnKQ0KICAgICAgICAgICAgICAgICAgICAgICAg +JG1heEJ5dGVzID0gMiAqIDEwMjQgKiAxMDI0DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnQmlsZDogZXJ3 +YXJ0ZXQgZGF0YTppbWFnZS8oanBlZ3xwbmd8d2VicCk7YmFzZTY0LC4uLicgNDAwOyBjb250aW51 +ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg +ICAgICAgICAgICAgICAgaWYgKCRkYXRhVXJsIC1saWtlICdkYXRhOmFwcGxpY2F0aW9uL3BkZjti +YXNlNjQsKicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRleHQgPSAncGRmJw0KICAgICAg +ICAgICAgICAgICAgICAgICAgJG1heEJ5dGVzID0gMTAgKiAxMDI0ICogMTAyNA0KICAgICAgICAg +ICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ1BERjogZXJ3YXJ0ZXQgZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0LC4uLicg +NDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICRiYXNlNjQgPSAkZGF0YVVybCAtcmVwbGFjZSAnXmRhdGE6W147XSs7 +YmFzZTY0LCcsICcnDQogICAgICAgICAgICAgICAgdHJ5IHsgJGJ5dGVzID0gW1N5c3RlbS5Db252 +ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygkYmFzZTY0KSB9DQogICAgICAgICAgICAgICAgY2F0Y2gg +eyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZSBiYXNlNjQtRGF0ZW4nIDQwMDsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgkYnl0ZXMuTGVuZ3RoIC1ndCAkbWF4Qnl0ZXMp +IHsNCiAgICAgICAgICAgICAgICAgICAgJGxpbWl0S2IgPSBbaW50XSgkbWF4Qnl0ZXMgLyAxMDI0 +KQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAiJGFydCB6dSBncm9z +cyAobWF4ICRsaW1pdEtiIEtCKSIgNDEzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAkdXBsb2FkRGlyID0gSm9pbi1QYXRoICREYXRhRGlyICd1cGxvYWRzJyB8 +IEpvaW4tUGF0aCAtQ2hpbGRQYXRoICdtaXR0ZWlsdW5nZW4nDQogICAgICAgICAgICAgICAgaWYg +KC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHVwbG9hZERpcikpIHsNCiAgICAgICAgICAg +ICAgICAgICAgdHJ5IHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkdXBsb2Fk +RGlyIC1Gb3JjZSB8IE91dC1OdWxsIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgJHJhbmQgPSAtam9pbiAoKDQ4Li41NykgKyAoOTcuLjEyMikgfCBHZXQtUmFu +ZG9tIC1Db3VudCA2IHwgRm9yRWFjaC1PYmplY3QgeyBbY2hhcl0kXyB9KQ0KICAgICAgICAgICAg +ICAgICRtcyA9IFtpbnQ2NF0oW0RhdGVUaW1lT2Zmc2V0XTo6VXRjTm93LlRvVW5peFRpbWVNaWxs +aXNlY29uZHMoKSkNCiAgICAgICAgICAgICAgICAkZmlsZW5hbWUgPSAibV8ke21zfV8ke3JhbmR9 +LiRleHQiDQogICAgICAgICAgICAgICAgJHppZWxQZmFkID0gSm9pbi1QYXRoICR1cGxvYWREaXIg +JGZpbGVuYW1lDQogICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRl +cygkemllbFBmYWQsICRieXRlcykNCiAgICAgICAgICAgICAgICAjIEtlaW5lIEFDTC1SZXN0cmlj +dGlvbjogVXBsb2FkcyBzaW5kIGZ1ZXIgZGllIEVtcGZhZW5nZXItDQogICAgICAgICAgICAgICAg +IyBHcnVwcGUgKG1hbnVlbGwgdm9tIFNVIHZlcnRlaWx0KSBnZWRhY2h0LCBuaWNodCBnZWhlaW0u +DQogICAgICAgICAgICAgICAgJHJlbFBmYWQgPSAiL2RhdGEvdXBsb2Fkcy9taXR0ZWlsdW5nZW4v +JGZpbGVuYW1lIg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21pdHRlaWx1bmcu +dXBsb2FkJyBAeyBhcnQgPSAkYXJ0OyBkYXRlaSA9ICRmaWxlbmFtZTsgYnl0ZXMgPSAkYnl0ZXMu +TGVuZ3RoIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 +YXR1cyA9ICdvayc7IHBmYWQgPSAkcmVsUGZhZDsgYnl0ZXMgPSAkYnl0ZXMuTGVuZ3RoIH0NCiAg +ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAo +JFBhdGggLW1hdGNoICdeL2FwaS9taXR0ZWlsdW5nZW4vKFtcdy1dKykva2VubnRuaXMkJyAtYW5k +ICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRtaWQgPSAkTWF0Y2hlc1sx +XQ0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAgICAgICRwaWQg +PSAkci5tZWluZVBlcnNvbklkDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGlkKSB7 +IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBQZXJzb24genVnZW9yZG5ldCcgNDAzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nS2VubnRuaXNPSyA9ICRm +YWxzZQ0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21pdHRlaWx1bmdlbi5q +c29uJyB7DQogICAgICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2JqZWN0ICdtaXR0ZWls +dW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkbSAtb3IgLW5v +dCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgeyByZXR1cm4gfQ0KICAg +ICAgICAgICAgICAgICAgICAkZXhpc3RpZXJ0ID0gQCgkbS5taXR0ZWlsdW5nZW4gfCBXaGVyZS1P +YmplY3QgeyBbc3RyaW5nXSRfLmlkIC1lcSAkbWlkIH0pLkNvdW50IC1ndCAwDQogICAgICAgICAg +ICAgICAgICAgIGlmICgtbm90ICRleGlzdGllcnQpIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJG0uUFNPYmplY3QuUHJvcGVydGllc1snZ2VsZXNlbiddKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAkbSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2Vs +ZXNlbiAtTm90ZVByb3BlcnR5VmFsdWUgKFtwc2N1c3RvbW9iamVjdF1Ae30pIC1Gb3JjZQ0KICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRwaWRTdHIgPSBbc3RyaW5n +XSRwaWQNCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJG0uZ2VsZXNlbi5QU09iamVjdC5Q +cm9wZXJ0aWVzWyRwaWRTdHJdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbS5nZWxlc2Vu +IHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGlkU3RyIC1Ob3RlUHJvcGVydHlWYWx1 +ZSAoW3BzY3VzdG9tb2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgJGhldXRlID0gKEdldC1EYXRlKS5Ub1N0cmluZygneXl5eS1NTS1k +ZCcpDQogICAgICAgICAgICAgICAgICAgICRtLmdlbGVzZW4uJHBpZFN0ciB8IEFkZC1NZW1iZXIg +LU5vdGVQcm9wZXJ0eU5hbWUgJG1pZCAtTm90ZVByb3BlcnR5VmFsdWUgJGhldXRlIC1Gb3JjZQ0K +ICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicg +JG0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdLZW5u +dG5pc09LID0gJHRydWUNCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAkc2NyaXB0Om1pdHRlaWx1bmdLZW5udG5pc09LKSB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICJNaXR0ZWlsdW5nICRtaWQgbmljaHQgZ2Vm +dW5kZW4iIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +JHNjcmlwdDptaXR0ZWlsdW5nS2VubnRuaXNPSyA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgIFNl +bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2tlbm50bmlzX2dlc2V0enQnIH0N +CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj +ID09PT09IEJBQ0tVUFMgPT09PT0NCiAgICAgICAgICAgICMgQmFja3VwLU5hbWluZyAoZ2V0YXJu +dCwgaW4gZGF0YS9jYWNoZS8pOg0KICAgICAgICAgICAgIyAtIHNuYXBfPHRzPi5iYWsgID0gQnVu +ZGxlIChwbGFudW5nK2FkbWluKSAtLSBtYW51ZWxsZSBCYWNrdXBzICsgU2ljaGVydW5nZW4NCiAg +ICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgIHZvciBXaWVkZXJoZXJzdGVsbHVuZw0KICAg +ICAgICAgICAgIyAtIGxlZ188dHM+LmJhayAgID0gTnVyIFBsYW51bmcgLS0gTGVnYWN5LUJhY2t1 +cHMgKyBBdXRvLVNpY2hlcnVuZ2VuDQogICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICB2 +b3IgUmVzZXQvRHVtbXlkYXRlbg0KICAgICAgICAgICAgIyAtIGNmZ188dHM+XzxoaW53ZWlzPi5i +YWsgPSBhZG1pbi5qc29uLUF1dG8tQmFja3VwcyAoQmFja3VwLUFkbWluSnNvbikNCiAgICAgICAg +ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9iYWNrdXAnIC1hbmQgJE1ldGhvZCAtZXEg +J1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2Jh +Y2t1cHMnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChCYWNr +dXBzKScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHBsYW51bmdQYXRoID0gSm9p +bi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg +KFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHBsYW51bmdQYXRoKSkgeyBTZW5kLUVycm9yICRSZXNw +b25zZSAnUGxhbnVuZyBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJHBsYW51bmdPYmogPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAg +ICAgICAgICAgICAkYWRtaW5PYmogICA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAg +ICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbk9iaikgeyAkYWRtaW5PYmogPSBOZXct +T2JqZWN0IFBTT2JqZWN0IH0NCiAgICAgICAgICAgICAgICAkdHMgPSBHZXQtRGF0ZSAtRm9ybWF0 +ICd5eXl5TU1kZF9ISG1tc3MnDQogICAgICAgICAgICAgICAgJGJuYW1lID0gInNuYXBfJHRzLmJh +ayINCiAgICAgICAgICAgICAgICAkYnVuZGxlID0gW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAg +ICAgICAgZm9ybWF0ICA9ICd2aTMtYmFja3VwLXYxJw0KICAgICAgICAgICAgICAgICAgICB0cyAg +ICAgID0gJHRzDQogICAgICAgICAgICAgICAgICAgIHBsYW51bmcgPSAkcGxhbnVuZ09iag0KICAg +ICAgICAgICAgICAgICAgICBhZG1pbiAgID0gJGFkbWluT2JqDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICRqc29uID0gJGJ1bmRsZSB8IENvbnZlcnRUby1Kc29uIC1EZXB0aCAz +MA0KICAgICAgICAgICAgICAgICRjYWNoZURpciA9IEpvaW4tUGF0aCAkRGF0YURpciAnY2FjaGUn +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGNhY2hl +RGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1QYXRoICRjYWNoZURpciAtRm9y +Y2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAgICAgV3JpdGUtQmFja3VwQnl0ZXMgKEpvaW4t +UGF0aCAkY2FjaGVEaXIgJGJuYW1lKSAkanNvbg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp +bnRyYWcgJ2JhY2t1cC5lcnN0ZWxsdCcgQHsgZGF0ZWluYW1lID0gJGJuYW1lOyBpbmhhbHQgPSAn +cGxhbnVuZythZG1pbicgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u +c2UgQHsgc3RhdHVzID0gJ2Vyc3RlbGx0JzsgZGF0ZWluYW1lID0gJGJuYW1lIH0NCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l +cSAnL2FwaS9wbGFudW5nL2JhY2t1cHMnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnYmFja3VwcycpKSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJhY2t1cHMpJyA0MDM7IGNvbnRp +bnVlIH0NCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgpDQogICAgICAgICAgICAgICAg +JGNhY2hlRGlyID0gSm9pbi1QYXRoICREYXRhRGlyICdjYWNoZScNCiAgICAgICAgICAgICAgICBp +ZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIpIHsNCiAgICAgICAgICAgICAgICAg +ICAgZm9yZWFjaCAoJG11c3RlciBpbiAnc25hcF8qLmJhaycsJ2xlZ18qLmJhaycpIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgIEdldC1DaGlsZEl0ZW0gLUxpdGVyYWxQYXRoICRjYWNoZURpciAt +RmlsdGVyICRtdXN0ZXIgLUZpbGUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUgfCBGb3JF +YWNoLU9iamVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5hbWUgPSAkXy5OYW1l +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cCA9IGlmICgkbmFtZSAtbWF0Y2ggJ192 +b3JfZHVtbXlfJykgeyAndm9yIER1bW15ZGF0ZW4nIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGVsc2VpZiAoJG5hbWUgLW1hdGNoICdfdm9yX3Jlc2V0XycpIHsgJ3ZvciBSZXNl +dCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkbmFtZSAtbWF0 +Y2ggJ192b3Jfd2llZGVyaGVyc3RlbGx1bmdfJykgeyAndm9yIFdpZWRlcmhlcnN0ZWxsdW5nJyB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJ21hbnVlbGwnIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkYnVuZGxlID0gJG5hbWUuU3RhcnRzV2l0aCgnc25h +cF8nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlaW50cmFlZ2UgKz0gW29yZGVyZWRd +QHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWluYW1lICAgPSAkbmFtZQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm9lc3NlICAgICA9ICRfLkxlbmd0aA0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnN0ZWxsdEFtICA9ICRfLkxhc3RXcml0 +ZVRpbWUuVG9TdHJpbmcoJ3MnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXAg +ICAgICAgICA9ICR0eXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oYWx0ICAg +ICAgPSBpZiAoJGJ1bmRsZSkgeyAnS29tcGxldHQgKFBsYW51bmcgKyBBZG1pbiknIH0gZWxzZSB7 +ICdOdXIgUGxhbnVuZycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3RCdW5k +bGUgICA9ICRidW5kbGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoJGVpbnRyYWVnZSB8IFNvcnQtT2JqZWN0 +IC1Qcm9wZXJ0eSBlcnN0ZWxsdEFtIC1EZXNjZW5kaW5nKQ0KICAgICAgICAgICAgICAgIFNlbmQt +SnNvbk9iamVjdCAkUmVzcG9uc2UgJGVpbnRyYWVnZQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVl +DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2FwaS9wbGFu +dW5nL2JhY2t1cC9kb3dubG9hZC8oLispJCcgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAg +ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdiYWNrdXBzJykpIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoQmFja3VwcyknIDQwMzsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgICRuYW1lID0gJE1hdGNoZXNbMV0NCiAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAoJG5hbWUgLW1hdGNoICdeKHNuYXBffGxlZ18pWzAtOV9hLXpBLVpdK1wu +YmFrJCcpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlciBEYXRlaW5hbWUnIDQw +MDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRmcCA9IEpvaW4tUGF0aCAkRGF0YURpciAo +J2NhY2hlLycgKyAkbmFtZSkNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1M +aXRlcmFsUGF0aCAkZnApKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNrdXAgbmljaHQgZ2Vm +dW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRrbGFydGV4dCA9IFJlYWQt +QmFja3VwVGV4dCAkZnANCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRrbGFydGV4dCkg +eyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwLURhdGVpIGtvbm50ZSBuaWNodCBnZWxlc2Vu +IHdlcmRlbicgNTAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJ5dGVzID0gW1N5c3Rl +bS5UZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRCeXRlcygka2xhcnRleHQpDQogICAgICAgICAgICAg +ICAgJFJlc3BvbnNlLlN0YXR1c0NvZGUgPSAyMDANCiAgICAgICAgICAgICAgICAkUmVzcG9uc2Uu +Q29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcNCiAgICAgICAg +ICAgICAgICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25zZQ0KICAgICAgICAgICAgICAgICRS +ZXNwb25zZS5IZWFkZXJzLkFkZCgnQ29udGVudC1EaXNwb3NpdGlvbicsICJhdHRhY2htZW50OyBm +aWxlbmFtZT1gIiRuYW1lYCIiKQ0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5Db250ZW50TGVu +Z3RoNjQgPSAkYnl0ZXMuTGVuZ3RoDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0 +cmVhbS5Xcml0ZSgkYnl0ZXMsIDAsICRieXRlcy5MZW5ndGgpDQogICAgICAgICAgICAgICAgJFJl +c3BvbnNlLk91dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAgICAgICAgY29udGludWUNCiAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9iYWNr +dXAvd2llZGVyaGVyc3RlbGxlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnYmFja3VwcycpKSB7IFNlbmQtRXJy +b3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJhY2t1cHMpJyA0MDM7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAg +ICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAg +ICRuYW1lID0gIiQoJGRhdGVuLmRhdGVpbmFtZSkiDQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg +KCRuYW1lIC1tYXRjaCAnXihzbmFwX3xsZWdfKVswLTlfYS16QS1aXStcLmJhayQnKSkgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZXIgRGF0ZWluYW1lJyA0MDA7IGNvbnRpbnVlIH0N +CiAgICAgICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGggJERhdGFEaXIgJ2NhY2hlJw0K +ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRjYWNoZURp +cikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkY2FjaGVEaXIgLUZvcmNl +IHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICRxdWVsbCA9IEpvaW4tUGF0aCAkY2FjaGVE +aXIgJG5hbWUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0 +aCAkcXVlbGwpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNrdXAgbmljaHQgZ2VmdW5kZW4n +IDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICR0cyA9IEdldC1EYXRlIC1Gb3JtYXQg +J3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAgICAgICAgICAkc2ljaGVyID0gInNuYXBfdm9yX3dp +ZWRlcmhlcnN0ZWxsdW5nXyR0cy5iYWsiDQogICAgICAgICAgICAgICAgIyBTaWNoZXJoZWl0cy1C +dW5kbGUgZGVyIGFrdHVlbGxlbiBEYXRlbiB2b3IgVWViZXJzY2hyZWliZW4uDQogICAgICAgICAg +ICAgICAgJHNpY2hlckJ1bmRsZSA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGZv +cm1hdCAgPSAndmkzLWJhY2t1cC12MScNCiAgICAgICAgICAgICAgICAgICAgdHMgICAgICA9ICR0 +cw0KICAgICAgICAgICAgICAgICAgICBwbGFudW5nID0gKFJlYWQtSnNvbk9iamVjdCAncGxhbnVu +Zy5qc29uJykNCiAgICAgICAgICAgICAgICAgICAgYWRtaW4gICA9IChSZWFkLUpzb25PYmplY3Qg +J2FkbWluLmpzb24nKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1C +YWNrdXBCeXRlcyAoSm9pbi1QYXRoICRjYWNoZURpciAkc2ljaGVyKSAoJHNpY2hlckJ1bmRsZSB8 +IENvbnZlcnRUby1Kc29uIC1EZXB0aCAzMCkNCg0KICAgICAgICAgICAgICAgICRxdWVsbEluaGFs +dCA9IFJlYWQtQmFja3VwVGV4dCAkcXVlbGwNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx +ICRxdWVsbEluaGFsdCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwLURhdGVpIGtvbm50 +ZSBuaWNodCBnZWxlc2VuIHdlcmRlbicgNTAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg +dHJ5IHsgJHF1ZWxsRGF0ZW4gPSAkcXVlbGxJbmhhbHQgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0 +Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwLURhdGVpIG5pY2h0IHBhcnNpZXJiYXIn +IDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICR3aWVkZXJoZXJnZXN0ZWxsdCA9IEAo +KQ0KICAgICAgICAgICAgICAgIGlmICgkcXVlbGxEYXRlbiAtYW5kICRxdWVsbERhdGVuLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2Zvcm1hdCddIC1hbmQgIiQoJHF1ZWxsRGF0ZW4uZm9ybWF0KSIuU3Rh +cnRzV2l0aCgndmkzLWJhY2t1cCcpKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcXVlbGxE +YXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydwbGFudW5nJ10pIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHF1ZWxsRGF0ZW4ucGxhbnVu +ZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkd2llZGVyaGVyZ2VzdGVsbHQg +Kz0gJ3BsYW51bmcnDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +aWYgKCRxdWVsbERhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FkbWluJ10pIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRxdWVsbERhdGVu +LmFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICR3aWVkZXJoZXJnZXN0 +ZWxsdCArPSAnYWRtaW4nDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 +IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAjIExlZ2FjeS1Gb3JtYXQgKG51ciBwbGFudW5n +Lmpzb24tSW5oYWx0KS4NCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxh +bnVuZy5qc29uJyAkcXVlbGxEYXRlbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICR3 +aWVkZXJoZXJnZXN0ZWxsdCArPSAncGxhbnVuZycNCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLndpZWRlcmhlcmdlc3RlbGx0JyBAeyBx +dWVsbGUgPSAkbmFtZTsgc2ljaGVydW5nID0gJHNpY2hlcjsgaW5oYWx0ID0gKCR3aWVkZXJoZXJn +ZXN0ZWxsdCAtam9pbiAnKycpIH0NCiAgICAgICAgICAgICAgICBOZXctSGlud2VpcyAnYmFja3Vw +X3dpZWRlcmhlcmdlc3RlbGx0JyAoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgYmFj +a3VwICAgID0gJG5hbWUNCiAgICAgICAgICAgICAgICAgICAgc2ljaGVydW5nID0gJHNpY2hlcg0K +ICAgICAgICAgICAgICAgICAgICBpbmhhbHQgICAgPSAoJHdpZWRlcmhlcmdlc3RlbGx0IC1qb2lu +ICcrJykNCiAgICAgICAgICAgICAgICB9KSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKSB8IE91dC1O +dWxsDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg +PSAnd2llZGVyaGVyZ2VzdGVsbHQnOyBzaWNoZXJ1bmcgPSAkc2ljaGVyOyBpbmhhbHQgPSAkd2ll +ZGVyaGVyZ2VzdGVsbHQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9 +DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwL2xvZXNjaGVu +JyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChU +ZXN0LURhcmZCZXJlaWNoICdiYWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5l +IEJlcmVjaHRpZ3VuZyAoQmFja3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJv +ZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJG5hbWUgPSAiJCgkZGF0ZW4u +ZGF0ZWluYW1lKSINCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJG5hbWUgLW1hdGNoICdeKHNu +YXBffGxlZ18pWzAtOV9hLXpBLVpdK1wuYmFrJCcpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdV +bmd1ZWx0aWdlciBEYXRlaW5hbWUnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRm +cCA9IEpvaW4tUGF0aCAkRGF0YURpciAoJ2NhY2hlLycgKyAkbmFtZSkNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZnApKSB7IFNlbmQtRXJyb3IgJFJl +c3BvbnNlICdCYWNrdXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkZnAgLUZvcmNlDQogICAgICAgICAgICAg +ICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLmdlbG9lc2NodCcgQHsgZGF0ZWluYW1lID0gJG5h +bWUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVz +ID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9 +DQoNCiAgICAgICAgICAgICMgPT09PT0gUkVTRVQgLyBEVU1NWURBVEVOID09PT09DQogICAgICAg +ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvcmVzZXQnIC1hbmQgJE1ldGhvZCAtZXEg +J1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkg +eyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIGRpZSBQbGFudW5n +IHp1cnVlY2tzZXR6ZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwbGFudW5n +UGF0aCA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAg +ICRiYWNrdXBOYW1lID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRl +cmFsUGF0aCAkcGxhbnVuZ1BhdGgpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRzID0gR2V0LURh +dGUgLUZvcm1hdCAneXl5eU1NZGRfSEhtbXNzJw0KICAgICAgICAgICAgICAgICAgICAkY2FjaGVE +aXIgPSBKb2luLVBhdGggJERhdGFEaXIgJ2NhY2hlJw0KICAgICAgICAgICAgICAgICAgICBpZiAo +LW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIpKSB7IE5ldy1JdGVtIC1JdGVt +VHlwZSBEaXJlY3RvcnkgLVBhdGggJGNhY2hlRGlyIC1Gb3JjZSB8IE91dC1OdWxsIH0NCiAgICAg +ICAgICAgICAgICAgICAgIyBSZXN0YXVyaWVyYmFyZXIgTmFtZSAocGxhbnVuZ19iYWNrdXBfdm9y +X3Jlc2V0XyouanNvbikgc3RhdHQNCiAgICAgICAgICAgICAgICAgICAgIyAuYmFrIC0+IHdpcmQg +dm9tIEJhY2t1cHMtVGFiIGdlbGlzdGV0IHVuZCBrYW5uIHdpZWRlcmhlcmdlc3RlbGx0DQogICAg +ICAgICAgICAgICAgICAgICMgd2VyZGVuLiBGcnVlaGVyIHp1ZGVtIG5pY2h0IGFuIGRlbiBDbGll +bnQgenVydWVja2dlZ2ViZW4NCiAgICAgICAgICAgICAgICAgICAgIyAtPiAiQmFja3VwOiB1bmRl +ZmluZWQiIGluIGRlciBVSS4NCiAgICAgICAgICAgICAgICAgICAgJGJhY2t1cE5hbWUgPSAicGxh +bnVuZ19iYWNrdXBfdm9yX3Jlc2V0XyR0cy5qc29uIg0KICAgICAgICAgICAgICAgICAgICBDb3B5 +LUl0ZW0gLUxpdGVyYWxQYXRoICRwbGFudW5nUGF0aCAtRGVzdGluYXRpb24gKEpvaW4tUGF0aCAk +Y2FjaGVEaXIgJGJhY2t1cE5hbWUpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAg +ICAgaWYgKCRudWxsIC1uZSAkcGxhbnVuZykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJHBs +YW51bmcuUFNPYmplY3QuUHJvcGVydGllc1snZWludHJhZWdlJ10pIHsgJHBsYW51bmcuZWludHJh +ZWdlID0gTmV3LU9iamVjdCBQU09iamVjdCB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkcGxh +bnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10pIHsgJHBsYW51bmcua29tbWVu +dGFyZSA9IE5ldy1PYmplY3QgUFNPYmplY3QgfQ0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1K +c29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGxhbnVuZy5yZXNldCcg +QHt9DQogICAgICAgICAgICAgICAgTmV3LUhpbndlaXMgJ3BsYW51bmdfcmVzZXQnIChbb3JkZXJl +ZF1Aew0KICAgICAgICAgICAgICAgICAgICBoaW53ZWlzID0gJ0VpbnRyYWVnZSB1bmQgS29tbWVu +dGFyZSB3dXJkZW4gZ2Vsb2VzY2h0OyBTaWNoZXJ1bmcgbGllZ3QgaW4gZGF0YS9jYWNoZS8uJw0K +ICAgICAgICAgICAgICAgIH0pIChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAg +ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICd6dXJ1 +ZWNrZ2VzZXR6dCc7IGJhY2t1cCA9ICRiYWNrdXBOYW1lIH0NCiAgICAgICAgICAgICAgICBjb250 +aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFu +dW5nL2R1bW15ZGF0ZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg +ICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn +TnVyIFN1cGVyVXNlciBkdWVyZmVuIER1bW15ZGF0ZW4gZWluc3BpZWxlbicgNDAzOyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0R1bW15ZGF0ZW4gbnVy +IGltIERlYnVnLVNlcnZlciAoZGV2L3NlcnZlci5weSkgaW1wbGVtZW50aWVydC4nIDUwMQ0KICAg +ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgUE9T +VCAvYXBpL2FkbWluL3Byb3Rva29sbC1sb2VzY2hlbg0KICAgICAgICAgICAgIyBFaW5tYWwtUmVz +ZXQgZnVlciBMb2didWNoICsgQVBJLUxvZy4gU2V0enQgbG9nYnVjaC5qc29uIGF1ZiBbXSwNCiAg +ICAgICAgICAgICMgbG9lc2NodCBkaWUgQVBJLUxvZy1EYXRlaSBhdXMgJVRFTVAlLCB1bmQgc2No +cmVpYnQgZWluZW4gZWluemlnZW4NCiAgICAgICAgICAgICMgbmV1ZW4gTG9nYnVjaC1FaW50cmFn +IChwcm90b2tvbGwuZ2Vsb2VzY2h0KSwgZGFtaXQgZGFzIEVyZWlnbmlzDQogICAgICAgICAgICAj +IHNlbGJzdCBuYWNodm9sbHppZWhiYXIgYmxlaWJ0Lg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l +cSAnL2FwaS9hZG1pbi9wcm90b2tvbGwtbG9lc2NoZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1Qn +KSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIGRhcyBQcm90b2tvbGwgbG9l +c2NoZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICR2b3JoZXIgPSBSZWFkLUpz +b25PYmplY3QgJ2xvZ2J1Y2guanNvbicNCiAgICAgICAgICAgICAgICAkYW56YWhsVm9yaGVyID0g +MA0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHZvcmhlcikgew0KICAgICAgICAgICAg +ICAgICAgICAkYW56YWhsVm9yaGVyID0gQCgkdm9yaGVyKS5Db3VudA0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdsb2didWNoLmpzb24nIEAoKSB8 +IE91dC1OdWxsDQoNCiAgICAgICAgICAgICAgICAkYXBpTG9nQnl0ZXMgPSAwDQogICAgICAgICAg +ICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNjcmlwdDpBcGlMb2cpIHsNCiAgICAg +ICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhcGlMb2dCeXRl +cyA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdDpBcGlMb2cpLkxlbmd0aA0KICAgICAg +ICAgICAgICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JpcHQ6QXBpTG9n +IC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcA0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICMgRGF0ZWkgZXZ0bC4gbm9jaCBvZmZlbjsgaWdub3Jp +ZXJlbiwgTG9nYnVjaCBpc3QgZGllIHdpY2h0aWdlcmUgU3B1cg0KICAgICAgICAgICAgICAgICAg +ICAgICAgJGFwaUxvZ0J5dGVzID0gLTENCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3Byb3Rva29sbC5n +ZWxvZXNjaHQnIEB7DQogICAgICAgICAgICAgICAgICAgIGxvZ2J1Y2hFaW50cmFlZ2VWb3JoZXIg +PSAkYW56YWhsVm9yaGVyDQogICAgICAgICAgICAgICAgICAgIGFwaUxvZ0J5dGVzICAgICAgICAg +ICAgPSAkYXBpTG9nQnl0ZXMNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2Vu +ZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICBzdGF0dXMgICAg +ICAgICAgICAgICAgID0gJ2dlbG9lc2NodCcNCiAgICAgICAgICAgICAgICAgICAgbG9nYnVjaEVp +bnRyYWVnZVZvcmhlciA9ICRhbnphaGxWb3JoZXINCiAgICAgICAgICAgICAgICAgICAgYXBpTG9n +Qnl0ZXMgICAgICAgICAgICA9ICRhcGlMb2dCeXRlcw0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09 +IFNUQVRJU1RJSyAvIExPR0JVQ0ggPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h +cGkvc3RhdGlzdGlrJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ3N0YXRpc3RpaycpKSB7DQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKFN0YXRpc3Rp +ayknIDQwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHBs +YW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAk +YWRtaW4gICA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBT +ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIChHZXQtU3RhdGlzdGlrRGF0YSAkcGxhbnVuZyAkYWRt +aW4pDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAg +IGlmICgkUGF0aCAtZXEgJy9hcGkvbG9nYnVjaCcgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0K +ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdsb2didWNoJykpIHsN +CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRp +Z3VuZyAoTG9nYnVjaCknIDQwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgU2VuZC1Kc29uVGV4dCAkUmVzcG9uc2UgKEdldC1Mb2didWNoVGV4dCkNCiAgICAg +ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09 +PT09PT09PT09PT09PT09PSBaRUxMLUxPQ0sgKyBDSEFOR0VTIChMaXZlLVN5bmMpID09PT09PT09 +PT09PT09PT09PT09PQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvbG9jay96ZWxsZSAgeyBkYXR1 +bSwgcGVyc29uSWQgfSAtPiB7IG9rLCB0b2tlbiwgLi4uIH0gb2RlciA0MjMgeyBzcGVycmVyLCAu +Li4gfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlJyAtYW5kICRN ZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRS ZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVz cG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg ICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdHVtID0g -JGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbc3RyaW5nXSRhLnBlcnNvbklk -DQogICAgICAgICAgICAgICAgJHdlcnQgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snd2Vy -dCddKSB7ICRhLndlcnQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICMgT3B0aW1pc3Rp -Yy1Db25jdXJyZW5jeTogV2VubiBkZXIgQ2xpZW50IHNlaW5lbiB6dWxldHp0IGdlc2VoZW5lbg0K -ICAgICAgICAgICAgICAgICMgV2VydCBtaXRsaWVmZXJ0LCBwcnVlZmVuIHdpciB2b3IgZGVtIFNj -aHJlaWJlbiBvYiBkZXIgU2VydmVyDQogICAgICAgICAgICAgICAgIyBub2NoIGRlbnNlbGJlbiBT -dGFuZCBoYXQuIE1pc21hdGNoIC0+IDQwOSBtaXQgYWt0dWVsbGVyV2VydC4NCiAgICAgICAgICAg -ICAgICAkaGF0RXJ3YXJ0ZXQgPSAkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlcndhcnRldGVyQWx0 -ZXJXZXJ0J10NCiAgICAgICAgICAgICAgICAkZXJ3YXJ0ZXQgPSBpZiAoJGhhdEVyd2FydGV0KSB7 -IFtzdHJpbmddJGEuZXJ3YXJ0ZXRlckFsdGVyV2VydCB9IGVsc2UgeyAkbnVsbCB9DQoNCiAgICAg -ICAgICAgICAgICAjIEVkaXQtUmVjaHQgZ2VnZW4gYWt0dWVsbGVuIFN0YW5kIHBydWVmZW4gKG5v -Y2ggb2huZSBMb2NrIOKAlCBudXIgTG9va3VwKQ0KICAgICAgICAgICAgICAgICRwbGFudW5nQ2hl -Y2sgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAo -JG51bGwgLWVxICRwbGFudW5nQ2hlY2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ3BsYW51bmcu -anNvbiBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHpp -ZWxQZXJzb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZ0NoZWNrLnBlcnNv -bmVuKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcCBpbiBAKCRwbGFudW5nQ2hl -Y2sucGVyc29uZW4pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kcHAu -aWQgLWVxICRwZXJzb25JZCkgeyAkemllbFBlcnNvbiA9ICRwcDsgYnJlYWsgfQ0KICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90 -IChUZXN0LURhcmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNvbikpIHsNCiAgICAgICAgICAgICAg -ICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyBmdWVyIGRpZXNl -IFplbGxlJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg -ICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBhdG9tYXIgaW4gTG9jazoNCiAgICAgICAgICAgICAgICAk -Y2xpZW50UXVpdHRpZXJ0ID0gKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3VudGVyYmVzZXR6dW5n -U2NoaWNodCddIC1hbmQgJGEudW50ZXJiZXNldHp1bmdTY2hpY2h0KQ0KICAgICAgICAgICAgICAg -ICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg -ICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpz -b24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0 -ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRw -bGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cgPSAncGxh -bnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgtbm90ICRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVy -dHlOYW1lICdlaW50cmFlZ2UnIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3LU9iamVjdCBQU09iamVj -dCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAkcGxhbnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skZGF0 -dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlIHwg -QWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQcm9wZXJ0eVZhbHVlIChO -ZXctT2JqZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICRhbHRlciA9ICcnDQogICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJz -b25JZF0pIHsgJGFsdGVyID0gW3N0cmluZ10kcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLiRwZXJz -b25JZCB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW1pc3RpYy1Db25jdXJyZW5j -eS1DaGVjaw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoYXRFcndhcnRldCAtYW5kICRl -cndhcnRldCAtbmUgJGFsdGVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu -IEB7IHR5cCA9ICdrb25mbGlrdCc7IGFrdHVlbGwgPSAkYWx0ZXIgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIEZ1ZWhydW5ncy1VbnRlcmJl -c2V0enVuZyAoVmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXIpIC0gZ2xlaWNoZXMgUHJpbnppcCB3aWUg -dm9yaGVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBqZXR6dCBhYmVyIGdlZ2VuIGRlbiBn -ZWxvY2t0ZW4gU3RhbmQuDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkY2xpZW50 -UXVpdHRpZXJ0IC1hbmQgKFRlc3QtSW5WZXJiaW5kbGljaGtlaXQgJGRhdHVtKSkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICRhbHRlU2NoaWNodCA9IEdldC1GdWVocnVuZ3NTY2hpY2h0 -TGV0dGVyICRhbHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXVlU2NoaWNodCA9 -IEdldC1GdWVocnVuZ3NTY2hpY2h0TGV0dGVyICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRhbHRlU2NoaWNodCAtYW5kICRhbHRlU2NoaWNodCAtbmUgJG5ldWVTY2hpY2h0 -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRha3R1ZWxsQ291bnQgPSBHZXQt -RnVlaHJ1bmdzQ291bnQgJHBsYW51bmcgJGRhdHVtICRhbHRlU2NoaWNodA0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoKCRha3R1ZWxsQ291bnQgLSAxKSAtbHQgMikgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICd1bnRlcmJl -c2V0enVuZyc7IHNjaGljaHQgPSAkYWx0ZVNjaGljaHQ7IGFrdHVlbGxDb3VudCA9ICRha3R1ZWxs -Q291bnQ7IGFsdGVyID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHdlcnQgLW9yIFtzdHJpbmdd -OjpJc051bGxPcldoaXRlU3BhY2UoJHdlcnQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVy -c29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRy -YWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0 -dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7ICRwbGFudW5nLmVpbnRyYWVnZS4k -ZGF0dW0uJHBlcnNvbklkID0gJHdlcnQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs -c2UgeyAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5 -TmFtZSAkcGVyc29uSWQgLU5vdGVQcm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZSB9DQogICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2Jq -ZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAg -ICAgICAgIHJldHVybiBAeyB0eXAgPSAnb2snOyBhbHRlciA9ICRhbHRlciB9DQogICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAg -ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVl -DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKCRsb2NrRXJnZWJuaXMu -dHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNn -ICRsb2NrRXJnZWJuaXMuY29kZTsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgkbG9j -a0VyZ2VibmlzLnR5cCAtZXEgJ2tvbmZsaWt0Jykgew0KICAgICAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIg -ICAgICAgID0gJ2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgICAg -ICA9ICdEaWVzZSBaZWxsZSB3dXJkZSBpbnp3aXNjaGVuIGdlYWVuZGVydC4nDQogICAgICAgICAg -ICAgICAgICAgICAgICBha3R1ZWxsZXJXZXJ0ID0gJGxvY2tFcmdlYm5pcy5ha3R1ZWxsDQogICAg -ICAgICAgICAgICAgICAgIH0gNDA5DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2VibmlzLnR5cCAtZXEg -J3VudGVyYmVzZXR6dW5nJykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3Qg -JFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgICAgICA9ICdG -dWVocnVuZ3MtVW50ZXJiZXNldHp1bmcnDQogICAgICAgICAgICAgICAgICAgICAgICBrb25mbGlr -dFR5cCAgICA9ICd1bnRlcmJlc2V0enVuZycNCiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGlj -aHQgICAgICAgID0gJGxvY2tFcmdlYm5pcy5zY2hpY2h0DQogICAgICAgICAgICAgICAgICAgICAg -ICBha3R1ZWxsQ291bnQgICA9ICRsb2NrRXJnZWJuaXMuYWt0dWVsbENvdW50DQogICAgICAgICAg -ICAgICAgICAgICAgICBhbHRlcldlcnQgICAgICA9ICRsb2NrRXJnZWJuaXMuYWx0ZXINCiAgICAg -ICAgICAgICAgICAgICAgICAgIG5ldWVyV2VydCAgICAgID0gJHdlcnQNCiAgICAgICAgICAgICAg -ICAgICAgfSA0MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAg -ICB9DQoNCiAgICAgICAgICAgICAgICAkYWx0ZXIgPSAkbG9ja0VyZ2VibmlzLmFsdGVyDQogICAg -ICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnemVsbGUuZ2VhZW5kZXJ0JyBAeyBkYXR1bSA9 -ICRkYXR1bTsgcGVyc29uSWQgPSAkcGVyc29uSWQ7IGFsdGVyV2VydCA9ICIkYWx0ZXIiOyBuZXVl -cldlcnQgPSAiJHdlcnQiIH0NCiAgICAgICAgICAgICAgICAjIExpdmUtU3luYzogQ2hhbmdlLUxv -ZyBmdWVyIGRlbiBzeW5jLXdvcmtlci4NCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRWlu -dHJhZyAnemVsbGUnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQog -ICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAg -ICAgIGFsdCAgICAgID0gIiRhbHRlciINCiAgICAgICAgICAgICAgICAgICAgbmV1ICAgICAgPSAi -JHdlcnQiDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBVbnRlcmJlc2V0 -enVuZ3MtUXVpdHR1bmc6IGV4dHJhIExvZ2J1Y2gtRWludHJhZywgZGVuIEZhY2hhdWZzaWNodC9X -TCBzZWhlbiBzb2xsDQogICAgICAgICAgICAgICAgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNb -J3VudGVyYmVzZXR6dW5nU2NoaWNodCddIC1hbmQgJGEudW50ZXJiZXNldHp1bmdTY2hpY2h0KSB7 -DQogICAgICAgICAgICAgICAgICAgICRzY2hpY2h0TGV0dGVyID0gW3N0cmluZ10kYS51bnRlcmJl -c2V0enVuZ1NjaGljaHQNCiAgICAgICAgICAgICAgICAgICAgJHNjaGljaHRUZXh0ID0gc3dpdGNo -ICgkc2NoaWNodExldHRlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJ0YnIHsgJ0ZydWVo -c2NoaWNodCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJ1MnIHsgJ1NwYWV0c2NoaWNodCcg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgJ04nIHsgJ05hY2h0c2NoaWNodCcgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgZGVmYXVsdCB7ICRzY2hpY2h0TGV0dGVyIH0NCiAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkb2VUeHQgPSAnJw0KICAgICAgICAgICAg -ICAgICAgICBpZiAoJHppZWxQZXJzb24gLWFuZCAkemllbFBlcnNvbi5QU09iamVjdC5Qcm9wZXJ0 -aWVzWydvZSddKSB7ICRvZVR4dCA9IFtzdHJpbmddJHppZWxQZXJzb24ub2UgfQ0KICAgICAgICAg -ICAgICAgICAgICAkbmFtZVR4dCA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgkemllbFBl -cnNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHZuID0gJyc7IGlmICgkemllbFBlcnNv -bi5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgJHZuID0gW3N0cmluZ10kemllbFBl -cnNvbi52b3JuYW1lIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lVHh0ID0gKCIkdm4g -JCgkemllbFBlcnNvbi5uYW1lKSIpLlRyaW0oKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3VudGVyYmVzZXR6dW5nLnF1aXR0aWVy -dCcgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICA9ICRkYXR1bQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgcGVyc29uSWQgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAg -ICAgICAgICBwZXJzb24gICAgPSAkbmFtZVR4dA0KICAgICAgICAgICAgICAgICAgICAgICAgb2Ug -ICAgICAgID0gJG9lVHh0DQogICAgICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgPSAkc2No -aWNodFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCA9ICIkYWx0ZXIiDQog -ICAgICAgICAgICAgICAgICAgICAgICBuZXVlcldlcnQgPSAiJHdlcnQiDQogICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBQaGFzZSBELjMg -KDIwMjYtMDUtMjEpOiB3ZW5uIGRpZSBLcmFua21lbGR1bmcgenVydWVja2dlbm9tbWVuDQogICAg -ICAgICAgICAgICAgIyB3aXJkIChhbHRlciBXZXJ0IHdhciBrci9LdXIsIG5ldWVyIFdlcnQgaXN0 -IGVzIG5pY2h0IG1laHIpLA0KICAgICAgICAgICAgICAgICMgZW50ZmVybmVuIHdpciBkZW4gb2Zm -ZW5lbiBIaW53ZWlzIOKAlCBzb25zdCBpc3QgZXIgYmlzIHp1DQogICAgICAgICAgICAgICAgIyAz -MCBUYWdlIHByYWVzZW50LCBvYndvaGwgZGFzIEVyZWlnbmlzIGVybGVkaWd0IGlzdC4NCiAgICAg -ICAgICAgICAgICBpZiAoKCRhbHRlciAtZXEgJ2tyJyAtb3IgJGFsdGVyIC1lcSAnS3VyJykgLWFu -ZCAoJHdlcnQgLW5lICdrcicgLWFuZCAkd2VydCAtbmUgJ0t1cicpKSB7DQogICAgICAgICAgICAg -ICAgICAgIFJlbW92ZS1PZmZlbmVLcmFua21lbGR1bmdzSGlud2Vpc2UgJHBlcnNvbklkICRkYXR1 -bQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIEhpbndlaXMtVHJpZ2dlcjog -S3JhbmttZWxkdW5nIGVyemV1Z3QgZWluZW4gSW4tQXBwLUhpbndlaXMNCiAgICAgICAgICAgICAg -ICAjIGZ1ZXIgU1UgKyBHZXNhbXR2ZXJhbnR3b3J0bGljaGUgKFNjaGljaHRsb2NoIGltIE1vZGFs -IGRpcmVrdA0KICAgICAgICAgICAgICAgICMgYWRyZXNzaWVyYmFyIHZpYSAiS2FuZGlkYXRlbiBh -bnNjaHJlaWJlbiItQnV0dG9uKS4NCiAgICAgICAgICAgICAgICBpZiAoJHdlcnQgLWVxICdrcicg -LW9yICR3ZXJ0IC1lcSAnS3VyJykgew0KICAgICAgICAgICAgICAgICAgICAka21OYW1lID0gJycN -CiAgICAgICAgICAgICAgICAgICAgaWYgKCR6aWVsUGVyc29uKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAka3ZuID0gJyc7IGlmICgkemllbFBlcnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2 -b3JuYW1lJ10pIHsgJGt2biA9IFtzdHJpbmddJHppZWxQZXJzb24udm9ybmFtZSB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAka21OYW1lID0gKCIka3ZuICQoJHppZWxQZXJzb24ubmFtZSkiKS5U -cmltKCkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAka21HcnVw -cGUgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHppZWxQZXJzb24gLWFuZCAkemllbFBl -cnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydncnVwcGUnXSkgeyAka21HcnVwcGUgPSBbc3RyaW5n -XSR6aWVsUGVyc29uLmdydXBwZSB9DQogICAgICAgICAgICAgICAgICAgICRrbVNjaGljaHRMZXR0 -ZXIgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoIiRhbHRlciIgLW1hdGNoICdeKFtGU05d -KS0nKSB7ICRrbVNjaGljaHRMZXR0ZXIgPSAkTWF0Y2hlc1sxXSB9DQogICAgICAgICAgICAgICAg -ICAgIE5ldy1IaW53ZWlzICdrcmFua21lbGR1bmcnIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAg -ICAgICAgICAgICAgcGVyc29uX2lkICAgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAg -ICAgICBwZXJzb25fbmFtZSAgPSAka21OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICBncnVw -cGUgICAgICAgPSAka21HcnVwcGUNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAg -ICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAgc2NoaWNodENvZGUgID0gIiRhbHRl -ciINCiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGljaHRLdXJ6ICA9ICRrbVNjaGljaHRMZXR0 -ZXINCiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgICAgICAgICA9ICIkd2VydCINCiAgICAg -ICAgICAgICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl -IEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCc7IGFsdGVyV2VydCA9ICRhbHRlciB9DQogICAgICAg -ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgQnVsay1TY2hy -ZWliZW4gbWVocmVyZXIgWmVsbGVuIGluIGVpbmVtIFNjaHJpdHQg4oCUIGF1ZmdlcnVmZW4NCiAg -ICAgICAgICAgICMgdm9tIEV4Y2VsLUZ1ZWxsLUdyaWZmLiBTcGFydCBwcm8gRHJhZyBiaXMgenUg -MTAwKyBIVFRQLVJvdW5kdHJpcHMNCiAgICAgICAgICAgICMgdW5kIERhdGVpLVNjaHJlaWJ2b3Jn -YWVuZ2UuIFBlcm1pc3Npb24tQ2hlY2sgcHJvIFplbGxlLCBlaW4NCiAgICAgICAgICAgICMgZWlu -emlnZXIgTG9nYnVjaC1FaW50cmFnIGZhc3N0IGRpZSBBa3Rpb24genVzYW1tZW4uDQogICAgICAg -ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvemVsbGVuLWJ1bGsnIC1hbmQgJE1ldGhv -ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl -c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEg -PSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0g -QCgkYS5laW50cmFlZ2UpDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGVpbnRyYWVnZSAtb3Ig -JGVpbnRyYWVnZS5Db3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25P -YmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7IG9rID0gMDsgYWJnZWxlaG50ID0gQCgp -IH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBhdG9tYXIgaW4gZGVyIERhdGVpLVNwZXJy -ZSDigJQgd2llIGRlciBFaW56ZWwtDQogICAgICAgICAgICAgICAgIyB6ZWxsLUVuZHBvaW50LiBP -aG5lIExvY2sga2FubiBlaW4gcGFyYWxsZWxlciBFZGl0L0J1bGsgKGF1Y2gNCiAgICAgICAgICAg -ICAgICAjIGF1cyBlaW5lbSBhbmRlcmVuIFNlcnZlci1Qcm96ZXNzIGF1ZiBkZW1zZWxiZW4gU2hh -cmUpIGRlbg0KICAgICAgICAgICAgICAgICMgZ2VyYWRlIGdlbGVzZW5lbiBHZXNhbXRzdGFuZCB1 -ZWJlcnNjaHJlaWJlbiAoTG9zdCBVcGRhdGUgdWViZXINCiAgICAgICAgICAgICAgICAjIGRpZSBH -QU5aRSBEYXRlaSkuIExvZ2J1Y2ggKyBMaXZlLVN5bmMgbGF1ZmVuIE5BQ0ggZGVyIFNwZXJyZSwN -CiAgICAgICAgICAgICAgICAjIHVtIGdlc2NoYWNodGVsdGUgTG9ja3MgKGxvZ2J1Y2gvY2hhbmdl -cykgenUgdmVybWVpZGVuLg0KICAgICAgICAgICAgICAgICRyZXMgPSAkbnVsbA0KICAgICAgICAg -ICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRyZXMgPSBJbnZva2UtV2l0aEZpbGVM -b2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0g -UmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJG51bGwgLWVxICRwbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0g -NDA0OyBtc2cgPSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRy -YWVnZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVt -YmVyIC1Ob3RlUHJvcGVydHlOYW1lICdlaW50cmFlZ2UnIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW1BT -Q3VzdG9tT2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAjIFBlcnNvbmVuLU1hcCBlaW5tYWwgYXVmYmF1ZW4g4oCUIFBl -cm1pc3Npb24tQ2hlY2sgcHJvDQogICAgICAgICAgICAgICAgICAgICAgICAjIEVpbnRyYWcgb2hu -ZSBSZXNjYW4gZGVyIFBlcnNvbmVubGlzdGUuDQogICAgICAgICAgICAgICAgICAgICAgICAkcGVy -c29uTWFwID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcucGVyc29u -ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gQCgkcGxh -bnVuZy5wZXJzb25lbikpIHsgJHBlcnNvbk1hcFtbc3RyaW5nXSRwcC5pZF0gPSAkcHAgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJG9rQ291bnQg -PSAwDQogICAgICAgICAgICAgICAgICAgICAgICAkYWJnZWxlaG50ID0gQCgpDQogICAgICAgICAg -ICAgICAgICAgICAgICAkZXJzdGVzUGlkID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAg -ICRlcnN0ZXNXZXJ0ID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICRlcnN0ZXNEYXR1 -bSA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkbGV0enRlc0RhdHVtID0gJG51bGwN -CiAgICAgICAgICAgICAgICAgICAgICAgICMgYWx0ZVdlcnRlLU1hcCBmdWVyIExvZ2J1Y2gtUmVz -dG9yZTogS2V5ID0gIjxkYXR1bT58PHBlcnNvbklkPiIuDQogICAgICAgICAgICAgICAgICAgICAg -ICAkYWx0ZVdlcnRlID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAgICAjIHN5bmNFaW50cmFl -Z2U6IHBybyBnZW11dGllcnRlciBaZWxsZSBlaW4gRWludHJhZyBmdWVyDQogICAgICAgICAgICAg -ICAgICAgICAgICAjIGRlbiBMaXZlLVN5bmMtQ2hhbmdlLUxvZyAoRm9ybWF0IHdpZSBTaW5nbGUt -Q2VsbCkuDQogICAgICAgICAgICAgICAgICAgICAgICAkc3luY0VpbnRyYWVnZSA9IE5ldy1PYmpl -Y3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAg -Zm9yZWFjaCAoJGUgaW4gJGVpbnRyYWVnZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICRkYXR1bSA9IFtzdHJpbmddJGUuZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -cGVyc29uSWQgPSBbc3RyaW5nXSRlLnBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJHdlcnQgPSBpZiAoJGUuUFNPYmplY3QuUHJvcGVydGllc1snd2VydCddIC1hbmQgJG51bGwg -LW5lICRlLndlcnQpIHsgW3N0cmluZ10kZS53ZXJ0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZGF0dW0gLW9yIC1ub3QgJHBlcnNvbklkKSB7ICRh -YmdlbGVobnQgKz0gQHsgZGF0dW0gPSAkZGF0dW07IHBlcnNvbklkID0gJHBlcnNvbklkOyBncnVu -ZCA9ICd1bnZvbGxzdGFlbmRpZycgfTsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICR6aWVsUGVyc29uID0gJHBlcnNvbk1hcFskcGVyc29uSWRdDQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlplbGxlRWRpdGllcmVuICR6aWVsUGVy -c29uKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWJnZWxlaG50ICs9IEB7 -IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgZ3J1bmQgPSAna2Vpbi1yZWNo -dCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkcGxhbnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZSB8IEFkZC1NZW1i -ZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGRhdHVtIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW1BTQ3VzdG9t -T2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZW4gV2VydCBtZXJrZW4gQkVWT1Igd2lyIGRpZSBa -ZWxsZSB1ZWJlcnNjaHJlaWJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZXJX -ZXJ0ID0gJycNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJh -ZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJGFsdGVyV2VydCA9IFtzdHJpbmddJHBsYW51bmcuZWludHJh -ZWdlLiRkYXR1bS4kcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZVsoInswfXx7MX0iIC1mICRkYXR1bSwg -JHBlcnNvbklkKV0gPSAkYWx0ZXJXZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KFtzdHJpbmddOjpJc051bGxPckVtcHR5KCR3ZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRw -bGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNv -bklkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRd -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFl -Z2UuJGRhdHVtLiRwZXJzb25JZCA9ICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVu -Zy5laW50cmFlZ2UuJGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVyc29u -SWQgLU5vdGVQcm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRva0NvdW50KysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJG51bGwgLWVxICRlcnN0ZXNQaWQpIHsgJGVyc3Rlc1BpZCA9ICRwZXJzb25JZDsgJGVyc3Rl -c1dlcnQgPSAkd2VydDsgJGVyc3Rlc0RhdHVtID0gJGRhdHVtIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkbGV0enRlc0RhdHVtID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgW3ZvaWRdJHN5bmNFaW50cmFlZ2UuQWRkKEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25J -ZCA9ICRwZXJzb25JZDsgYWx0ID0gIiRhbHRlcldlcnQiOyBuZXUgPSAiJHdlcnQiIH0pDQogICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIERhdGVpIG51 -ciBzY2hyZWliZW4sIHdlbm4gdGF0c2FlY2hsaWNoIHdhcyBnZWFlbmRlcnQgd3VyZGUuDQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJG9rQ291bnQgLWd0IDApIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwg -T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgIHJldHVybiBAeyB0eXAgPSAnb2snOyBva0NvdW50ID0gJG9rQ291bnQ7IGFiZ2VsZWhudCA9 -ICRhYmdlbGVobnQ7IGVyc3Rlc1BpZCA9ICRlcnN0ZXNQaWQ7IGVyc3Rlc1dlcnQgPSAkZXJzdGVz -V2VydDsgZXJzdGVzRGF0dW0gPSAkZXJzdGVzRGF0dW07IGxldHp0ZXNEYXR1bSA9ICRsZXR6dGVz -RGF0dW07IGFsdGVXZXJ0ZSA9ICRhbHRlV2VydGU7IHN5bmNFaW50cmFlZ2UgPSAkc3luY0VpbnRy -YWVnZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsN -CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjog -JF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlm -ICgkcmVzLnR5cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkcmVzLm1zZyAk -cmVzLmNvZGU7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIExvZ2J1Y2ggKyBMaXZlLVN5 -bmMgTkFDSCBkZW0gTG9jayAoa2VpbiBnZXNjaGFjaHRlbHRlcyBMb2NrKS4NCiAgICAgICAgICAg -ICAgICBpZiAoJHJlcy5va0NvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgIFdyaXRl -LUxvZ0VpbnRyYWcgJ3plbGxlbi5idWxrLmdlYWVuZGVydCcgQHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgIHBlcnNvbklkICAgID0gJHJlcy5lcnN0ZXNQaWQNCiAgICAgICAgICAgICAgICAgICAg -ICAgIHdlcnQgICAgICAgID0gJHJlcy5lcnN0ZXNXZXJ0DQogICAgICAgICAgICAgICAgICAgICAg -ICBhbnphaGwgICAgICA9ICRyZXMub2tDb3VudA0KICAgICAgICAgICAgICAgICAgICAgICAgZXJz -dGVyVGFnICAgPSAkcmVzLmVyc3Rlc0RhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICBsZXR6 -dGVyVGFnICA9ICRyZXMubGV0enRlc0RhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICBhYmdl -bGVobnQgICA9ICRyZXMuYWJnZWxlaG50LkNvdW50DQogICAgICAgICAgICAgICAgICAgICAgICAj -IFJlc3RvcmUtUGF5bG9hZDogcHJvIFplbGxlIGRlciBXZXJ0IHZvciBkZXIgQWVuZGVydW5nLg0K -ICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZVdlcnRlICAgPSAkcmVzLmFsdGVXZXJ0ZQ0KICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICMgTGl2ZS1TeW5jOiBwcm8g -WmVsbGUgZWluICd6ZWxsZSctRWludHJhZyBpbnMgY2hhbmdlcy5qc29uLg0KICAgICAgICAgICAg -ICAgICAgICBBZGQtQ2hhbmdlTG9nRWludHJhZWdlICd6ZWxsZScgJHJlcy5zeW5jRWludHJhZWdl -DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVz -cG9uc2UgQHsgc3RhdHVzID0gJ29rJzsgb2sgPSAkcmVzLm9rQ291bnQ7IGFiZ2VsZWhudCA9IEAo -JHJlcy5hYmdlbGVobnQpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvcGxhbnVuZy9rb21tZW50YXINCiAgICAgICAgICAg -ICMgSGFlbmd0IGVpbmVuIG5ldWVuIEtvbW1lbnRhciBhbiBkaWUgTGlzdGUgZnVlciAoZGF0dW0s -cGVyc29uSWQpIGFuLg0KICAgICAgICAgICAgIyBTY2hlbWEtTWlncmF0aW9uIChsYXp5KTogdm9y -aGFuZGVuZXIgU3RyaW5nIG9kZXIgT2JqZWt0LUVpbnRyYWcgd2lyZA0KICAgICAgICAgICAgIyBi -ZWltIGVyc3RlbiBTY2hyZWliZW4gaW4gZWluZSBMaXN0ZSBrb252ZXJ0aWVydC4gTGVlcmVyIFRl -eHQgd2lyZA0KICAgICAgICAgICAgIyBhYmdlbGVobnQg4oCUIExvZXNjaGVuIGVpbnplbG5lciBL -b21tZW50YXJlIGxhZXVmdCB1ZWJlciBkZW4gREVMRVRFLQ0KICAgICAgICAgICAgIyBFbmRwdW5r -dCAobWl0IEtvbW1lbnRhci1JRCksIGRhcyBMb2VzY2hlbiBnYW56ZXIgTGlzdGVuIGlzdCB1ZWJl -cg0KICAgICAgICAgICAgIyBkaWUgQVBJIG5pY2h0IG1laHIgbW9lZ2xpY2ggKHZlcnNlaGVudGxp -Y2hlciBWZXJsdXN0IGF1c2dlc2NobG9zc2VuKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvcGxhbnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAg -ICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycg -NDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9t -LUpzb24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSAkYS5kYXR1bQ0KICAgICAgICAgICAgICAg -ICRwZXJzb25JZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICAkdGV4dCA9 -IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsgKCIkKCRhLnRleHQpIikuVHJp -bSgpIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdGV4dCkgew0KICAg -ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnTGVlcmVyIEtvbW1lbnRhciDi -gJQgYml0dGUgREVMRVRFIC9hcGkvcGxhbnVuZy9rb21tZW50YXIgZnVlciBMb2VzY2hlbiB2ZXJ3 -ZW5kZW4nIDQwMA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAjIEVkaXQtUmVjaHQgdm9yIExvY2sgcHJ1ZWZlbg0KICAgICAg -ICAgICAgICAgICRwbGFudW5nQ2hlY2sgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicN -CiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRwbGFudW5nQ2hlY2spIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJHppZWxQZXJzb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlm -ICgkcGxhbnVuZ0NoZWNrLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2gg -KCRwcCBpbiBAKCRwbGFudW5nQ2hlY2sucGVyc29uZW4pKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoW3N0cmluZ10kcHAuaWQgLWVxICRwZXJzb25JZCkgeyAkemllbFBlcnNvbiA9ICRw -cDsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNv -bikpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJl -cmVjaHRpZ3VuZyBmdWVyIGRpZXNlbiBLb21tZW50YXInIDQwMzsgY29udGludWUNCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgJGpldHp0ID0gKEdldC1EYXRlKS5Ub1N0cmluZygn -bycpICAjIElTTyA4NjAxIG1pdCBaZWl0em9uZQ0KICAgICAgICAgICAgICAgICRiZW51dHplciA9 -ICIkRG9tYWluXCRVc2VybmFtZSINCiAgICAgICAgICAgICAgICAkbmV1ZUlkID0gJ2tfJyArIChb -RGF0ZVRpbWVPZmZzZXRdOjpOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKSArICdfJyArIChH -ZXQtUmFuZG9tIC1NYXhpbXVtIDk5OTk5KQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAg -ICAgICAgICAgICAgICRudWxsID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxh -bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVu -ZykgeyByZXR1cm4gJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBs -YW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdr -b21tZW50YXJlJyAtTm90ZVByb3BlcnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3Jj -ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KC1ub3QgJHBsYW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bV0pIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlIHwgQWRkLU1l -bWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQcm9wZXJ0eVZhbHVlIChOZXctT2Jq -ZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICMgQWt0dWVsbGUgTGlzdGUgaGVyYXVzemllaGVuICsgZ2dmLiBhdXMg -QWx0c2NoZW1hIG1pZ3JpZXJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgTGlzdGUgaXN0 -IGNocm9ub2xvZ2lzY2ggKGFlbHRlc3RlIHp1ZXJzdCksIGRlciBuZXVlDQogICAgICAgICAgICAg -ICAgICAgICAgICAjIEVpbnRyYWcgd2lyZCBoaW50ZW4gYW5nZWhhZW5ndC4NCiAgICAgICAgICAg -ICAgICAgICAgICAgICRsaXN0ZSA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVy -aWMuTGlzdFtvYmplY3RdDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcua29t -bWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJHZvcmggPSAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS4k -cGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZvcmggLWlzIFtzdHJp -bmddIC1hbmQgJHZvcmgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRl -ciBTdHJpbmctRWludHJhZyDigJQgZWluIEVsZW1lbnQgb2huZSBNZXRhDQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3VzdG9tT2JqZWN0XUB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAgPSAna19sZWdhY3lfJyAr -IChHZXQtUmFuZG9tIC1NYXhpbXVtIDk5OTk5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgdGV4dCAgICAgICAgID0gJHZvcmgNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGdlYWVuZGVydEFtICA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBnZWFlbmRlcnRWb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl -aWYgKCR2b3JoIC1pcyBbYXJyYXldIC1vciAoJHZvcmggLWlzIFtTeXN0ZW0uQ29sbGVjdGlvbnMu -SUVudW1lcmFibGVdIC1hbmQgLW5vdCAoJHZvcmggLWlzIFtzdHJpbmddKSkpIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIyBTY2hvbiBlaW4gQXJyYXkgKG5ldWVzIFNjaGVtYSkN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGUgaW4gQCgkdm9yaCkp -IHsgJGxpc3RlLkFkZCgkZSkgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfSBlbHNlaWYgKCR2b3JoIC1hbmQgJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1sndGV4dCdd -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZXMgT2JqZWt0LVNjaGVt -YSB7IHRleHQsIGdlYWVuZGVydEFtLCBnZWFlbmRlcnRWb24gfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkbWlnSWQgPSBpZiAoJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1snaWQn -XSkgeyBbc3RyaW5nXSR2b3JoLmlkIH0gZWxzZSB7ICdrX2xlZ2FjeV8nICsgKEdldC1SYW5kb20g -LU1heGltdW0gOTk5OTkpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3Rl -LkFkZChbUFNDdXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlkICAgICAgICAgICA9ICRtaWdJZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgdGV4dCAgICAgICAgID0gW3N0cmluZ10kdm9yaC50ZXh0DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSBpZiAoJHZvcmguUFNPYmplY3QuUHJv -cGVydGllc1snZ2VhZW5kZXJ0QW0nXSkgIHsgJHZvcmguZ2VhZW5kZXJ0QW0gfSAgZWxzZSB7ICRu -dWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9 -IGlmICgkdm9yaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWFlbmRlcnRWb24nXSkgeyAkdm9yaC5n -ZWFlbmRlcnRWb24gfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICB9KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlLkFkZChb -UFNDdXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAg -ICAgPSAkbmV1ZUlkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgICAgID0g -JHRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSAkamV0enQN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24gPSAkYmVudXR6ZXINCiAg -ICAgICAgICAgICAgICAgICAgICAgIH0pIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAg -ICAgICMgWnVydWVjayBhbHMgQXJyYXkgKFBTLVNlcmlhbGlzaWVydW5nKQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgJGFyciA9IEAoJGxpc3RlLlRvQXJyYXkoKSkNCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVz -WyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21t -ZW50YXJlLiRkYXR1bS4kcGVyc29uSWQgPSAkYXJyDQogICAgICAgICAgICAgICAgICAgICAgICB9 -IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmtvbW1lbnRhcmUu -JGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVyc29uSWQgLU5vdGVQcm9w -ZXJ0eVZhbHVlICRhcnIgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5n -IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkbnVsbA0KICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAg -ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIFJlZGFjdGlvbiB3aWUg -YmVpIGtvbW1lbnRhci5nZWxvZXNjaHQgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy0NCiAgICAg -ICAgICAgICAgICAjIE5vdGJyZW1zZSAyMDI2LTA1LTI4KTogVm9sbHRleHQgYmxlaWJ0IGluIHBs -YW51bmcuanNvbiAoZG9ydA0KICAgICAgICAgICAgICAgICMgZWRpdGllcmJhci9sb2VzY2hiYXIp -LCBkYXMgTG9nYnVjaCBiZWtvbW10IG51ciBWb3JzY2hhdSArIExhZW5nZS4NCiAgICAgICAgICAg -ICAgICAjIFZlcm1laWRldCBQSUktRWNobywgd2VubiBlaW4gS29tbWVudGFyIHNwYWV0ZXIgZ2Vs -b2VzY2h0IHdpcmQNCiAgICAgICAgICAgICAgICAjIGFiZXIgaW0gTG9nIGltbWVyIG5vY2gga29t -cGxldHQgbGllc3Qgc3RlaHQuDQogICAgICAgICAgICAgICAgJHRleHRWb3JzY2hhdSA9ICR0ZXh0 -DQogICAgICAgICAgICAgICAgaWYgKCR0ZXh0Vm9yc2NoYXUuTGVuZ3RoIC1ndCA0MCkgeyAkdGV4 -dFZvcnNjaGF1ID0gJHRleHRWb3JzY2hhdS5TdWJzdHJpbmcoMCwgNDApICsgJ+KApicgfQ0KICAg -ICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2tvbW1lbnRhci5oaW56dWdlZnVlZ3QnIEB7 -DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAgICAgPSAkZGF0dW0NCiAgICAgICAgICAg -ICAgICAgICAgcGVyc29uSWQgICAgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBr -b21tZW50YXJJZCAgID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICB0ZXh0Vm9yc2NoYXUg -ID0gJHRleHRWb3JzY2hhdQ0KICAgICAgICAgICAgICAgICAgICB0ZXh0TGFlbmdlICAgID0gJHRl -eHQuTGVuZ3RoDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VM -b2dFaW50cmFnICdrb21tZW50YXInIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0g -JGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAg -ICAgICAgICAgICAgIGtvbW1lbnRhcklkID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICAj -IExpdmUtU3luYyBicmF1Y2h0IGRlbiBUZXh0IG5pY2h0IOKAlCBuYWVjaHN0ZXIgUmVuZGVyIGxh -ZWR0DQogICAgICAgICAgICAgICAgICAgICMgaWhuIGF1cyBwbGFudW5nLmpzb24uIE51ciBNZXRh -ZGF0ZW4gZnVlciBBa3Rpdml0YWV0cy1BbnplaWdlLg0KICAgICAgICAgICAgICAgICAgICB6ZWl0 -c3RlbXBlbCA9ICRqZXR6dA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAg -ICA9ICdoaW56dWdlZnVlZ3QnDQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklkICA9ICRu -ZXVlSWQNCiAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gJGpldHp0DQogICAgICAg -ICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9ICRiZW51dHplcg0KICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj -IERFTEVURSAvYXBpL3BsYW51bmcva29tbWVudGFyDQogICAgICAgICAgICAjIEJvZHk6IHsgZGF0 -dW0sIHBlcnNvbklkLCBrb21tZW50YXJJZCB9DQogICAgICAgICAgICAjIEJlcmVjaHRpZ3VuZzog -U3VwZXJVc2VyIG9kZXIgR2VzYW10dmVyYW50d29ydGxpY2hlLiBBbmRlcmUgUm9sbGVuDQogICAg -ICAgICAgICAjIGJla29tbWVuIDQwMyDigJQgYXVjaCBkZXIgVmVyZmFzc2VyIHNlbGJzdCBkYXJm -IG5pY2h0IGxvZXNjaGVuDQogICAgICAgICAgICAjIChiZXd1c3N0ZSBEZXNpZ25lbnRzY2hlaWR1 -bmc6IEtvbW1lbnRhci1WZXJsYXVmIGlzdCBDaHJvbmlrKS4NCiAgICAgICAgICAgIGlmICgkUGF0 -aCAtZXEgJy9hcGkvcGxhbnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScp -IHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAg -ICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1 -IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYSA9ICRib2R5IHwgQ29u -dmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXR1bSA9ICRhLmRhdHVtDQogICAgICAg -ICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAgICAg -ICRrb21tZW50YXJJZCA9IFtzdHJpbmddJGEua29tbWVudGFySWQNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkZGF0dW0gLW9yIC1ub3QgJHBlcnNvbklkIC1vciAtbm90ICRrb21tZW50YXJJZCkg -ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnZGF0dW0sIHBlcnNv -bklkIHVuZCBrb21tZW50YXJJZCBzaW5kIFBmbGljaHQnIDQwMDsgY29udGludWUNCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAg -ICAgaWYgKC1ub3QgKCRyLmlzdFN1cGVyVXNlciAtb3IgJHIuaXN0R2VzYW10dmVyYW50d29ydGxp -Y2gpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3Vw -ZXJVc2VyIHVuZCBHZXNhbXR2ZXJhbnR3b3J0bGljaGUgZHVlcmZlbiBLb21tZW50YXJlIGxvZXNj -aGVuJyA0MDMNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgJGdlbG9lc2NodGVyVGV4dCA9ICRudWxsDQogICAgICAgICAgICAg -ICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGVyZyA9IEludm9rZS1XaXRoRmlsZUxvY2sg -J3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFk -LUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -bnVsbCAtZXEgJHBsYW51bmcgLW9yIC1ub3QgJHBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sn -a29tbWVudGFyZSddKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGwgfSB9DQogICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJGRhdHVtXSkgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxsIH0gfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJv -cGVydGllc1skcGVyc29uSWRdKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGwgfSB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAkdm9yaCA9ICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLiRwZXJz -b25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBDb21wYXQgZnVlciBBbHQtRm9ybWF0ZSAo -U3ByaW50IDMg4oCUIERyaWZ0L1JvYnVzdGhlaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICMg -MjAyNi0wNS0yOCk6IENsaWVudCBrZW5uemVpY2huZXQgU3RyaW5nLSBvZGVyIFNpbmdsZS0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICMgT2JqZWN0LW9obmUtSUQgRWludHJhZWdlIGluIGtvbW1l -bnRhckxpc3RlKCkgbWl0DQogICAgICAgICAgICAgICAgICAgICAgICAjIFNlbnRpbmVsLUlEICdr -X2xlZ2FjeScuIERFTEVURSBtaXQgZGllc2VyIElEIGdlZ2VuDQogICAgICAgICAgICAgICAgICAg -ICAgICAjIGVpbmVuIEFsdC1FaW50cmFnID0ga29tcGxldHRlciBFaW50cmFnIHdpcmQgZW50ZmVy -bnQNCiAgICAgICAgICAgICAgICAgICAgICAgICMgKE1pZ3JhdGlvbiArIExvZXNjaHVuZyBpbiBl -aW5lbSBTY2hyaXR0KS4NCiAgICAgICAgICAgICAgICAgICAgICAgICR0cmVmZmVyID0gJG51bGwN -CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXVlTGlzdGUgPSBOZXctT2JqZWN0IFN5c3RlbS5D -b2xsZWN0aW9ucy5HZW5lcmljLkxpc3Rbb2JqZWN0XQ0KICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCR2b3JoIC1pcyBbc3RyaW5nXSAtYW5kICR2b3JoKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRrb21tZW50YXJJZCAtZXEgJ2tfbGVnYWN5Jykgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkdHJlZmZlciA9IFtQU0N1c3RvbU9iamVjdF1AeyB0ZXh0ID0g -JHZvcmggfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0ZXh0ID0gJG51bGw7IGZlaGxlciA9ICdr -b21tZW50YXJOaWNodEdlZnVuZGVuJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkbGlzdGUgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZvcmgg -LWlzIFthcnJheV0gLW9yICgkdm9yaCAtaXMgW1N5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYWJs -ZV0gLWFuZCAtbm90ICgkdm9yaCAtaXMgW3N0cmluZ10pKSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkbGlzdGUgPSBAKCR2b3JoKQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0gZWxzZWlmICgkdm9yaCAtYW5kICR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQn -XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0SWQgPSBpZiAoJHZvcmgu -UFNPYmplY3QuUHJvcGVydGllc1snaWQnXSkgeyBbc3RyaW5nXSR2b3JoLmlkIH0gZWxzZSB7ICcn -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGFsdElkKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGtvbW1lbnRhcklkIC1lcSAn -a19sZWdhY3knKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRy -ZWZmZXIgPSAkdm9yaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdGV4 -dCA9ICRudWxsOyBmZWhsZXIgPSAna29tbWVudGFyTmljaHRHZWZ1bmRlbicgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3Rl -ID0gQCgkdm9yaCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkdHJlZmZlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgk -ZSBpbiAkbGlzdGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlaWQg -PSBpZiAoJGUgLWFuZCAkZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydpZCddKSB7IFtzdHJpbmddJGUu -aWQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRlaWQgLWVxICRrb21tZW50YXJJZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICR0cmVmZmVyID0gJGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5l -dWVMaXN0ZS5BZGQoJGUpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgtbm90ICR0cmVmZmVyKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGw7 -IGZlaGxlciA9ICdrb21tZW50YXJOaWNodEdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkbmV1ZUxpc3RlLkNvdW50IC1lcSAwKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIyBMZXR6dGVyIEtvbW1lbnRhciBlbnRmZXJudCAtPiBQcm9wZXJ0eSBrb21wbGV0 -dCByYXVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS4k -ZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICMgTGVlcmVyIFRhZ2VzLUJ1Y2tldCBhdWZyYWV1bWVuDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJHRhZ1Byb3BzID0gQCgkcGxhbnVuZy5rb21tZW50YXJlLiRk -YXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkdGFnUHJvcHMuQ291bnQgLWVxIDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJHBsYW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkZGF0dW0p -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -fSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJl -LiRkYXR1bS4kcGVyc29uSWQgPSBAKCRuZXVlTGlzdGUuVG9BcnJheSgpKQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAn -cGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAg -ICAkZW50ZmVybnRUZXh0ID0gaWYgKCR0cmVmZmVyLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQn -XSkgeyBbc3RyaW5nXSR0cmVmZmVyLnRleHQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgcmV0dXJuIEB7IHRleHQgPSAkZW50ZmVybnRUZXh0IH0NCiAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGVyZy5mZWhsZXIpIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgkZXJnLmZlaGxlciAtZXEgJ2tvbW1lbnRhck5pY2h0R2VmdW5k -ZW4nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -J0tvbW1lbnRhciBtaXQgZGllc2VyIElEIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlDQog -ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgJGdlbG9lc2NodGVyVGV4dCA9ICRlcmcudGV4dA0KICAgICAgICAgICAgICAg -IH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxv -Y2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgIyBSZWRhY3Rpb24gKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1Ob3RicmVtc2Ug -MjAyNi0wNS0yOCk6DQogICAgICAgICAgICAgICAgIyBQSUktU2NodXR6LiBGcnVlaGVyIGxhbmRl -dGUgZGVyIHZvbGxzdGFlbmRpZ2UgS29tbWVudGFyLVRleHQgaW0NCiAgICAgICAgICAgICAgICAj -IExvZ2J1Y2gg4oCUIHdlbm4gZGVyIEtvbW1lbnRhciBLcmFua2hlaXRzLS9EaXN6aXBsaW5hci1J -bmZvIGVudGhpZWx0LA0KICAgICAgICAgICAgICAgICMgbGVidGUgc2llIG5hY2ggJ0xvZXNjaGVu -JyB3ZWl0ZXIgaW0gTG9nLiBKZXR6dCBudXIgTGFlbmdlICsga3VyemVyDQogICAgICAgICAgICAg -ICAgIyBBdXN6dWcgKDQwIFplaWNoZW4pLCBnZW51ZyBmdWVyIE5hY2h2b2xsemllaGJhcmtlaXQg -b2huZSBWb2xsdGV4dC4NCiAgICAgICAgICAgICAgICAkdGV4dFZvcnNjaGF1ID0gJycNCiAgICAg -ICAgICAgICAgICBpZiAoJGdlbG9lc2NodGVyVGV4dCkgew0KICAgICAgICAgICAgICAgICAgICAk -a3VyeiA9ICRnZWxvZXNjaHRlclRleHQNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRrdXJ6Lkxl -bmd0aCAtZ3QgNDApIHsgJGt1cnogPSAka3Vyei5TdWJzdHJpbmcoMCwgNDApICsgJ+KApicgfQ0K -ICAgICAgICAgICAgICAgICAgICAkdGV4dFZvcnNjaGF1ID0gJGt1cnoNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgJHRleHRMYWVuZ2UgPSBpZiAoJGdlbG9lc2NodGVyVGV4dCkg -eyAkZ2Vsb2VzY2h0ZXJUZXh0Lkxlbmd0aCB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICBX -cml0ZS1Mb2dFaW50cmFnICdrb21tZW50YXIuZ2Vsb2VzY2h0JyBAew0KICAgICAgICAgICAgICAg -ICAgICBkYXR1bSAgICAgICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklk -ICAgICAgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFySWQgICA9ICRr -b21tZW50YXJJZA0KICAgICAgICAgICAgICAgICAgICB0ZXh0Vm9yc2NoYXUgID0gJHRleHRWb3Jz -Y2hhdQ0KICAgICAgICAgICAgICAgICAgICB0ZXh0TGFlbmdlICAgID0gJHRleHRMYWVuZ2UNCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VpbnRyYWcgJ2tv -bW1lbnRhcicgQHsNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAg -ICAgICAgICAgICAgICAgcGVyc29uSWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAg -a29tbWVudGFySWQgPSAka29tbWVudGFySWQNCiAgICAgICAgICAgICAgICAgICAgIyBMaXZlLVN5 -bmMtQ2hhbm5lbCBicmF1Y2h0IGRlbiBUZXh0IG5pY2h0IOKAlCBCcm93c2VyIGxhZWR0DQogICAg -ICAgICAgICAgICAgICAgICMgYmVpIG5hZWNoc3RlbSBSZW5kZXIgZWggYXVzIHBsYW51bmcuanNv -biAod28gZGVyIEVpbnRyYWcNCiAgICAgICAgICAgICAgICAgICAgIyB3ZWcgaXN0KS4gSGllciBu -dXIgTWV0YWRhdGVuIGZ1ZXIgQWt0aXZpdGFldHMtQW56ZWlnZS4NCiAgICAgICAgICAgICAgICAg -ICAgbmV1ICAgICAgPSAnJw0KICAgICAgICAgICAgICAgICAgICB6ZWl0c3RlbXBlbCA9IChHZXQt -RGF0ZSkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBT -ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnOyBrb21tZW50 -YXJJZCA9ICRrb21tZW50YXJJZCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg -ICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBQRVJTT05FTiA9PT09PQ0KICAgICAgICAgICAg -aWYgKCRQYXRoIC1lcSAnL2FwaS9wZXJzb25lbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsN -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAk -UmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgJG5ldSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNv -bg0KICAgICAgICAgICAgICAgICMgUmVhZC1Nb2RpZnktV3JpdGUgYXRvbWFyIGluIGRlciBEYXRl -aS1TcGVycmUuIFdpY2h0aWcgbmljaHQgbnVyDQogICAgICAgICAgICAgICAgIyBnZWdlbiBMb3N0 -IFVwZGF0ZXMsIHNvbmRlcm4gZ2VnZW4gZGllIG1heElkLVJhY2U6IHp3ZWkgcGFyYWxsZWxlDQog -ICAgICAgICAgICAgICAgIyBQZXJzb25lbi1BbmxhZ2VuIHd1ZXJkZW4gc29uc3QgZGllc2VsYmUg -bWF4SWQgbGVzZW4gdW5kIElERU5USVNDSEUNCiAgICAgICAgICAgICAgICAjIElEcyB2ZXJnZWJl -biAoZG9wcGVsdGUgUGVyc29uZW4tSURzID0ga29ycnVwdGVyIFN0YXRlKS4NCiAgICAgICAgICAg -ICAgICAkcGVyc1JlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg -ICAgICAkcGVyc1JlcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAg -ICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQog -ICAgICAgICAgICAgICAgJG1heElkID0gMA0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGlu -ICRwbGFudW5nLnBlcnNvbmVuKSB7IGlmICgkcC5pZCAtZ3QgJG1heElkKSB7ICRtYXhJZCA9ICRw -LmlkIH0gfQ0KICAgICAgICAgICAgICAgICRuZXVlSWQgPSAkbWF4SWQgKyAxDQoNCiAgICAgICAg -ICAgICAgICAjIEVpbnJlaWh1bmdzLUxvZ2lrOiAidW50ZW4iIChEZWZhdWx0KSwgInZvciIgb2Rl -ciAibmFjaCIgZWluZXIgUmVmZXJlbnpwZXJzb24NCiAgICAgICAgICAgICAgICAkZWlucmVpaGVu -ID0gJ3VudGVuJw0KICAgICAgICAgICAgICAgIGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNb -J2VpbnJlaWhlbiddIC1hbmQgJG5ldS5laW5yZWloZW4pIHsgJGVpbnJlaWhlbiA9IChbc3RyaW5n -XSRuZXUuZWlucmVpaGVuKS5Ub0xvd2VyKCkgfQ0KICAgICAgICAgICAgICAgICRyZWZJZCA9ICRu -dWxsDQogICAgICAgICAgICAgICAgaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1sncmVmZXJl -bnpJZCddIC1hbmQgJG51bGwgLW5lICRuZXUucmVmZXJlbnpJZCkgeyAkcmVmSWQgPSBbaW50XSRu -ZXUucmVmZXJlbnpJZCB9DQoNCiAgICAgICAgICAgICAgICAkemllbFBvcyA9ICRudWxsDQogICAg -ICAgICAgICAgICAgaWYgKCgkZWlucmVpaGVuIC1lcSAndm9yJyAtb3IgJGVpbnJlaWhlbiAtZXEg -J25hY2gnKSAtYW5kICRudWxsIC1uZSAkcmVmSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgJHJl -ZlBvcyA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5n -LnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2ludF0kcC5pZCAtZXEg -JHJlZklkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlZlBvcyA9IGlmICgkcC5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddIC1hbmQgJHAucG9zaXRpb24pIHsgW2ludF0k -cC5wb3NpdGlvbiB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh -aw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHJlZlBvcykgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgJHppZWxQb3MgPSBpZiAoJGVpbnJlaWhlbiAtZXEgJ3ZvcicpIHsgJHJlZlBvcyB9 -IGVsc2UgeyAkcmVmUG9zICsgMSB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIFBvc2l0aW9u -ZW4gYWIgemllbFBvcyB1bSAxIG5hY2ggaGludGVuIHNjaGllYmVuDQogICAgICAgICAgICAgICAg -ICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRwcCA9IGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlv -biddIC1hbmQgJHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3NpdGlvbiB9IGVsc2UgeyAwIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBwIC1nZSAkemllbFBvcykgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sncG9z -aXRpb24nXSkgeyAkcC5wb3NpdGlvbiA9ICRwcCArIDEgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdwb3Np -dGlvbicgLU5vdGVQcm9wZXJ0eVZhbHVlICgkcHAgKyAxKSAtRm9yY2UgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG51bGwg -LWVxICR6aWVsUG9zKSB7DQogICAgICAgICAgICAgICAgICAgICRtYXhQb3MgPSAwDQogICAgICAg -ICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7ICRwb3MgPSBp -ZiAoJHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3NpdGlvbiB9IGVsc2UgeyAwIH07IGlmICgkcG9z -IC1ndCAkbWF4UG9zKSB7ICRtYXhQb3MgPSAkcG9zIH0gfQ0KICAgICAgICAgICAgICAgICAgICAk -emllbFBvcyA9ICRtYXhQb3MgKyAxDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg -ICAgJHBlcnNvbiA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGlkID0gJG5ldWVJ -ZA0KICAgICAgICAgICAgICAgICAgICBha3RpdiA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ2FrdGl2J10pIHsgJG5ldS5ha3RpdiB9IGVsc2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAg -ICAgICAgIG5hbWUgPSAkbmV1Lm5hbWUNCiAgICAgICAgICAgICAgICAgICAgdm9ybmFtZSA9IGlm -ICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkgeyAkbmV1LnZvcm5hbWUgfSBl -bHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBkaWVuc3RncmFkID0gaWYgKCRuZXUuUFNP -YmplY3QuUHJvcGVydGllc1snZGllbnN0Z3JhZCddKSB7ICRuZXUuZGllbnN0Z3JhZCB9IGVsc2Ug -eyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGZ1bmt0aW9uID0gaWYgKCRuZXUuUFNPYmplY3Qu -UHJvcGVydGllc1snZnVua3Rpb24nXSkgeyAkbmV1LmZ1bmt0aW9uIH0gZWxzZSB7ICcnIH0NCiAg -ICAgICAgICAgICAgICAgICAgZ3J1cHBlID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1sn -Z3J1cHBlJ10pIHsgJG5ldS5ncnVwcGUgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAg -ICBvZSA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ29lJ10pIHsgJG5ldS5vZSB9IGVs -c2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGRpZW5zdG51bW1lciA9IGlmICgkbmV1LlBT -T2JqZWN0LlByb3BlcnRpZXNbJ2RpZW5zdG51bW1lciddKSB7ICRuZXUuZGllbnN0bnVtbWVyIH0g -ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgdGVsZWZvbiA9IGlmICgkbmV1LlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ3RlbGVmb24nXSkgeyAkbmV1LnRlbGVmb24gfSBlbHNlIHsgJycgfQ0K -ICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICR6aWVsUG9zDQogICAgICAgICAgICAgICAg -ICAgIGVtYWlsID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZW1haWwnXSkgeyAkbmV1 -LmVtYWlsIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgbndLZW5udW5nID0gaWYg -KCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snbndLZW5udW5nJ10pIHsgJG5ldS5ud0tlbm51bmcg -fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBnZWJ1cnRzZGF0dW0gPSBpZiAoJG5l -dS5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWJ1cnRzZGF0dW0nXSkgeyAkbmV1LmdlYnVydHNkYXR1 -bSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGVsRGdsUXVhbGlmaXppZXJ0ID0g -aWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZWxEZ2xRdWFsaWZpemllcnQnXSkgeyBbYm9v -bF0kbmV1LmVsRGdsUXVhbGlmaXppZXJ0IH0gZWxzZSB7ICRmYWxzZSB9DQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICMgTWFya2VyIGZ1ZXIgUGVyc29uZW4sIGRpZSBwZXIgRXhj -ZWwtSW1wb3J0IGZyaXNjaCBhbmdlbGVndA0KICAgICAgICAgICAgICAgICMgd3VyZGVuLiBQZXJz -b25hbHZlcndhbHR1bmcgYmxlbmRldCBzaWUgaW0gTmV1aW1wb3J0LUJsb2NrDQogICAgICAgICAg -ICAgICAgIyBvYmVuIGVpbiwgYmlzIGRhcyBGbGFnIG1hbnVlbGwgd2VnZ2VzZXR6dCB3aXJkIChF -cmxlZGlndC0NCiAgICAgICAgICAgICAgICAjIEJ1dHRvbikgb2RlciBkYXMgbGV0enRlIFBmbGlj -aHRmZWxkIChEaWVuc3RncnVwcGUpIGdlcGZsZWd0DQogICAgICAgICAgICAgICAgIyBpc3QgdW5k -IGRlciBVc2VyIGF1ZiAiQmxvY2sgbGVlcmVuIiBrbGlja3QuDQogICAgICAgICAgICAgICAgaWYg -KCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snaW1wb3J0TmV1QW0nXSAtYW5kICRuZXUuaW1wb3J0 -TmV1QW0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHBlcnNvblsnaW1wb3J0TmV1QW0nXSA9IFtz -dHJpbmddJG5ldS5pbXBvcnROZXVBbQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAkcGxhbnVuZy5wZXJzb25lbiArPSBbUFNDdXN0b21PYmplY3RdJHBlcnNvbg0KICAgICAgICAg -ICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVs -bA0KICAgICAgICAgICAgICAgIHJldHVybiBAeyBuZXVlSWQgPSAkbmV1ZUlkOyB6aWVsUG9zID0g -JHppZWxQb3M7IGVpbnJlaWhlbiA9ICRlaW5yZWloZW4gfQ0KICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAk -UmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5hbmdlbGVndCcg -QHsgcGVyc29uSWQgPSAkcGVyc1Jlcy5uZXVlSWQ7IG5hbWUgPSAiJCgkbmV1LnZvcm5hbWUpICQo -JG5ldS5uYW1lKSIuVHJpbSgpOyBlaW5yZWloZW4gPSAkcGVyc1Jlcy5laW5yZWloZW47IHBvc2l0 -aW9uID0gJHBlcnNSZXMuemllbFBvcyB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 -ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnYW5nZWxlZ3QnOyBpZCA9ICRwZXJzUmVzLm5ldWVJZDsg -cG9zaXRpb24gPSAkcGVyc1Jlcy56aWVsUG9zIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGVyc29u -ZW4vKFxkKykkJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYg -KC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1p -bi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtp -bnRdJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVz -dA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkdXBk -YXRlID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgIyBBdWRpdC1Q -aGFzZSBBLjMgKDIwMjYtMDUtMjEpOiBQcml2aWxlZ2llbi1TY2h1dHouIFJlaW5lDQogICAgICAg -ICAgICAgICAgIyBGYWNoYXVmc2ljaHQtQWRtaW5zIChzZWhlbi5hZG1pbmlzdHJhdGlvbj10cnVl -LCBhYmVyIGtlaW4gU1UpDQogICAgICAgICAgICAgICAgIyBkdWVyZmVuIFN0YW1tZGF0ZW4gZWRp -dGllcmVuLCBhYmVyIEtFSU5FIFNpY2h0YmFya2VpdHMtDQogICAgICAgICAgICAgICAgIyBPdmVy -cmlkZXMgKGBzZWhlbmApIG9kZXIgZWRpdGllci1SZWNodGUgKGBlZGl0UmVjaHRlYCkgc2V0emVu -DQogICAgICAgICAgICAgICAgIyDigJQgc29uc3Qga29lbm50ZW4gc2llIHNpY2ggTG9nYnVjaC0v -U3RhdGlzdGlrLVNpY2h0IHNlbGJzdA0KICAgICAgICAgICAgICAgICMgZnJlaXNjaGFsdGVuLiBQ -ZXIgRGV2VG9vbHMtbWFuaXB1bGllcnRlcyBQYXlsb2FkIGFiZmFuZ2VuLg0KICAgICAgICAgICAg -ICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsNCiAgICAgICAgICAgICAgICAgICAg -aWYgKCR1cGRhdGUuUFNPYmplY3QuUHJvcGVydGllc1snc2VoZW4nXSkgICAgICB7ICR1cGRhdGUu -UFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ3NlaGVuJykgfQ0KICAgICAgICAgICAgICAgICAg -ICBpZiAoJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlZGl0UmVjaHRlJ10pIHsgJHVwZGF0 -ZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgnZWRpdFJlY2h0ZScpIH0NCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgJHB1dFJlcyA9ICRudWxsDQogICAgICAgICAgICAgICAg -dHJ5IHsNCiAgICAgICAgICAgICAgICAkcHV0UmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxh -bnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3Qg -J3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gICA9ICRmYWxzZQ0KICAg -ICAgICAgICAgICAgICRhbHRlV2VydGUgID0gQHt9DQogICAgICAgICAgICAgICAgJHBlcnNvbk5h -bWUgPSAnJw0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVu -KSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcC5pZCAtZXEgJHBlcnNvbklkKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9ICgoIiQoJHAudm9ybmFtZSkgJCgkcC5u -YW1lKSIpLlRyaW0oKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcm9wIGlu -ICR1cGRhdGUuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkcHJvcC5OYW1lIC1uZSAnaWQnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRhbHRlV2VydGVbJHByb3AuTmFtZV0gPSBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGll -c1skcHJvcC5OYW1lXSkgeyAkcC4oJHByb3AuTmFtZSkgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1skcHJv -cC5OYW1lXSkgeyAkcC4oJHByb3AuTmFtZSkgPSAkcHJvcC5WYWx1ZSB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5h -bWUgJHByb3AuTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJHByb3AuVmFsdWUgLUZvcmNlIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gPSAkdHJ1ZQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZ2VmdW5kZW4pIHsgcmV0dXJuIEB7IGdlZnVuZGVu -ID0gJGZhbHNlIH0gfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcu -anNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIHJldHVybiBAeyBnZWZ1 -bmRlbiA9ICR0cnVlOyBhbHRlV2VydGUgPSAkYWx0ZVdlcnRlOyBwZXJzb25OYW1lID0gJHBlcnNv -bk5hbWUgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAg -ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8i -KSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgt -bm90ICRwdXRSZXMuZ2VmdW5kZW4pIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgIlBlcnNvbiAkcGVy -c29uSWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRh -bHRlV2VydGUgID0gJHB1dFJlcy5hbHRlV2VydGUNCiAgICAgICAgICAgICAgICAkcGVyc29uTmFt -ZSA9ICRwdXRSZXMucGVyc29uTmFtZQ0KDQogICAgICAgICAgICAgICAgIyBEaWZmLURpY3Qg4oCU -IG51ciBGZWxkZXIsIGluIGRlbmVuIHNpY2ggZGVyIFdlcnQgdGF0c2FlY2hsaWNoDQogICAgICAg -ICAgICAgICAgIyBnZWFlbmRlcnQgaGF0LiBKU09OLXN0YWJpbGUgVmVyZ2xlaWNoc2Jhc2lzLg0K -ICAgICAgICAgICAgICAgICRnZWFlbmRlcnQgPSBbb3JkZXJlZF1Ae30NCiAgICAgICAgICAgICAg -ICBmb3JlYWNoICgkcHJvcCBpbiAkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAg -ICAgICAgICAgICAgICAgaWYgKCRwcm9wLk5hbWUgLWVxICdpZCcpIHsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICAgICAkYWx0VmFsICA9ICRhbHRlV2VydGVbJHByb3AuTmFtZV0NCiAgICAg -ICAgICAgICAgICAgICAgJG5ldVZhbCAgPSAkcHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAg -ICAkYWx0SnNvbiA9ICgkYWx0VmFsIHwgQ29udmVydFRvLUpzb24gLUNvbXByZXNzIC1EZXB0aCA4 -KQ0KICAgICAgICAgICAgICAgICAgICAkbmV1SnNvbiA9ICgkbmV1VmFsIHwgQ29udmVydFRvLUpz -b24gLUNvbXByZXNzIC1EZXB0aCA4KQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGFsdEpzb24g -LW5lICRuZXVKc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZ2VhZW5kZXJ0WyRwcm9w -Lk5hbWVdID0gW29yZGVyZWRdQHsgYWx0ID0gJGFsdFZhbDsgbmV1ID0gJG5ldVZhbCB9DQogICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBX -cml0ZS1Mb2dFaW50cmFnICdwZXJzb24uZ2VhZW5kZXJ0JyAoW29yZGVyZWRdQHsNCiAgICAgICAg -ICAgICAgICAgICAgcGVyc29uSWQgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIG5h -bWUgICAgICA9ICRwZXJzb25OYW1lDQogICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydCA9ICRn -ZWFlbmRlcnQNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgICMgSGlud2Vpcy1U -cmlnZ2VyOiBJZGVudGl0YWV0cy1BZW5kZXJ1bmcgKG53S2VubnVuZyAvIGVtYWlsKSBiZWtvbW10 -DQogICAgICAgICAgICAgICAgIyBlaW5lbiBJbi1BcHAtSGlud2VpcyBmdWVyIFNVICsgR2VzYW10 -dmVyYW50d29ydGxpY2hlLiBQcm8gRmVsZCBlaW4NCiAgICAgICAgICAgICAgICAjIGVpZ2VuZXIg -RWludHJhZywgZGFtaXQgZGFzIE1vZGFsIGxlc2JhciBibGVpYnQuDQogICAgICAgICAgICAgICAg -Zm9yZWFjaCAoJGZlbGQgaW4gQCgnbndLZW5udW5nJywgJ2VtYWlsJykpIHsNCiAgICAgICAgICAg -ICAgICAgICAgaWYgKCRnZWFlbmRlcnQuQ29udGFpbnMoJGZlbGQpKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAkZGlmZiA9ICRnZWFlbmRlcnRbJGZlbGRdDQogICAgICAgICAgICAgICAgICAg -ICAgICBOZXctSGlud2VpcyAnaWRlbnRpdGFldF9nZWFlbmRlcnQnIChbb3JkZXJlZF1Aew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbl9pZCAgID0gJHBlcnNvbklkDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgcGVyc29uX25hbWUgPSAkcGVyc29uTmFtZQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGZlbGQgICAgICAgID0gJGZlbGQNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBhbHRlcl93ZXJ0ICA9ICIkKCRkaWZmLmFsdCkiDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgbmV1ZXJfd2VydCAgPSAiJCgkZGlmZi5uZXUpIg0KICAgICAgICAgICAgICAg -ICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv -bk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2FrdHVhbGlzaWVydCcgfQ0KICAgICAgICAg -ICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjIERFTEVURSAvYXBp -L3BlcnNvbmVuL3tpZH0gICAgICAgICAgICAtPiBTb2Z0LURlbGV0ZSAoZ2Vsb2VzY2h0QW0gZ2Vz -ZXR6dCwgUGVyc29uIGJsZWlidCBpbSBEYXRlbnNhdHogZnVlciBQYXBpZXJrb3JiLVJ1ZWNraG9s -dW5nKQ0KICAgICAgICAgICAgIyBERUxFVEUgL2FwaS9wZXJzb25lbi97aWR9P2VuZGd1ZWx0aWc9 -MSAtPiBIYXJkLURlbGV0ZSAoUGVyc29uIGtvbXBsZXR0IGVudGZlcm5lbiwgRWludHJhZWdlL0tv -bW1lbnRhcmUgdmVyd2Fpc2VuKQ0KICAgICAgICAgICAgIyBWb3IgZGVtIFNvZnQtRGVsZXRlIHdl -cmRlbiBpbSBzZWxiZW4gWnVnIGJlcmVpdHMgUGFwaWVya29yYi1FaW50cmFlZ2UgYXVmZ2VyYWV1 -bXQsIGRpZSBhZWx0ZXIgYWxzDQogICAgICAgICAgICAjIGFkbWluLnBhcGllcmtvcmJUYWdlQXVm -YmV3YWhydW5nIChEZWZhdWx0IDMwIFRhZ2UpIHNpbmQuIFNvIGJsZWlidCBkZXIgRGF0ZW5zYXR6 -IHNjaGxhbmssIG9obmUNCiAgICAgICAgICAgICMgZWluZW4gc2VwYXJhdGVuIENyb24tSm9iIHp1 -IGJyYXVjaGVuLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGVyc29uZW4v -KFxkKykkJyAtYW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgaWYg -KC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1p -bi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtp -bnRdJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkZW5kZ3VlbHRpZyA9ICRmYWxzZQ0KICAg -ICAgICAgICAgICAgIGlmICgkUmVxdWVzdC5VcmwuUXVlcnkpIHsNCiAgICAgICAgICAgICAgICAg -ICAgJHEgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVlcnlTdHJpbmcoJFJlcXVl -c3QuVXJsLlF1ZXJ5KQ0KICAgICAgICAgICAgICAgICAgICAkZW5kZ3VlbHRpZyA9IChbc3RyaW5n -XSRxWydlbmRndWVsdGlnJ10pIC1lcSAnMScNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgJGRlbFJlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg -ICAgICAkZGVsUmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAg -ICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAg -ICAgICAgICAgICAgICAkYWRtaW4gICA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAg -ICAgICAgICAgICAgICAkYXVmYmV3YWhydW5nID0gMzANCiAgICAgICAgICAgICAgICBpZiAoJGFk -bWluIC1hbmQgJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BhcGllcmtvcmJUYWdlQXVmYmV3 -YWhydW5nJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgJGF1ZmJld2FocnVuZyA9IFtp -bnRdJGFkbWluLnBhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nIH0gY2F0Y2gge30NCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgJGpldHp0ID0gKEdldC1EYXRlKS5Ub1N0cmluZygn -bycpDQogICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAnJw0KICAgICAgICAgICAgICAgICRn -ZWZ1bmRlbiA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICRuZXVlUGVyc29uZW4gPSBAKCkNCiAg -ICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAg -ICAgICAgICAgICAgICBpZiAoJHAuaWQgLWVxICRwZXJzb25JZCkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgJGdlZnVuZGVuID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICRwZXJz -b25OYW1lID0gKCgiJCgkcC52b3JuYW1lKSAkKCRwLm5hbWUpIikuVHJpbSgpKQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRlbmRndWVsdGlnKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIyBIYXJkLURlbGV0ZTogdWViZXJzcHJpbmdlbiwgUGVyc29uIGZsaWVndCByYXVzDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAg -ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0 -LlByb3BlcnRpZXNbJ2dlbG9lc2NodEFtJ10pIHsgJHAuZ2Vsb2VzY2h0QW0gPSAkamV0enQgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIgLU5vdGVQ -cm9wZXJ0eU5hbWUgJ2dlbG9lc2NodEFtJyAtTm90ZVByb3BlcnR5VmFsdWUgJGpldHp0IC1Gb3Jj -ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ldWVQZXJzb25lbiArPSAkcA0KICAg -ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAg -ICAgICAgICAgICAgICAgICAgICAgIyBBdXRvLVB1cmdlOiBTb2Z0LURlbGV0ZWQtUGVyc29uZW4s -IGRlcmVuIGdlbG9lc2NodEFtIGFlbHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHMg -JGF1ZmJld2FocnVuZyBUYWdlIGlzdCwgd2VyZGVuIGhpZXIgZW5kZ3VlbHRpZyBlbnRmZXJudC4N -CiAgICAgICAgICAgICAgICAgICAgICAgICRwdXJnZSA9ICRmYWxzZQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlbG9lc2NodEFtJ10gLWFuZCAk -cC5nZWxvZXNjaHRBbSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHRlciA9IFtkYXRldGltZV0kcC5nZWxvZXNj -aHRBbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKE5ldy1UaW1lU3BhbiAt -U3RhcnQgJGFsdGVyIC1FbmQgKEdldC1EYXRlKSkuVG90YWxEYXlzIC1ndCAkYXVmYmV3YWhydW5n -KSB7ICRwdXJnZSA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNo -IHt9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkcHVyZ2UpIHsgJG5ldWVQZXJzb25lbiArPSAkcCB9DQogICAgICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGdlZnVu -ZGVuKSB7IHJldHVybiBAeyBnZWZ1bmRlbiA9ICRmYWxzZSB9IH0NCiAgICAgICAgICAgICAgICAk -cGxhbnVuZy5wZXJzb25lbiA9IFtvYmplY3RbXV1AKCRuZXVlUGVyc29uZW4pDQogICAgICAgICAg -ICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxs -DQogICAgICAgICAgICAgICAgcmV0dXJuIEB7IGdlZnVuZGVuID0gJHRydWU7IHBlcnNvbk5hbWUg -PSAkcGVyc29uTmFtZTsgamV0enQgPSAkamV0enQgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz -cG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRkZWxSZXMuZ2VmdW5kZW4pIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgIlBlcnNvbiAkcGVyc29uSWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0gJGRlbFJlcy5wZXJzb25OYW1lDQog -ICAgICAgICAgICAgICAgJGpldHp0ID0gJGRlbFJlcy5qZXR6dA0KICAgICAgICAgICAgICAgIGlm -ICgkZW5kZ3VlbHRpZykgew0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdw -ZXJzb24uZW5kZ3VlbHRpZy5nZWxvZXNjaHQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklkOyBuYW1l -ID0gJHBlcnNvbk5hbWUgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg -ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5pbi5wYXBpZXJrb3JiJyBAeyBwZXJzb25J -ZCA9ICRwZXJzb25JZDsgbmFtZSA9ICRwZXJzb25OYW1lOyBnZWxvZXNjaHRBbSA9ICRqZXR6dCB9 -DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVz -cG9uc2UgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCc7IG1vZHVzID0gaWYgKCRlbmRndWVsdGlnKSB7 -ICdlbmRndWVsdGlnJyB9IGVsc2UgeyAncGFwaWVya29yYicgfSB9DQogICAgICAgICAgICAgICAg -Y29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -cGVyc29uZW4vcmVpaGVuZm9sZ2UnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -J0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJv -ZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkg -eyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJHJlaWhlbmZvbGdlID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u -DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgSW52b2tlLVdpdGhG -aWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVu -ZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAg -ICAgZm9yZWFjaCAoJHIgaW4gJHJlaWhlbmZvbGdlKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRwLmlkIC1lcSAkci5pZCkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9u -J10pIHsgJHAucG9zaXRpb24gPSAkci5wb3NpdGlvbiB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdw -b3NpdGlvbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRyLnBvc2l0aW9uIC1Gb3JjZSB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAn -cGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgIH0g -fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAg -ICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUN -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVy -c29uZW4ucmVpaGVuZm9sZ2UuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpz -b25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdha3R1YWxpc2llcnQnIH0NCiAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IEhJ -TldFSVNFIChJbi1BcHAtQmFubmVyL01vZGFsLVN5c3RlbSkgPT09PT0NCiAgICAgICAgICAgICMg -R0VUICAvYXBpL2hpbndlaXNlICAgICAgICAgICAgLT4gb2ZmZW5lIEhpbndlaXNlIGZ1ZXIgZGVu -IGVpbmdlbG9nZ3RlbiBVc2VyDQogICAgICAgICAgICAjIFBPU1QgL2FwaS9oaW53ZWlzZS97aWR9 -L2tlbm50bmlzIC0+IEtlbm50bmlzbmFobWUgc2V0emVuDQogICAgICAgICAgICAjIEdFVCAgL2Fw -aS9oaW53ZWlzZS91ZWJlcnNpY2h0IC0+IFNVLW9ubHksIHZvbGxzdGFlbmRpZ2UgU2ljaHQgaW5r -bC4gTGVzZS1TdGF0dXMNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGlud2Vpc2Un -IC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAjIEdhdGVkOiBudXIg -RW1wZmFlbmdlciAoU1Ugb2RlciBHZXNhbXR2ZXJhbnR3b3J0bGljaCkgZHVlcmZlbiB1ZWJlcmhh -dXB0IGZyYWdlbg0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAg -ICAgIGlmICgtbm90ICgkci5pc3RTdXBlclVzZXIgLW9yICRyLmlzdEdlc2FtdHZlcmFudHdvcnRs -aWNoKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 -IGhpbndlaXNlID0gQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgSW52b2tlLUhpbndlaXNQcnVuaW5nDQogICAgICAg -ICAgICAgICAgJGggPSBSZWFkLUpzb25PYmplY3QgJ2hpbndlaXNlLmpzb24nDQogICAgICAgICAg -ICAgICAgaWYgKCRudWxsIC1lcSAkaCAtb3IgLW5vdCAkaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydo -aW53ZWlzZSddKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u -c2UgQHsgaGlud2Vpc2UgPSBAKCkgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkb2ZmZW4gPSBAKCkNCiAgICAgICAgICAg -ICAgICBmb3JlYWNoICgkZWludHJhZyBpbiBAKCRoLmhpbndlaXNlKSkgew0KICAgICAgICAgICAg -ICAgICAgICAkaXN0RW1wZmFlbmdlciA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAkaXN0 -R2VsZXNlbiAgICA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAk -ZWludHJhZy5rZW5udG5pc25haG1lbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICBpZiAoVGVzdC1NYXRjaEtlbm51bmcgKFtzdHJpbmddJHAuTmFtZSkpIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXN0RW1wZmFlbmdlciA9ICR0cnVlDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkcC5WYWx1ZSkgeyAkaXN0R2Vs -ZXNlbiA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgIGlmICgkaXN0RW1wZmFlbmdlciAtYW5kIC1ub3QgJGlzdEdlbGVzZW4pIHsgJG9mZmVu -ICs9ICRlaW50cmFnIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9IFtvYmplY3RbXV0kb2ZmZW4gfQ0KICAg -ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBh -dGggLW1hdGNoICdeL2FwaS9oaW53ZWlzZS8oXGQrKS9rZW5udG5pcyQnIC1hbmQgJE1ldGhvZCAt -ZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGhpbndlaXNJZCA9IFtpbnRdJE1hdGNoZXNb -MV0NCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICBpZiAo -LW5vdCAoJHIuaXN0U3VwZXJVc2VyIC1vciAkci5pc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCkpIHsN -CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRp -Z3VuZycgNDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAk -c2NyaXB0OmhpbndlaXNLZW5udG5pc0dlc2V0enQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAk -c2NyaXB0OmhpbndlaXNLZW5udG5pc1R5cCA9ICRudWxsDQogICAgICAgICAgICAgICAgSW52b2tl -LVdpdGhGaWxlTG9jayAnaGlud2Vpc2UuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAkaCA9 -IFJlYWQtSnNvbk9iamVjdCAnaGlud2Vpc2UuanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYg -KCRudWxsIC1lcSAkaCAtb3IgLW5vdCAkaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlzZSdd -KSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlaW50cmFnIGluIEAo -JGguaGlud2Vpc2UpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2ludF0kZWludHJh -Zy5pZCAtbmUgJGhpbndlaXNJZCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAjIEVyc3QgZGVuIE1hdGNoLVNsb3QgZXJtaXR0ZWxuLCBkYW5uIGF1c3NlcmhhbGIgZGVyDQog -ICAgICAgICAgICAgICAgICAgICAgICAjIFByb3BlcnR5LUVudW1lcmF0aW9uIGluLXBsYWNlIHNl -dHplbiAoUFMgNS4xIG1hZyBkYXMNCiAgICAgICAgICAgICAgICAgICAgICAgICMgTW9kaWZpemll -cmVuIHdhZWhyZW5kIGZvcmVhY2ggbmljaHQgaW1tZXIpLg0KICAgICAgICAgICAgICAgICAgICAg -ICAgJG1hdGNoTmFtZSA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgk -cCBpbiAkZWludHJhZy5rZW5udG5pc25haG1lbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtTWF0Y2hLZW5udW5nIChbc3RyaW5nXSRw -Lk5hbWUpKSB7ICRtYXRjaE5hbWUgPSAkcC5OYW1lOyBicmVhayB9DQogICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG1hdGNoTmFtZSkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICR0cyA9IChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1l -KCkuVG9TdHJpbmcoJ3l5eXktTU0tZGRUSEg6bW06c3NaJykNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkZWludHJhZy5rZW5udG5pc25haG1lbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0 -eU5hbWUgJG1hdGNoTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJHRzIC1Gb3JjZQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dCA9ICR0cnVl -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlaW50cmFnLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ3R5cCddKSB7ICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlwID0gW3N0cmluZ10kZWlu -dHJhZy50eXAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBp -ZiAoJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNHZXNldHp0KSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICBXcml0ZS1Kc29uT2JqZWN0ICdoaW53ZWlzZS5qc29uJyAkaCB8IE91dC1OdWxsDQogICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAg -ICAgICAgICAkZ2VzZXR6dCA9IFtib29sXSRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dA0K -ICAgICAgICAgICAgICAgICRrZW5udG5pc1R5cCA9ICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlw -DQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNHZXNldHp0ID0gJGZhbHNl -DQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNUeXAgPSAkbnVsbA0KICAg -ICAgICAgICAgICAgIGlmICgtbm90ICRnZXNldHp0KSB7DQogICAgICAgICAgICAgICAgICAgIFNl -bmQtRXJyb3IgJFJlc3BvbnNlICJIaW53ZWlzICRoaW53ZWlzSWQgbmljaHQgZ2VmdW5kZW4gb2Rl -ciBuaWNodCBmdWVyIFNpZSBiZXN0aW1tdCIgNDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAkbG9nRmVsZGVyID0gQHsgaGlud2Vpc0lkID0gJGhpbndlaXNJ -ZCB9DQogICAgICAgICAgICAgICAgaWYgKCRrZW5udG5pc1R5cCkgeyAkbG9nRmVsZGVyWyd0eXAn -XSA9ICRrZW5udG5pc1R5cCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnaGlu -d2Vpcy5rZW5udG5pcycgJGxvZ0ZlbGRlcg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVj -dCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2tlbm50bmlzX2dlc2V0enQnIH0NCiAgICAgICAgICAg -ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn -L2FwaS9oaW53ZWlzZS91ZWJlcnNpY2h0JyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAg -ICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRS -ZXNwb25zZSAnTnVyIFN1cGVyVXNlcicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg -SW52b2tlLUhpbndlaXNQcnVuaW5nDQogICAgICAgICAgICAgICAgJGggPSBSZWFkLUpzb25PYmpl -Y3QgJ2hpbndlaXNlLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkaCAtb3Ig -LW5vdCAkaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlzZSddKSB7DQogICAgICAgICAgICAg -ICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgaGlud2Vpc2UgPSBAKCkgfQ0KICAg -ICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNlID0gW29iamVjdFtdXUAo -JGguaGlud2Vpc2UpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K -DQogICAgICAgICAgICAjID09PT09IE1JVFRFSUxVTkdFTiAoU3ByaW50IEQtM2IsIDIwMjYtMDUt -MjkpID09PT09DQogICAgICAgICAgICAjIFZvbSBTVSBtYW51ZWxsIGdlcGZsZWd0ZXMgSGlud2Vp -cy1Nb2RhbC1TeXN0ZW0gKHNlcGFyYXQgdm9uDQogICAgICAgICAgICAjIC9hcGkvaGlud2Vpc2Us -IGRhcyBpc3QgbnVyIGZ1ZXIgU3lzdGVtLUVyZWlnbmlzc2UgU1UvR1YpLg0KICAgICAgICAgICAg -IyBTY2hlbWEgKyBGaWx0ZXJ1bmctTG9naWsgZ2VzcGllZ2VsdCBhdXMgZGV2L3NlcnZlci5weToN -CiAgICAgICAgICAgICMgICBfbWl0dGVpbHVuZ2VuX2Z1ZXJfYWt0dWVsbGVuX3VzZXIoKSBiencu -IF9wZXJzb25fYXVzX3BpZCgpLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0 -ZWlsdW5nZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG1pdHRlaWx1bmdlbiA9IChHZXQtTWl0dGVpbHVuZ2Vu -RnVlckFrdHVlbGxlblVzZXIpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4vYWxsZScg -LWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0 -LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXInIDQw -MzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2JqZWN0ICdtaXR0 -ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAkbGlzdGUgPSBAKCkNCiAgICAgICAgICAg -ICAgICBpZiAoJG51bGwgLW5lICRtIC1hbmQgJG0uUFNPYmplY3QuUHJvcGVydGllc1snbWl0dGVp -bHVuZ2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJGxpc3RlID0gQCgkbS5taXR0ZWlsdW5n -ZW4pDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk -UmVzcG9uc2UgQHsgbWl0dGVpbHVuZ2VuID0gW29iamVjdFtdXSRsaXN0ZSB9DQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvbWl0dGVpbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAg -ICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBNaXR0ZWlsdW5nZW4gYW5sZWdlbicgNDAzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAg -ICAgICAgICAgIGlmICgtbm90ICRyYXcpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JvZHkgZmVo -bHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRib2R5ID0gJHJhdyB8 -IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0 -aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIFNlcnZlci1zZWl0 -aWdlIFNhbml0aXNpZXJ1bmcgKFN0b3JlZC1YU1MpOiB0aXRlbCArIHRleHQgd2VyZGVuDQogICAg -ICAgICAgICAgICAgIyBpbSBDbGllbnQgdmlhIGlubmVySFRNTCBnZXJlbmRlcnQuDQogICAgICAg -ICAgICAgICAgJHRpdGVsID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAoKFtzdHJpbmddKCRib2R5 -LnRpdGVsKSkuVHJpbSgpKQ0KICAgICAgICAgICAgICAgICR0ZXh0ICA9IENvbnZlcnRUby1TYWZl -UmljaEh0bWwgKChbc3RyaW5nXSgkYm9keS50ZXh0KSkuVHJpbSgpKQ0KICAgICAgICAgICAgICAg -IGlmICgtbm90ICR0aXRlbCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVGl0ZWwgaXN0IFBmbGlj -aHRmZWxkJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdGV4dCkg -IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1RleHQgaXN0IFBmbGljaHRmZWxkJyAgNDAwOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJHJhbmQgPSAtam9pbiAoKDQ4Li41NykgKyAoOTcuLjEy -MikgfCBHZXQtUmFuZG9tIC1Db3VudCA2IHwgRm9yRWFjaC1PYmplY3QgeyBbY2hhcl0kXyB9KQ0K -ICAgICAgICAgICAgICAgICRtcyA9IFtpbnQ2NF0oW0RhdGVUaW1lT2Zmc2V0XTo6VXRjTm93LlRv -VW5peFRpbWVNaWxsaXNlY29uZHMoKSkNCiAgICAgICAgICAgICAgICAkbmV1ZUlkID0gIm1fJHtt -c31fJHtyYW5kfSINCiAgICAgICAgICAgICAgICAkZW1wZkRlZmF1bHQgPSBbcHNjdXN0b21vYmpl -Y3RdQHsNCiAgICAgICAgICAgICAgICAgICAgYWxsZSA9ICR0cnVlOyBwZXJzb25lbiA9IEAoKTsg -Z3J1cHBlbiA9IEAoKTsgcm9sbGVuID0gQCgpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICRlbXBmID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VtcGZhZW5nZXIn -XSkgeyAkYm9keS5lbXBmYWVuZ2VyIH0gZWxzZSB7ICRlbXBmRGVmYXVsdCB9DQogICAgICAgICAg -ICAgICAgJG5ldSA9IFtwc2N1c3RvbW9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAgICBpZCAg -ICAgICAgICAgPSAkbmV1ZUlkDQogICAgICAgICAgICAgICAgICAgIHRpdGVsICAgICAgICA9ICR0 -aXRlbA0KICAgICAgICAgICAgICAgICAgICB0ZXh0ICAgICAgICAgPSAkdGV4dA0KICAgICAgICAg -ICAgICAgICAgICB0aHVtYm5haWwgICAgPSBpZiAoJGJvZHkuUFNPYmplY3QuUHJvcGVydGllc1sn -dGh1bWJuYWlsJ10pIHsgJGJvZHkudGh1bWJuYWlsIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAg -ICAgICAgICAgICAgcGRmICAgICAgICAgID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNb -J3BkZiddKSAgICAgICB7ICRib2R5LnBkZiB9ICAgICAgIGVsc2UgeyAkbnVsbCB9DQogICAgICAg -ICAgICAgICAgICAgIHRyaWdnZXIgICAgICA9IGlmICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVz -Wyd0cmlnZ2VyJ10gLWFuZCAkYm9keS50cmlnZ2VyKSB7IFtzdHJpbmddJGJvZHkudHJpZ2dlciB9 -IGVsc2UgeyAnZWlubWFsJyB9DQogICAgICAgICAgICAgICAgICAgIGJpc0RhdHVtICAgICA9IGlm -ICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWydiaXNEYXR1bSddKSAgeyAkYm9keS5iaXNEYXR1 -bSB9ICBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICBlbXBmYWVuZ2VyICAgPSAk -ZW1wZg0KICAgICAgICAgICAgICAgICAgICBlcnN0ZWxsdEFtICAgPSAoR2V0LURhdGUpLlRvVW5p -dmVyc2FsVGltZSgpLlRvU3RyaW5nKCd5eXl5LU1NLWRkVEhIOm1tOnNzWicpDQogICAgICAgICAg -ICAgICAgICAgIGVyc3RlbGx0Vm9uICA9IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpDQogICAgICAg -ICAgICAgICAgICAgIGdlYWVuZGVydEFtICA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgIGdl -YWVuZGVydFZvbiA9ICRudWxsDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIElu -dm9rZS1XaXRoRmlsZUxvY2sgJ21pdHRlaWx1bmdlbi5qc29uJyB7DQogICAgICAgICAgICAgICAg -ICAgICRtID0gUmVhZC1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAg -ICAgICAgICAgaWYgKCRudWxsIC1lcSAkbSkgeyAkbSA9IFtwc2N1c3RvbW9iamVjdF1AeyBtaXR0 -ZWlsdW5nZW4gPSBAKCk7IGdlbGVzZW4gPSBbcHNjdXN0b21vYmplY3RdQHt9IH0gfQ0KICAgICAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5n -ZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG0gfCBBZGQtTWVtYmVyIC1Ob3RlUHJv -cGVydHlOYW1lIG1pdHRlaWx1bmdlbiAtTm90ZVByb3BlcnR5VmFsdWUgQCgpIC1Gb3JjZQ0KICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRtLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG0g -fCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlbGVzZW4gLU5vdGVQcm9wZXJ0eVZhbHVl -IChbcHNjdXN0b21vYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICAgICAjIG5ldWVzdGUgb2Jlbg0KICAgICAgICAgICAgICAgICAgICAkbS5t -aXR0ZWlsdW5nZW4gPSBAKCRuZXUpICsgQCgkbS5taXR0ZWlsdW5nZW4pDQogICAgICAgICAgICAg -ICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxs -DQogICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgV3JpdGUtTG9n -RWludHJhZyAnbWl0dGVpbHVuZy5hbmdlbGVndCcgQHsgaWQgPSAkbmV1ZUlkOyB0aXRlbCA9ICR0 -aXRlbCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0 -dXMgPSAnYW5nZWxlZ3QnOyBtaXR0ZWlsdW5nID0gJG5ldSB9DQogICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBp -L21pdHRlaWx1bmdlbi8oW1x3LV0rKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJl -c3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -bWlkID0gJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkcmF3ID0gUmVhZC1Cb2R5ICRSZXF1 -ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQm9keSBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJGJv -ZHkgPSAkcmF3IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRz -Y3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuID0gJGZhbHNlDQogICAgICAgICAgICAgICAgJHNjcmlw -dDptaXR0ZWlsdW5nWmllbCA9ICRudWxsDQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxl -TG9jayAnbWl0dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgJG0gPSBSZWFk -LUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAo -JG51bGwgLWVxICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdl -biddKSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlaW50cmFnIGlu -IEAoJG0ubWl0dGVpbHVuZ2VuKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJp -bmddJGVpbnRyYWcuaWQgLW5lICRtaWQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgZm9yZWFjaCAoJGZlbGQgaW4gJ3RpdGVsJywndGV4dCcsJ3RodW1ibmFpbCcsJ3BkZics -J3RyaWdnZXInLCdiaXNEYXR1bScsJ2VtcGZhZW5nZXInKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJGZlbGRdKSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICR3ZXJ0ID0gJGJvZHkuJGZlbGQNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZmVsZCAtZXEgJ3RpdGVsJyAtb3IgJGZlbGQgLWVx -ICd0ZXh0JykgLWFuZCAoJHdlcnQgLWlzIFtzdHJpbmddKSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJHdlcnQgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICR3ZXJ0DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJGVpbnRyYWcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRmZWxkIC1O -b3RlUHJvcGVydHlWYWx1ZSAkd2VydCAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAk -ZWludHJhZyB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2VhZW5kZXJ0QW0gIC1Ob3Rl -UHJvcGVydHlWYWx1ZSAoKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygneXl5 -eS1NTS1kZFRISDptbTpzc1onKSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAkZWlu -dHJhZyB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2VhZW5kZXJ0Vm9uIC1Ob3RlUHJv -cGVydHlWYWx1ZSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKSAtRm9yY2UNCiAgICAgICAgICAgICAg -ICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuID0gJHRydWUNCiAgICAgICAgICAg -ICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ1ppZWwgPSAkZWludHJhZw0KICAgICAgICAg -ICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICBpZiAoJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4pIHsgV3JpdGUtSnNvbk9iamVj -dCAnbWl0dGVpbHVuZ2VuLmpzb24nICRtIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgIH0g -fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6bWl0dGVpbHVuZ0dl -ZnVuZGVuKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICJNaXR0 -ZWlsdW5nICRtaWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgJHppZWwgPSAkc2NyaXB0Om1pdHRlaWx1bmdaaWVsDQogICAg -ICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4gPSAkZmFsc2U7ICRzY3JpcHQ6 -bWl0dGVpbHVuZ1ppZWwgPSAkbnVsbA0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcg -J21pdHRlaWx1bmcuZ2VhZW5kZXJ0JyBAeyBpZCA9ICRtaWQgfQ0KICAgICAgICAgICAgICAgIFNl -bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlYWVuZGVydCc7IG1pdHRlaWx1 -bmcgPSAkemllbCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1bmdlbi8oW1x3LV0rKSQn -IC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo -VGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2Vy -JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkbWlkID0gJE1hdGNoZXNbMV0NCiAg -ICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQgPSAkZmFsc2UNCiAgICAg -ICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdtaXR0ZWlsdW5nZW4uanNvbicgew0KICAg -ICAgICAgICAgICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24n -DQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJG0gLW9yIC1ub3QgJG0uUFNPYmpl -Y3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAg -ICAgICAgJHZvcmhlciA9IEAoJG0ubWl0dGVpbHVuZ2VuKQ0KICAgICAgICAgICAgICAgICAgICAk -bmFjaGhlciA9IEAoJHZvcmhlciB8IFdoZXJlLU9iamVjdCB7IFtzdHJpbmddJF8uaWQgLW5lICRt -aWQgfSkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCR2b3JoZXIuQ291bnQgLWVxICRuYWNoaGVy -LkNvdW50KSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICRtLm1pdHRlaWx1bmdlbiA9 -ICRuYWNoaGVyDQogICAgICAgICAgICAgICAgICAgICMgZ2VsZXNlbi1FaW50cmFlZ2UgZnVlciBk -aWVzZSBNaXR0ZWlsdW5nIGF1ZnJhZXVtZW4NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRtLlBT -T2JqZWN0LlByb3BlcnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -Zm9yZWFjaCAoJHAgaW4gQCgkbS5nZWxlc2VuLlBTT2JqZWN0LlByb3BlcnRpZXMpKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlZhbHVlLlBTT2JqZWN0LlByb3BlcnRpZXNb -JG1pZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHAuVmFsdWUuUFNPYmpl -Y3QuUHJvcGVydGllcy5SZW1vdmUoJG1pZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nICRtIHwg -T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2Vsb2VzY2h0 -ID0gJHRydWUNCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkc2NyaXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQpIHsNCiAgICAgICAgICAgICAgICAg -ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgIk1pdHRlaWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIg -NDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0 -Om1pdHRlaWx1bmdHZWxvZXNjaHQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dF -aW50cmFnICdtaXR0ZWlsdW5nLmdlbG9lc2NodCcgQHsgaWQgPSAkbWlkIH0NCiAgICAgICAgICAg -ICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnIH0N -CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBQ -T1NUIC9hcGkvbWl0dGVpbHVuZ2VuL3VwbG9hZCDigJQgU1Utb25seSwgQmlsZCAoMiBNQikgb2Rl -ciBQREYgKDEwIE1CKQ0KICAgICAgICAgICAgIyBCb2R5OiB7ImFydCI6ICJiaWxkInwicGRmIiwg -ImRhdGVpbmFtZSI6ICJ4LnBuZyIsICJkYXRhVXJsIjogImRhdGE6Li4uIn0NCiAgICAgICAgICAg -IGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuL3VwbG9hZCcgLWFuZCAkTWV0aG9kIC1l -cSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIp -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gTWl0dGVpbHVu -Z3MtQW5oYWVuZ2UgaG9jaGxhZGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAj -IDE0IE1CIE1heFNpemUsIHdlaWwgMTBNQiBQREYgYmFzZTY0LWNvZGllcnQgfjEzLjQgTUIgUGF5 -bG9hZCB3aXJkDQogICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdCAtTWF4 -U2l6ZSAxNE1CDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykgeyBTZW5kLUVycm9yICRS -ZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcyAobWF4IDE0IE1CKScgNDEzOyBjb250aW51ZSB9DQog -ICAgICAgICAgICAgICAgdHJ5IHsgJGJvZHkgPSAkcmF3IHwgQ29udmVydEZyb20tSnNvbiB9IGNh -dGNoIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICRhcnQgPSAoW3N0cmluZ10kYm9keS5hcnQpLlRvTG93ZXIo -KQ0KICAgICAgICAgICAgICAgICRkYXRhVXJsID0gW3N0cmluZ10kYm9keS5kYXRhVXJsDQogICAg -ICAgICAgICAgICAgaWYgKCRhcnQgLW5lICdiaWxkJyAtYW5kICRhcnQgLW5lICdwZGYnKSB7DQog -ICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdhcnQgbXVzcyAiYmlsZCIg -b2RlciAicGRmIiBzZWluJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICRleHQgPSAkbnVsbDsgJG1heEJ5dGVzID0gMA0KICAgICAgICAgICAgICAgIGlm -ICgkYXJ0IC1lcSAnYmlsZCcpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRhVXJsIC1t -YXRjaCAnXmRhdGE6aW1hZ2UvKGpwZWd8anBnfHBuZ3x3ZWJwKTtiYXNlNjQsJykgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgJGV4dCA9ICgkTWF0Y2hlc1sxXSAtcmVwbGFjZSAnanBlZycsJ2pw -ZycpDQogICAgICAgICAgICAgICAgICAgICAgICAkbWF4Qnl0ZXMgPSAyICogMTAyNCAqIDEwMjQN -CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNl -bmQtRXJyb3IgJFJlc3BvbnNlICdCaWxkOiBlcndhcnRldCBkYXRhOmltYWdlLyhqcGVnfHBuZ3x3 -ZWJwKTtiYXNlNjQsLi4uJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGFVcmwg -LWxpa2UgJ2RhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwqJykgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgJGV4dCA9ICdwZGYnDQogICAgICAgICAgICAgICAgICAgICAgICAkbWF4Qnl0ZXMg -PSAxMCAqIDEwMjQgKiAxMDI0DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnUERGOiBlcndhcnRldCBkYXRh -OmFwcGxpY2F0aW9uL3BkZjtiYXNlNjQsLi4uJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGJhc2U2NCA9ICRk -YXRhVXJsIC1yZXBsYWNlICdeZGF0YTpbXjtdKztiYXNlNjQsJywgJycNCiAgICAgICAgICAgICAg -ICB0cnkgeyAkYnl0ZXMgPSBbU3lzdGVtLkNvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCRiYXNl -NjQpIH0NCiAgICAgICAgICAgICAgICBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1 -ZWx0aWdlIGJhc2U2NC1EYXRlbicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYg -KCRieXRlcy5MZW5ndGggLWd0ICRtYXhCeXRlcykgew0KICAgICAgICAgICAgICAgICAgICAkbGlt -aXRLYiA9IFtpbnRdKCRtYXhCeXRlcyAvIDEwMjQpDQogICAgICAgICAgICAgICAgICAgIFNlbmQt -RXJyb3IgJFJlc3BvbnNlICIkYXJ0IHp1IGdyb3NzIChtYXggJGxpbWl0S2IgS0IpIiA0MTM7IGNv -bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR1cGxvYWREaXIgPSBK -b2luLVBhdGggJERhdGFEaXIgJ3VwbG9hZHMnIHwgSm9pbi1QYXRoIC1DaGlsZFBhdGggJ21pdHRl -aWx1bmdlbicNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0 -aCAkdXBsb2FkRGlyKSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgeyBOZXctSXRlbSAtSXRl -bVR5cGUgRGlyZWN0b3J5IC1QYXRoICR1cGxvYWREaXIgLUZvcmNlIHwgT3V0LU51bGwgfSBjYXRj -aCB7fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcmFuZCA9IC1qb2luICgo -NDguLjU3KSArICg5Ny4uMTIyKSB8IEdldC1SYW5kb20gLUNvdW50IDYgfCBGb3JFYWNoLU9iamVj -dCB7IFtjaGFyXSRfIH0pDQogICAgICAgICAgICAgICAgJG1zID0gW2ludDY0XShbRGF0ZVRpbWVP -ZmZzZXRdOjpVdGNOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKQ0KICAgICAgICAgICAgICAg -ICRmaWxlbmFtZSA9ICJtXyR7bXN9XyR7cmFuZH0uJGV4dCINCiAgICAgICAgICAgICAgICAkemll -bFBmYWQgPSBKb2luLVBhdGggJHVwbG9hZERpciAkZmlsZW5hbWUNCiAgICAgICAgICAgICAgICBb -U3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbEJ5dGVzKCR6aWVsUGZhZCwgJGJ5dGVzKQ0KICAgICAg -ICAgICAgICAgICMgS2VpbmUgQUNMLVJlc3RyaWN0aW9uOiBVcGxvYWRzIHNpbmQgZnVlciBkaWUg -RW1wZmFlbmdlci0NCiAgICAgICAgICAgICAgICAjIEdydXBwZSAobWFudWVsbCB2b20gU1UgdmVy -dGVpbHQpIGdlZGFjaHQsIG5pY2h0IGdlaGVpbS4NCiAgICAgICAgICAgICAgICAkcmVsUGZhZCA9 -ICIvZGF0YS91cGxvYWRzL21pdHRlaWx1bmdlbi8kZmlsZW5hbWUiDQogICAgICAgICAgICAgICAg -V3JpdGUtTG9nRWludHJhZyAnbWl0dGVpbHVuZy51cGxvYWQnIEB7IGFydCA9ICRhcnQ7IGRhdGVp -ID0gJGZpbGVuYW1lOyBieXRlcyA9ICRieXRlcy5MZW5ndGggfQ0KICAgICAgICAgICAgICAgIFNl -bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29rJzsgcGZhZCA9ICRyZWxQZmFk -OyBieXRlcyA9ICRieXRlcy5MZW5ndGggfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg -ICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1 -bmdlbi8oW1x3LV0rKS9rZW5udG5pcyQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAg -ICAgICAgICAgICAgJG1pZCA9ICRNYXRjaGVzWzFdDQogICAgICAgICAgICAgICAgJHIgPSBHZXQt -UmVjaHRlDQogICAgICAgICAgICAgICAgJHBpZCA9ICRyLm1laW5lUGVyc29uSWQNCiAgICAgICAg -ICAgICAgICBpZiAoJG51bGwgLWVxICRwaWQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5l -IFBlcnNvbiB6dWdlb3JkbmV0JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkc2Ny -aXB0Om1pdHRlaWx1bmdLZW5udG5pc09LID0gJGZhbHNlDQogICAgICAgICAgICAgICAgSW52b2tl -LVdpdGhGaWxlTG9jayAnbWl0dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAg -JG0gPSBSZWFkLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAgICAgICAg -ICAgICBpZiAoJG51bGwgLWVxICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21p -dHRlaWx1bmdlbiddKSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICRleGlzdGllcnQg -PSBAKCRtLm1pdHRlaWx1bmdlbiB8IFdoZXJlLU9iamVjdCB7IFtzdHJpbmddJF8uaWQgLWVxICRt -aWQgfSkuQ291bnQgLWd0IDANCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGV4aXN0aWVy -dCkgeyByZXR1cm4gfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Q -cm9wZXJ0aWVzWydnZWxlc2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtIHwgQWRk -LU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSBnZWxlc2VuIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW3Bz -Y3VzdG9tb2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgJHBpZFN0ciA9IFtzdHJpbmddJHBpZA0KICAgICAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkbS5nZWxlc2VuLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBpZFN0cl0pIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICRtLmdlbGVzZW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlO -YW1lICRwaWRTdHIgLU5vdGVQcm9wZXJ0eVZhbHVlIChbcHNjdXN0b21vYmplY3RdQHt9KSAtRm9y -Y2UNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkaGV1dGUgPSAo -R2V0LURhdGUpLlRvU3RyaW5nKCd5eXl5LU1NLWRkJykNCiAgICAgICAgICAgICAgICAgICAgJG0u -Z2VsZXNlbi4kcGlkU3RyIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkbWlkIC1Ob3Rl -UHJvcGVydHlWYWx1ZSAkaGV1dGUgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpz -b25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsDQogICAgICAgICAgICAg -ICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0tlbm50bmlzT0sgPSAkdHJ1ZQ0KICAgICAgICAgICAg -ICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6bWl0dGVp -bHVuZ0tlbm50bmlzT0spIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9u -c2UgIk1pdHRlaWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250aW51ZQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdLZW5udG5pc09L -ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBz -dGF0dXMgPSAna2VubnRuaXNfZ2VzZXR6dCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog -ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gQkFDS1VQUyA9PT09PQ0KICAgICAg -ICAgICAgIyBCYWNrdXAtTmFtaW5nIChnZXRhcm50LCBpbiBkYXRhL2NhY2hlLyk6DQogICAgICAg -ICAgICAjIC0gc25hcF88dHM+LmJhayAgPSBCdW5kbGUgKHBsYW51bmcrYWRtaW4pIC0tIG1hbnVl -bGxlIEJhY2t1cHMgKyBTaWNoZXJ1bmdlbg0KICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAg -ICAgdm9yIFdpZWRlcmhlcnN0ZWxsdW5nDQogICAgICAgICAgICAjIC0gbGVnXzx0cz4uYmFrICAg -PSBOdXIgUGxhbnVuZyAtLSBMZWdhY3ktQmFja3VwcyArIEF1dG8tU2ljaGVydW5nZW4NCiAgICAg -ICAgICAgICMgICAgICAgICAgICAgICAgICAgIHZvciBSZXNldC9EdW1teWRhdGVuDQogICAgICAg -ICAgICAjIC0gY2ZnXzx0cz5fPGhpbndlaXM+LmJhayA9IGFkbWluLmpzb24tQXV0by1CYWNrdXBz -IChCYWNrdXAtQWRtaW5Kc29uKQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFu -dW5nL2JhY2t1cCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnYmFja3VwcycpKSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJhY2t1cHMpJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAg -ICAgICAgICAgICAkcGxhbnVuZ1BhdGggPSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNv -bicNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcGxh -bnVuZ1BhdGgpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdQbGFudW5nIG5pY2h0IGdlZnVuZGVu -JyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZ09iaiA9IFJlYWQtSnNv -bk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRhZG1pbk9iaiAgID0gUmVh -ZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg -JGFkbWluT2JqKSB7ICRhZG1pbk9iaiA9IE5ldy1PYmplY3QgUFNPYmplY3QgfQ0KICAgICAgICAg -ICAgICAgICR0cyA9IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAg -ICAgICAgICAkYm5hbWUgPSAic25hcF8kdHMuYmFrIg0KICAgICAgICAgICAgICAgICRidW5kbGUg -PSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBmb3JtYXQgID0gJ3ZpMy1iYWNrdXAt -djEnDQogICAgICAgICAgICAgICAgICAgIHRzICAgICAgPSAkdHMNCiAgICAgICAgICAgICAgICAg -ICAgcGxhbnVuZyA9ICRwbGFudW5nT2JqDQogICAgICAgICAgICAgICAgICAgIGFkbWluICAgPSAk -YWRtaW5PYmoNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGpzb24gPSAkYnVu -ZGxlIHwgQ29udmVydFRvLUpzb24gLURlcHRoIDMwDQogICAgICAgICAgICAgICAgJGNhY2hlRGly -ID0gSm9pbi1QYXRoICREYXRhRGlyICdjYWNoZScNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo -VGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIpKSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBE -aXJlY3RvcnkgLVBhdGggJGNhY2hlRGlyIC1Gb3JjZSB8IE91dC1OdWxsIH0NCiAgICAgICAgICAg -ICAgICBXcml0ZS1CYWNrdXBCeXRlcyAoSm9pbi1QYXRoICRjYWNoZURpciAkYm5hbWUpICRqc29u -DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLmVyc3RlbGx0JyBAeyBk -YXRlaW5hbWUgPSAkYm5hbWU7IGluaGFsdCA9ICdwbGFudW5nK2FkbWluJyB9DQogICAgICAgICAg -ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZXJzdGVsbHQnOyBk -YXRlaW5hbWUgPSAkYm5hbWUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg -ICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwcycgLWFu -ZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURh -cmZCZXJlaWNoICdiYWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVj -aHRpZ3VuZyAoQmFja3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRlaW50 -cmFlZ2UgPSBAKCkNCiAgICAgICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGggJERhdGFE -aXIgJ2NhY2hlJw0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRj -YWNoZURpcikgew0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbXVzdGVyIGluICdzbmFw -XyouYmFrJywnbGVnXyouYmFrJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgR2V0LUNoaWxk -SXRlbSAtTGl0ZXJhbFBhdGggJGNhY2hlRGlyIC1GaWx0ZXIgJG11c3RlciAtRmlsZSAtRXJyb3JB -Y3Rpb24gU2lsZW50bHlDb250aW51ZSB8IEZvckVhY2gtT2JqZWN0IHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkbmFtZSA9ICRfLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkdHlwID0gaWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl9kdW1teV8nKSB7ICd2b3IgRHVtbXlkYXRl -bicgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkbmFtZSAtbWF0 -Y2ggJ192b3JfcmVzZXRfJykgeyAndm9yIFJlc2V0JyB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBlbHNlaWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl93aWVkZXJoZXJzdGVsbHVuZ18n -KSB7ICd2b3IgV2llZGVyaGVyc3RlbGx1bmcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGVsc2UgeyAnbWFudWVsbCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRi -dW5kbGUgPSAkbmFtZS5TdGFydHNXaXRoKCdzbmFwXycpDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJGVpbnRyYWVnZSArPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBkYXRlaW5hbWUgICA9ICRuYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGdyb2Vzc2UgICAgID0gJF8uTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGVyc3RlbGx0QW0gID0gJF8uTGFzdFdyaXRlVGltZS5Ub1N0cmluZygncycpDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cCAgICAgICAgID0gJHR5cA0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBpbmhhbHQgICAgICA9IGlmICgkYnVuZGxlKSB7ICdLb21wbGV0 -dCAoUGxhbnVuZyArIEFkbWluKScgfSBlbHNlIHsgJ051ciBQbGFudW5nJyB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGlzdEJ1bmRsZSAgID0gJGJ1bmRsZQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZWludHJhZWdl -ID0gQCgkZWludHJhZWdlIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IGVyc3RlbGx0QW0gLURlc2Nl -bmRpbmcpDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkZWludHJh -ZWdlDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAg -IGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL3BsYW51bmcvYmFja3VwL2Rvd25sb2FkLyguKykkJyAt -YW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3Qt -RGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVy -ZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJG5h -bWUgPSAkTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkbmFtZSAtbWF0Y2gg -J14oc25hcF98bGVnXylbMC05X2EtekEtWl0rXC5iYWskJykpIHsgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAg -ICAgJGZwID0gSm9pbi1QYXRoICREYXRhRGlyICgnY2FjaGUvJyArICRuYW1lKQ0KICAgICAgICAg -ICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRmcCkpIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgJGtsYXJ0ZXh0ID0gUmVhZC1CYWNrdXBUZXh0ICRmcA0KICAgICAgICAgICAg -ICAgIGlmICgkbnVsbCAtZXEgJGtsYXJ0ZXh0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNr -dXAtRGF0ZWkga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuJyA1MDA7IGNvbnRpbnVlIH0NCiAg -ICAgICAgICAgICAgICAkYnl0ZXMgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4LkdldEJ5 -dGVzKCRrbGFydGV4dCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9IDIw -MA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9q -c29uOyBjaGFyc2V0PXV0Zi04Jw0KICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMg -JFJlc3BvbnNlDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLkhlYWRlcnMuQWRkKCdDb250ZW50 -LURpc3Bvc2l0aW9uJywgImF0dGFjaG1lbnQ7IGZpbGVuYW1lPWAiJG5hbWVgIiIpDQogICAgICAg -ICAgICAgICAgJFJlc3BvbnNlLkNvbnRlbnRMZW5ndGg2NCA9ICRieXRlcy5MZW5ndGgNCiAgICAg -ICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLldyaXRlKCRieXRlcywgMCwgJGJ5dGVz -Lkxlbmd0aCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLkNsb3NlKCkN -CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYg -KCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cC93aWVkZXJoZXJzdGVsbGVuJyAtYW5kICRN -ZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZC -ZXJlaWNoICdiYWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRp -Z3VuZyAoQmFja3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0g -UmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252 -ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJG5hbWUgPSAiJCgkZGF0ZW4uZGF0ZWluYW1l -KSINCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJG5hbWUgLW1hdGNoICdeKHNuYXBffGxlZ18p -WzAtOV9hLXpBLVpdK1wuYmFrJCcpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdl -ciBEYXRlaW5hbWUnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRjYWNoZURpciA9 -IEpvaW4tUGF0aCAkRGF0YURpciAnY2FjaGUnDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl -c3QtUGF0aCAtTGl0ZXJhbFBhdGggJGNhY2hlRGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGly -ZWN0b3J5IC1QYXRoICRjYWNoZURpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAg -ICAgJHF1ZWxsID0gSm9pbi1QYXRoICRjYWNoZURpciAkbmFtZQ0KICAgICAgICAgICAgICAgIGlm -ICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRxdWVsbCkpIHsgU2VuZC1FcnJvciAkUmVz -cG9uc2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJHRzID0gR2V0LURhdGUgLUZvcm1hdCAneXl5eU1NZGRfSEhtbXNzJw0KICAgICAgICAg -ICAgICAgICRzaWNoZXIgPSAic25hcF92b3Jfd2llZGVyaGVyc3RlbGx1bmdfJHRzLmJhayINCiAg -ICAgICAgICAgICAgICAjIFNpY2hlcmhlaXRzLUJ1bmRsZSBkZXIgYWt0dWVsbGVuIERhdGVuIHZv -ciBVZWJlcnNjaHJlaWJlbi4NCiAgICAgICAgICAgICAgICAkc2ljaGVyQnVuZGxlID0gW29yZGVy -ZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ICA9ICd2aTMtYmFja3VwLXYxJw0KICAg -ICAgICAgICAgICAgICAgICB0cyAgICAgID0gJHRzDQogICAgICAgICAgICAgICAgICAgIHBsYW51 -bmcgPSAoUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nKQ0KICAgICAgICAgICAgICAgICAg -ICBhZG1pbiAgID0gKFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicpDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUJhY2t1cEJ5dGVzIChKb2luLVBhdGggJGNhY2hl -RGlyICRzaWNoZXIpICgkc2ljaGVyQnVuZGxlIHwgQ29udmVydFRvLUpzb24gLURlcHRoIDMwKQ0K -DQogICAgICAgICAgICAgICAgJHF1ZWxsSW5oYWx0ID0gUmVhZC1CYWNrdXBUZXh0ICRxdWVsbA0K -ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHF1ZWxsSW5oYWx0KSB7IFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdCYWNrdXAtRGF0ZWkga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuJyA1MDA7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkcXVlbGxEYXRlbiA9ICRxdWVsbElu -aGFsdCB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdC -YWNrdXAtRGF0ZWkgbmljaHQgcGFyc2llcmJhcicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ID0gQCgpDQogICAgICAgICAgICAgICAgaWYgKCRxdWVs -bERhdGVuIC1hbmQgJHF1ZWxsRGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZm9ybWF0J10gLWFu -ZCAiJCgkcXVlbGxEYXRlbi5mb3JtYXQpIi5TdGFydHNXaXRoKCd2aTMtYmFja3VwJykpIHsNCiAg -ICAgICAgICAgICAgICAgICAgaWYgKCRxdWVsbERhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bs -YW51bmcnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxh -bnVuZy5qc29uJyAkcXVlbGxEYXRlbi5wbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAg -ICAgICAgICAgICR3aWVkZXJoZXJnZXN0ZWxsdCArPSAncGxhbnVuZycNCiAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHF1ZWxsRGF0ZW4uUFNPYmplY3QuUHJv -cGVydGllc1snYWRtaW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9i -amVjdCAnYWRtaW4uanNvbicgJHF1ZWxsRGF0ZW4uYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAg -ICAgICAgICAgICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9ICdhZG1pbicNCiAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg -ICMgTGVnYWN5LUZvcm1hdCAobnVyIHBsYW51bmcuanNvbi1JbmhhbHQpLg0KICAgICAgICAgICAg -ICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRxdWVsbERhdGVuIHwgT3V0 -LU51bGwNCiAgICAgICAgICAgICAgICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9ICdwbGFudW5n -Jw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdi -YWNrdXAud2llZGVyaGVyZ2VzdGVsbHQnIEB7IHF1ZWxsZSA9ICRuYW1lOyBzaWNoZXJ1bmcgPSAk -c2ljaGVyOyBpbmhhbHQgPSAoJHdpZWRlcmhlcmdlc3RlbGx0IC1qb2luICcrJykgfQ0KICAgICAg -ICAgICAgICAgIE5ldy1IaW53ZWlzICdiYWNrdXBfd2llZGVyaGVyZ2VzdGVsbHQnIChbb3JkZXJl -ZF1Aew0KICAgICAgICAgICAgICAgICAgICBiYWNrdXAgICAgPSAkbmFtZQ0KICAgICAgICAgICAg -ICAgICAgICBzaWNoZXJ1bmcgPSAkc2ljaGVyDQogICAgICAgICAgICAgICAgICAgIGluaGFsdCAg -ICA9ICgkd2llZGVyaGVyZ2VzdGVsbHQgLWpvaW4gJysnKQ0KICAgICAgICAgICAgICAgIH0pIChH -ZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBTZW5kLUpz -b25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICd3aWVkZXJoZXJnZXN0ZWxsdCc7IHNpY2hl -cnVuZyA9ICRzaWNoZXI7IGluaGFsdCA9ICR3aWVkZXJoZXJnZXN0ZWxsdCB9DQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvcGxhbnVuZy9iYWNrdXAvbG9lc2NoZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkg -eyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAz -OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QN -CiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAg -ICAgICAgICAgICAkbmFtZSA9ICIkKCRkYXRlbi5kYXRlaW5hbWUpIg0KICAgICAgICAgICAgICAg -IGlmICgtbm90ICgkbmFtZSAtbWF0Y2ggJ14oc25hcF98bGVnXylbMC05X2EtekEtWl0rXC5iYWsk -JykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgJGZwID0gSm9pbi1QYXRoICREYXRhRGlyICgnY2Fj -aGUvJyArICRuYW1lKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVy -YWxQYXRoICRmcCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRl -bicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQ -YXRoICRmcCAtRm9yY2UNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNrdXAu -Z2Vsb2VzY2h0JyBAeyBkYXRlaW5hbWUgPSAkbmFtZSB9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0JyB9DQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBSRVNF -VCAvIERVTU1ZREFURU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxh -bnVuZy9yZXNldCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIg -U3VwZXJVc2VyIGR1ZXJmZW4gZGllIFBsYW51bmcgenVydWVja3NldHplbicgNDAzOyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgJHBsYW51bmdQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICdw -bGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgJGJhY2t1cE5hbWUgPSAkbnVsbA0KICAgICAg -ICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRwbGFudW5nUGF0aCkgew0KICAg -ICAgICAgICAgICAgICAgICAkdHMgPSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5TU1kZF9ISG1tc3Mn -DQogICAgICAgICAgICAgICAgICAgICRjYWNoZURpciA9IEpvaW4tUGF0aCAkRGF0YURpciAnY2Fj -aGUnDQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRo -ICRjYWNoZURpcikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkY2FjaGVE -aXIgLUZvcmNlIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAjIFJlc3RhdXJpZXJi -YXJlciBOYW1lIChwbGFudW5nX2JhY2t1cF92b3JfcmVzZXRfKi5qc29uKSBzdGF0dA0KICAgICAg -ICAgICAgICAgICAgICAjIC5iYWsgLT4gd2lyZCB2b20gQmFja3Vwcy1UYWIgZ2VsaXN0ZXQgdW5k -IGthbm4gd2llZGVyaGVyZ2VzdGVsbHQNCiAgICAgICAgICAgICAgICAgICAgIyB3ZXJkZW4uIEZy -dWVoZXIgenVkZW0gbmljaHQgYW4gZGVuIENsaWVudCB6dXJ1ZWNrZ2VnZWJlbg0KICAgICAgICAg -ICAgICAgICAgICAjIC0+ICJCYWNrdXA6IHVuZGVmaW5lZCIgaW4gZGVyIFVJLg0KICAgICAgICAg -ICAgICAgICAgICAkYmFja3VwTmFtZSA9ICJwbGFudW5nX2JhY2t1cF92b3JfcmVzZXRfJHRzLmpz -b24iDQogICAgICAgICAgICAgICAgICAgIENvcHktSXRlbSAtTGl0ZXJhbFBhdGggJHBsYW51bmdQ -YXRoIC1EZXN0aW5hdGlvbiAoSm9pbi1QYXRoICRjYWNoZURpciAkYmFja3VwTmFtZSkNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3Qg -J3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRwbGFudW5nKSB7 -DQogICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydl -aW50cmFlZ2UnXSkgeyAkcGxhbnVuZy5laW50cmFlZ2UgPSBOZXctT2JqZWN0IFBTT2JqZWN0IH0N -CiAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tv -bW1lbnRhcmUnXSkgeyAkcGxhbnVuZy5rb21tZW50YXJlID0gTmV3LU9iamVjdCBQU09iamVjdCB9 -DQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBs -YW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0 -ZS1Mb2dFaW50cmFnICdwbGFudW5nLnJlc2V0JyBAe30NCiAgICAgICAgICAgICAgICBOZXctSGlu -d2VpcyAncGxhbnVuZ19yZXNldCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGhp -bndlaXMgPSAnRWludHJhZWdlIHVuZCBLb21tZW50YXJlIHd1cmRlbiBnZWxvZXNjaHQ7IFNpY2hl -cnVuZyBsaWVndCBpbiBkYXRhL2NhY2hlLy4nDQogICAgICAgICAgICAgICAgfSkgKEdldC1Ba3R1 -ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVj -dCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ3p1cnVlY2tnZXNldHp0JzsgYmFja3VwID0gJGJhY2t1 -cE5hbWUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAg -ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvZHVtbXlkYXRlbicgLWFuZCAkTWV0aG9k -IC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVz -ZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gRHVtbXlk -YXRlbiBlaW5zcGllbGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUVy -cm9yICRSZXNwb25zZSAnRHVtbXlkYXRlbiBudXIgaW0gRGVidWctU2VydmVyIChkZXYvc2VydmVy -LnB5KSBpbXBsZW1lbnRpZXJ0LicgNTAxDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg -ICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvYWRtaW4vcHJvdG9rb2xsLWxvZXNj -aGVuDQogICAgICAgICAgICAjIEVpbm1hbC1SZXNldCBmdWVyIExvZ2J1Y2ggKyBBUEktTG9nLiBT -ZXR6dCBsb2didWNoLmpzb24gYXVmIFtdLA0KICAgICAgICAgICAgIyBsb2VzY2h0IGRpZSBBUEkt -TG9nLURhdGVpIGF1cyAlVEVNUCUsIHVuZCBzY2hyZWlidCBlaW5lbiBlaW56aWdlbg0KICAgICAg -ICAgICAgIyBuZXVlbiBMb2didWNoLUVpbnRyYWcgKHByb3Rva29sbC5nZWxvZXNjaHQpLCBkYW1p -dCBkYXMgRXJlaWduaXMNCiAgICAgICAgICAgICMgc2VsYnN0IG5hY2h2b2xsemllaGJhciBibGVp -YnQuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3Byb3Rva29sbC1sb2Vz -Y2hlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJV -c2VyIGR1ZXJmZW4gZGFzIFByb3Rva29sbCBsb2VzY2hlbicgNDAzOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgJHZvcmhlciA9IFJlYWQtSnNvbk9iamVjdCAnbG9nYnVjaC5qc29uJw0KICAg -ICAgICAgICAgICAgICRhbnphaGxWb3JoZXIgPSAwDQogICAgICAgICAgICAgICAgaWYgKCRudWxs -IC1uZSAkdm9yaGVyKSB7DQogICAgICAgICAgICAgICAgICAgICRhbnphaGxWb3JoZXIgPSBAKCR2 -b3JoZXIpLkNvdW50DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpz -b25PYmplY3QgJ2xvZ2J1Y2guanNvbicgQCgpIHwgT3V0LU51bGwNCg0KICAgICAgICAgICAgICAg -ICRhcGlMb2dCeXRlcyA9IDANCiAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFs -UGF0aCAkc2NyaXB0OkFwaUxvZykgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgJGFwaUxvZ0J5dGVzID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAk -c2NyaXB0OkFwaUxvZykuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUtSXRl -bSAtTGl0ZXJhbFBhdGggJHNjcmlwdDpBcGlMb2cgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wDQog -ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBE -YXRlaSBldnRsLiBub2NoIG9mZmVuOyBpZ25vcmllcmVuLCBMb2didWNoIGlzdCBkaWUgd2ljaHRp -Z2VyZSBTcHVyDQogICAgICAgICAgICAgICAgICAgICAgICAkYXBpTG9nQnl0ZXMgPSAtMQ0KICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAg -V3JpdGUtTG9nRWludHJhZyAncHJvdG9rb2xsLmdlbG9lc2NodCcgQHsNCiAgICAgICAgICAgICAg -ICAgICAgbG9nYnVjaEVpbnRyYWVnZVZvcmhlciA9ICRhbnphaGxWb3JoZXINCiAgICAgICAgICAg -ICAgICAgICAgYXBpTG9nQnl0ZXMgICAgICAgICAgICA9ICRhcGlMb2dCeXRlcw0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQog -ICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgPSAnZ2Vsb2VzY2h0Jw0K -ICAgICAgICAgICAgICAgICAgICBsb2didWNoRWludHJhZWdlVm9yaGVyID0gJGFuemFobFZvcmhl -cg0KICAgICAgICAgICAgICAgICAgICBhcGlMb2dCeXRlcyAgICAgICAgICAgID0gJGFwaUxvZ0J5 -dGVzDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gU1RBVElTVElLIC8gTE9HQlVDSCA9PT09PQ0K -ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zdGF0aXN0aWsnIC1hbmQgJE1ldGhvZCAt -ZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAn -c3RhdGlzdGlrJykpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -J0tlaW5lIEJlcmVjaHRpZ3VuZyAoU3RhdGlzdGlrKScgNDAzOyBjb250aW51ZQ0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxh -bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRhZG1pbiAgID0gUmVhZC1Kc29uT2JqZWN0ICdh -ZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgKEdl -dC1TdGF0aXN0aWtEYXRhICRwbGFudW5nICRhZG1pbikNCiAgICAgICAgICAgICAgICBjb250aW51 -ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2didWNo -JyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl -c3QtRGFyZkJlcmVpY2ggJ2xvZ2J1Y2gnKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVy -cm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChMb2didWNoKScgNDAzOyBjb250aW51 -ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25UZXh0ICRSZXNw -b25zZSAoR2V0LUxvZ2J1Y2hUZXh0KQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFpFTEwtTE9DSyAr -IENIQU5HRVMgKExpdmUtU3luYykgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAj -IFBPU1QgL2FwaS9sb2NrL3plbGxlICB7IGRhdHVtLCBwZXJzb25JZCB9IC0+IHsgb2ssIHRva2Vu -LCAuLi4gfSBvZGVyIDQyMyB7IHNwZXJyZXIsIC4uLiB9DQogICAgICAgICAgICBpZiAoJFBhdGgg -LWVxICcvYXBpL2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAg -ICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAo -LW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEz -OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpz -b24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSBbc3RyaW5nXSRhLmRhdHVtDQogICAgICAgICAg -ICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAgICAgIGlm -ICgtbm90IChUZXN0LUxvY2tTYWZlRGF0dW0gJGRhdHVtKSAtb3IgLW5vdCAoVGVzdC1Mb2NrU2Fm -ZUlkICRwZXJzb25JZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ1VuZ3VlbHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsgY29udGludWUNCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgJHVzZXIgPSBHZXQtQWt0dWVsbGVyQmVudXR6ZXINCiAg -ICAgICAgICAgICAgICAkcm9sbGUgPSAoR2V0LVJlY2h0ZSkucm9sbGUNCiAgICAgICAgICAgICAg -ICAkcmVzID0gQWNxdWlyZS1DZWxsTG9jayAkZGF0dW0gJHBlcnNvbklkICR1c2VyICRyb2xsZSAk -ZmFsc2UNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcmVzLm9rKSB7DQogICAgICAgICAgICAg -ICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgIGZlaGxlciAgICA9ICdnZXNwZXJydCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1 -bmcgICA9ICJXaXJkIGJlYXJiZWl0ZXQgdm9uICQoJHJlcy5leGlzdGluZy51c2VybmFtZSkiDQog -ICAgICAgICAgICAgICAgICAgICAgICBzcGVycmVyICAgPSAkcmVzLmV4aXN0aW5nLnVzZXJuYW1l -DQogICAgICAgICAgICAgICAgICAgICAgICByb2xsZSAgICAgPSAkcmVzLmV4aXN0aW5nLnJvbGxl -DQogICAgICAgICAgICAgICAgICAgICAgICBzZWl0ICAgICAgPSAkcmVzLmV4aXN0aW5nLmxvY2tl -ZEF0DQogICAgICAgICAgICAgICAgICAgICAgICBrYW5uRm9yY2UgPSAoVGVzdC1EYXJmTG9ja1Vl -YmVyc2NocmVpYmVuKQ0KICAgICAgICAgICAgICAgICAgICB9IDQyMw0KICAgICAgICAgICAgICAg -ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpz -b25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIG9rICAgICAgID0gJHRy -dWUNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gICAgPSAkcmVzLmxvY2sudG9rZW4NCiAgICAg -ICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVy -c29uSWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgPSAkcm9sbGUN -CiAgICAgICAgICAgICAgICAgICAgbG9ja2VkQXQgPSAkcmVzLmxvY2subG9ja2VkQXQNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K -ICAgICAgICAgICAgIyBQT1NUIC9hcGkvbG9jay96ZWxsZS9mb3JjZSAgeyBkYXR1bSwgcGVyc29u -SWQgfSAtPiB1ZWJlcnNjaHJlaWJ0IGZyZW1kZW4gTG9jaw0KICAgICAgICAgICAgaWYgKCRQYXRo -IC1lcSAnL2FwaS9sb2NrL3plbGxlL2ZvcmNlJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0K -ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZMb2NrVWViZXJzY2hyZWliZW4pKSB7 -DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdGb3JjZS1Mb2NrIG51 -ciBmdWVyIEZhY2hhdWZzaWNodC9TdXBlclVzZXInIDQwMzsgY29udGludWUNCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn -ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8 -IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSBbc3RyaW5nXSRhLmRh -dHVtDQogICAgICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAg -ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUxvY2tTYWZlRGF0dW0gJGRhdHVtKSAtb3IgLW5v -dCAoVGVzdC1Mb2NrU2FmZUlkICRwZXJzb25JZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsgY29udGlu -dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHVzZXIgPSBHZXQtQWt0dWVs -bGVyQmVudXR6ZXINCiAgICAgICAgICAgICAgICAkcm9sbGUgPSAoR2V0LVJlY2h0ZSkucm9sbGUN -CiAgICAgICAgICAgICAgICAkcmVzID0gQWNxdWlyZS1DZWxsTG9jayAkZGF0dW0gJHBlcnNvbklk -ICR1c2VyICRyb2xsZSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2xv -Y2suZm9yY2UnIEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgcm9sbGUg -PSAkcm9sbGUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsN -CiAgICAgICAgICAgICAgICAgICAgb2sgICAgICAgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAg -ICB0b2tlbiAgICA9ICRyZXMubG9jay50b2tlbg0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAg -ICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25JZA0KICAg -ICAgICAgICAgICAgICAgICByb2xsZSAgICA9ICRyb2xsZQ0KICAgICAgICAgICAgICAgICAgICBs -b2NrZWRBdCA9ICRyZXMubG9jay5sb2NrZWRBdA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2Fw -aS9sb2NrL3plbGxlL2hlYXJ0YmVhdCAgeyB0b2tlbiB9IC0+IGFrdHVhbGlzaWVydCBsYXN0QmVh -dA0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlL2hlYXJ0YmVhdCcg -LWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQt -Qm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICR0 -b2tlbiA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0b2tlbiddKSB7IFtzdHJpbmddJGEu -dG9rZW4gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxs -T3JXaGl0ZVNwYWNlKCR0b2tlbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1Rva2VuIGZlaGx0 -JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcmVzID0gUmVmcmVzaC1DZWxsTG9j -ayAkdG9rZW4NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcmVzLm9rKSB7DQogICAgICAgICAg -ICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgZmVobGVyID0gJ3VuYmVrYW5u -dGVyX2xvY2snOyBtZWxkdW5nID0gJ0xvY2sgZXhpc3RpZXJ0IG5pY2h0IChtZWhyKS4nIH0gNDA0 -DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkdHJ1ZTsgbGFzdEJl -YXQgPSAkcmVzLmxvY2subGFzdEJlYXQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg -ICAgICAgICB9DQoNCiAgICAgICAgICAgICMgREVMRVRFIC9hcGkvbG9jay96ZWxsZSAgeyB0b2tl -biB9IC0+IExvY2sgZnJlaWdlYmVuIChhdWNoIHZpYSBRdWVyeS1TdHJpbmcgZnVlciBzZW5kQmVh -Y29uKQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlJyAtYW5kICRN -ZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkg -JFJlcXVlc3QNCiAgICAgICAgICAgICAgICAkdG9rZW4gPSAkbnVsbA0KICAgICAgICAgICAgICAg -IGlmICgkYm9keSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgeyAkYSA9ICRib2R5IHwgQ29u -dmVydEZyb20tSnNvbjsgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Rva2VuJ10pIHsgJHRv -a2VuID0gW3N0cmluZ10kYS50b2tlbiB9IH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHRva2VuKSAt -YW5kICRSZXF1ZXN0LlVybC5RdWVyeSkgew0KICAgICAgICAgICAgICAgICAgICAkcSA9IFtTeXN0 -ZW0uV2ViLkh0dHBVdGlsaXR5XTo6UGFyc2VRdWVyeVN0cmluZygkUmVxdWVzdC5VcmwuUXVlcnkp -DQogICAgICAgICAgICAgICAgICAgICR0b2tlbiA9IFtzdHJpbmddJHFbJ3Rva2VuJ10NCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRl -U3BhY2UoJHRva2VuKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVG9rZW4gZmVobHQnIDQwMDsg -Y29udGludWUgfQ0KICAgICAgICAgICAgICAgICRyZXMgPSBSZWxlYXNlLUNlbGxMb2NrICR0b2tl -bg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkcmVz -Lm9rIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAg -ICAgICAjIEdFVCAvYXBpL2xvY2svemVsbGVuIC0+IExpc3RlIGFsbGVyIGFrdGl2ZW4gTG9ja3Mg -KGZ1ZXIgTGl2ZS1JbmRpY2F0b3IpDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xv -Y2svemVsbGVuJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgU2Vu -ZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBsb2NrcyA9IChHZXQtQWxsQWN0aXZlQ2VsbExvY2tz -KSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg -ICAgIyBQT1NUIC9hcGkvdmVyYW50d29ydHVuZy9hdWZnZXJ1ZWNrdCDigJQgU3RhdGlzdGlrLUNh -cHR1cmUgZnVlciBkZW4NCiAgICAgICAgICAgICMgIkVpbmdlc3BydW5nZW4iLUJhbGtlbiBpbiBk -ZXIgU2NoaWNodHZlcnRlaWx1bmcuIFdpcmQgdm9tIENsaWVudA0KICAgICAgICAgICAgIyBnZWZl -dWVydCwgc29iYWxkIGplbWFuZCBpbm5lcmhhbGIgZGVyIDE0LVRhZ2UtVmVyYmluZGxpY2hrZWl0 -IG5ldQ0KICAgICAgICAgICAgIyBpbiBkaWUgVG9wLTIgKDEuLzIuIFZJMy1ER0wpIGVpbmVyIFNj -aGljaHQgYXVmcnVlY2t0IOKAlCBhbHNvDQogICAgICAgICAgICAjIGF1c3NlcnBsYW5tYWVzc2ln -IFZlcmFudHdvcnR1bmcgdWViZXJuaW1tdC4NCiAgICAgICAgICAgICMgQm9keTogeyBwZXJzb25J -ZCwgZGF0dW0sIHNjaGljaHQsIHN0dWZlLCB2b3JoZXJXZXJ0LCBhdXNsb2VzZXJQZXJzb25JZCB9 -DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3ZlcmFudHdvcnR1bmcvYXVmZ2VydWVj -a3QnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBS -ZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5k -LUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgdHJ5IHsgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7 -IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0N -CiAgICAgICAgICAgICAgICAkcGlkID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BlcnNv -bklkJ10pIHsgW3N0cmluZ10kYS5wZXJzb25JZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAg -ICAgJGRhdCA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydkYXR1bSddKSB7IFtzdHJpbmdd -JGEuZGF0dW0gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRwaWQgLW9y -IC1ub3QgJGRhdCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAncGVyc29uSWQvZGF0dW0gZmVobHQn -IDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRmZWxkZXIgPSBbb3JkZXJlZF1Aew0K -ICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgID0gJHBpZA0KICAgICAgICAgICAgICAgICAg -ICBkYXR1bSAgICAgID0gJGRhdA0KICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgID0gaWYg -KCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NjaGljaHQnXSkgeyBbc3RyaW5nXSRhLnNjaGljaHQg -fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBzdHVmZSAgICAgID0gaWYgKCRhLlBT -T2JqZWN0LlByb3BlcnRpZXNbJ3N0dWZlJ10pIHsgW2ludF0kYS5zdHVmZSB9IGVsc2UgeyAwIH0N -CiAgICAgICAgICAgICAgICAgICAgdm9yaGVyV2VydCA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyd2b3JoZXJXZXJ0J10pIHsgW3N0cmluZ10kYS52b3JoZXJXZXJ0IH0gZWxzZSB7ICcnIH0N -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRhLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ2F1c2xvZXNlclBlcnNvbklkJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJGZlbGRl -clsnYXVzbG9lc2VyUGVyc29uSWQnXSA9IFtzdHJpbmddJGEuYXVzbG9lc2VyUGVyc29uSWQNCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAndmVyYW50 -d29ydHVuZy5laW5nZXNwcnVuZ2VuJyAkZmVsZGVyDQogICAgICAgICAgICAgICAgU2VuZC1Kc29u -T2JqZWN0ICRSZXNwb25zZSBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICBjb250aW51 -ZQ0KICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICMgR0VUIC9hcGkvcGxhbnVuZy9jaGFu -Z2VzP3NlaXQ9PGlzby10cz4gLT4gRGVsdGEtTGlzdGUgZnVlciBMaXZlLVN5bmMNCiAgICAgICAg -ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9jaGFuZ2VzJyAtYW5kICRNZXRob2QgLWVx -ICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJHEgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06 -OlBhcnNlUXVlcnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1ZXJ5KQ0KICAgICAgICAgICAgICAgICRs -b2cgPSBSZWFkLUpzb25PYmplY3QgJ2NoYW5nZXMuanNvbicNCiAgICAgICAgICAgICAgICBpZiAo -JG51bGwgLWVxICRsb2cgLW9yIC1ub3QgKCRsb2cgLWlzIFthcnJheV0pKSB7ICRsb2cgPSBAKCkg -fQ0KICAgICAgICAgICAgICAgICRtYXhTZXEgPSBHZXQtTWF4Q2hhbmdlU2VxICRsb2cNCiAgICAg -ICAgICAgICAgICBpZiAoJHEuQWxsS2V5cyAtY29udGFpbnMgJ3NlaXRfc2VxJykgew0KICAgICAg -ICAgICAgICAgICAgICAjIE5ldWVyIHJhY2UtZnJlaWVyIHNlcS1DdXJzb3IgKENoYW5nZXMgKyBz -ZXJ2ZXJTZXEgYXVzDQogICAgICAgICAgICAgICAgICAgICMgREVNU0VMQkVOIFJlYWQpLiBMZWVy -ZXIgc2VpdF9zZXEgPSBFcnN0LVN5bmMgLT4gbnVyIEN1cnNvci4NCiAgICAgICAgICAgICAgICAg -ICAgJHJhdyA9IFtzdHJpbmddJHFbJ3NlaXRfc2VxJ10NCiAgICAgICAgICAgICAgICAgICAgaWYg -KFtzdHJpbmddOjpJc051bGxPckVtcHR5KCRyYXcpKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAkY2hhbmdlcyA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg -ICAgICAgICAgICAgICAgJHNxID0gMDsgW3ZvaWRdW2ludF06OlRyeVBhcnNlKCRyYXcsIFtyZWZd -JHNxKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoYW5nZXMgPSBAKCRsb2cgfCBXaGVyZS1P -YmplY3QgeyAkbnVsbCAtbmUgJF8uc2VxIC1hbmQgW2ludF0kXy5zZXEgLWd0ICRzcSB9KQ0KICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk -UmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclRzICA9IChHZXQtRGF0 -ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgc2VydmVyU2VxID0gJG1heFNlcQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyAg -ID0gW29iamVjdFtdXSRjaGFuZ2VzDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAjIEJhY2t3YXJkLWNvbXBhdDogYWx0 -ZXIgV2FsbC1DbG9jay1DdXJzb3IgKGFsdGUgQ2xpZW50cykuDQogICAgICAgICAgICAgICAgICAg -ICRzZWl0ID0gW3N0cmluZ10kcVsnc2VpdCddDQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNv -bk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclRzICA9 -IChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgc2VydmVyU2VxID0gJG1heFNlcQ0KICAgICAgICAgICAgICAgICAgICAgICAg -Y2hhbmdlcyAgID0gKEdldC1DaGFuZ2VzU2luY2UgJHNlaXQpDQogICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg -ICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBQcm9maWxiaWxkZXIgKEF2YXRhcmUpID09PT09 -DQogICAgICAgICAgICAjIERhdGVpOiAkRGF0YURpci9hdmF0YXJzLzxpZD4uanBnICAgKEpQRUcs -IHZvbSBDbGllbnQgYXVmIDIwMHgyMDANCiAgICAgICAgICAgICMgaGVydW50ZXJnZXJlY2huZXQs -IHVlYmxpY2ggNS0yNSBLQikuDQogICAgICAgICAgICAjDQogICAgICAgICAgICAjIEJlcmVjaHRp -Z3VuZzoNCiAgICAgICAgICAgICMgICBQT1NUL0RFTEVURTogU1UvRkEgT0RFUiBlaWdlbmUgUGVy -c29uSWQgKFNlbGYtU2VydmljZSkuDQogICAgICAgICAgICAjICAgR0VUOiAgICAgICAgIGFsbGUg -ZWluZ2Vsb2dndGVuIFVzZXIgKGltIEdyaWQgc2ljaHRiYXIpLg0KICAgICAgICAgICAgIw0KICAg -ICAgICAgICAgIyBQT1NULUJvZHk6IHsgImRhdGFVcmwiOiAiZGF0YTppbWFnZS9qcGVnO2Jhc2U2 -NCw8Li4uPiIgfQ0KICAgICAgICAgICAgIyAyNTAgS0IgaGFydGVyIENhcCAoZGVmZW5zaXYg4oCU -IENsaWVudCBzY2hpY2t0IHR5cGlzY2ggPDMwIEtCKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAt -bWF0Y2ggJ14vYXBpL3BlcnNvbmVuLyhcZCspL2F2YXRhciQnKSB7DQogICAgICAgICAgICAgICAg -JHBlcnNvbklkID0gJG1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUN -CiAgICAgICAgICAgICAgICAkaXN0RWlnZW4gPSAoJG51bGwgLW5lICRyLm1laW5lUGVyc29uSWQg -LWFuZCBbaW50XSRwZXJzb25JZCAtZXEgW2ludF0kci5tZWluZVBlcnNvbklkKQ0KICAgICAgICAg -ICAgICAgICRpc3RCZXJlY2h0aWd0ID0gKFRlc3QtSXN0QWRtaW4pIC1vciAkaXN0RWlnZW4NCiAg -ICAgICAgICAgICAgICAkYXZhdGFyRGlyID0gSm9pbi1QYXRoICREYXRhRGlyICdhdmF0YXJzJw0K -ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhdmF0YXJE -aXIpKSB7DQogICAgICAgICAgICAgICAgICAgIHRyeSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJl -Y3RvcnkgLVBhdGggJGF2YXRhckRpciAtRm9yY2UgfCBPdXQtTnVsbCB9IGNhdGNoIHt9DQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRhdmF0YXJGaWxlID0gSm9pbi1QYXRoICRh -dmF0YXJEaXIgKCRwZXJzb25JZCArICcuanBnJykNCiAgICAgICAgICAgICAgICBpZiAoJE1ldGhv -ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRpc3RCZXJlY2h0 -aWd0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0K -ICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAg -IHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb2JqID0gJGJvZHkgfCBDb252ZXJ0RnJv -bS1Kc29uDQogICAgICAgICAgICAgICAgICAgICAgICAkZGF0YVVybCA9IFtzdHJpbmddJG9iai5k -YXRhVXJsDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZGF0YVVybCAtb3IgLW5v -dCAkZGF0YVVybC5TdGFydHNXaXRoKCdkYXRhOmltYWdlLycpKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEJpbGRmb3JtYXQg -KGVyd2FydGUgZGF0YTppbWFnZS8uLi47YmFzZTY0LC4uLiknIDQwMDsgY29udGludWUNCiAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRiYXNlNjQgPSAk -ZGF0YVVybCAtcmVwbGFjZSAnXmRhdGE6aW1hZ2UvW2EtekEtWl0rO2Jhc2U2NCwnLCAnJw0KICAg -ICAgICAgICAgICAgICAgICAgICAgJGJ5dGVzID0gW1N5c3RlbS5Db252ZXJ0XTo6RnJvbUJhc2U2 -NFN0cmluZygkYmFzZTY0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRieXRlcy5MZW5n -dGggLWd0IDI2MjE0NCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmlsZCB6dSBncm9zcyAobWF4 -IDI1MCBLQiknIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW1N5c3Rl -bS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRlcygkYXZhdGFyRmlsZSwgJGJ5dGVzKQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgIyBhdmF0YXJUcyBpbiBwbGFudW5nLmpzb24gc2V0emVuLCBkYW1pdCBk -ZXIgQ2FjaGUtQnVzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAjIG5hY2ggUmVsb2FkIGJl -a2FubnQgaXN0IChDbGllbnQgaGFlbmd0ID90cz08YXZhdGFyVHM+DQogICAgICAgICAgICAgICAg -ICAgICAgICAjIGFuIGRpZSBCaWxkLVVSTCkuDQogICAgICAgICAgICAgICAgICAgICAgICAkdHMg -PSBbbG9uZ10oW0RhdGVUaW1lT2Zmc2V0XTo6VXRjTm93LlRvVW5peFRpbWVNaWxsaXNlY29uZHMo -KSkNCiAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcu -anNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29u -T2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRu -dWxsIC1uZSAkcGxhbnVuZyAtYW5kICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kcC5pZCAtZXEg -W3N0cmluZ10kcGVyc29uSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1snYXZhdGFyVHMnXSkgeyAkcC5hdmF0YXJU -cyA9ICR0cyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7 -ICRwIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnYXZhdGFyVHMnIC1Ob3RlUHJvcGVy -dHlWYWx1ZSAkdHMgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +W3N0cmluZ10kYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtzdHJpbmddJGEu +cGVyc29uSWQNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Mb2NrU2FmZURhdHVtICRk +YXR1bSkgLW9yIC1ub3QgKFRlc3QtTG9ja1NhZmVJZCAkcGVyc29uSWQpKSB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlIGRhdHVtL3BlcnNvbklk +JyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR1c2Vy +ID0gR2V0LUFrdHVlbGxlckJlbnV0emVyDQogICAgICAgICAgICAgICAgJHJvbGxlID0gKEdldC1S +ZWNodGUpLnJvbGxlDQogICAgICAgICAgICAgICAgJHJlcyA9IEFjcXVpcmUtQ2VsbExvY2sgJGRh +dHVtICRwZXJzb25JZCAkdXNlciAkcm9sbGUgJGZhbHNlDQogICAgICAgICAgICAgICAgaWYgKC1u +b3QgJHJlcy5vaykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3Bv +bnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgPSAnZ2VzcGVycnQnDQog +ICAgICAgICAgICAgICAgICAgICAgICBtZWxkdW5nICAgPSAiV2lyZCBiZWFyYmVpdGV0IHZvbiAk +KCRyZXMuZXhpc3RpbmcudXNlcm5hbWUpIg0KICAgICAgICAgICAgICAgICAgICAgICAgc3BlcnJl +ciAgID0gJHJlcy5leGlzdGluZy51c2VybmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgcm9s +bGUgICAgID0gJHJlcy5leGlzdGluZy5yb2xsZQ0KICAgICAgICAgICAgICAgICAgICAgICAgc2Vp +dCAgICAgID0gJHJlcy5leGlzdGluZy5sb2NrZWRBdA0KICAgICAgICAgICAgICAgICAgICAgICAg +a2FubkZvcmNlID0gKFRlc3QtRGFyZkxvY2tVZWJlcnNjaHJlaWJlbikNCiAgICAgICAgICAgICAg +ICAgICAgfSA0MjMNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAg +ICAgICAgICAgICAgICBvayAgICAgICA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgIHRva2Vu +ICAgID0gJHJlcy5sb2NrLnRva2VuDQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRh +dHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAg +ICAgICAgICAgIHJvbGxlICAgID0gJHJvbGxlDQogICAgICAgICAgICAgICAgICAgIGxvY2tlZEF0 +ID0gJHJlcy5sb2NrLmxvY2tlZEF0DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgUE9TVCAvYXBpL2xvY2sv +emVsbGUvZm9yY2UgIHsgZGF0dW0sIHBlcnNvbklkIH0gLT4gdWViZXJzY2hyZWlidCBmcmVtZGVu +IExvY2sNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZS9mb3JjZScg +LWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz +dC1EYXJmTG9ja1VlYmVyc2NocmVpYmVuKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVy +cm9yICRSZXNwb25zZSAnRm9yY2UtTG9jayBudXIgZnVlciBGYWNoYXVmc2ljaHQvU3VwZXJVc2Vy +JyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRib2R5 +ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsg +U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAg +ICAgICAgJGRhdHVtID0gW3N0cmluZ10kYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRwZXJzb25J +ZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1M +b2NrU2FmZURhdHVtICRkYXR1bSkgLW9yIC1ub3QgKFRlc3QtTG9ja1NhZmVJZCAkcGVyc29uSWQp +KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdl +IGRhdHVtL3BlcnNvbklkJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICR1c2VyID0gR2V0LUFrdHVlbGxlckJlbnV0emVyDQogICAgICAgICAgICAgICAg +JHJvbGxlID0gKEdldC1SZWNodGUpLnJvbGxlDQogICAgICAgICAgICAgICAgJHJlcyA9IEFjcXVp +cmUtQ2VsbExvY2sgJGRhdHVtICRwZXJzb25JZCAkdXNlciAkcm9sbGUgJHRydWUNCiAgICAgICAg +ICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdsb2NrLmZvcmNlJyBAeyBkYXR1bSA9ICRkYXR1bTsg +cGVyc29uSWQgPSAkcGVyc29uSWQ7IHJvbGxlID0gJHJvbGxlIH0NCiAgICAgICAgICAgICAgICBT +ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIG9rICAgICAg +ID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gICAgPSAkcmVzLmxvY2sudG9rZW4N +CiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAg +ICAgcGVyc29uSWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgPSAk +cm9sbGUNCiAgICAgICAgICAgICAgICAgICAgbG9ja2VkQXQgPSAkcmVzLmxvY2subG9ja2VkQXQN +CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg +IH0NCg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvbG9jay96ZWxsZS9oZWFydGJlYXQgIHsgdG9r +ZW4gfSAtPiBha3R1YWxpc2llcnQgbGFzdEJlYXQNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvbG9jay96ZWxsZS9oZWFydGJlYXQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQog +ICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9z +cycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRG +cm9tLUpzb24NCiAgICAgICAgICAgICAgICAkdG9rZW4gPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVy +dGllc1sndG9rZW4nXSkgeyBbc3RyaW5nXSRhLnRva2VuIH0gZWxzZSB7ICcnIH0NCiAgICAgICAg +ICAgICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkdG9rZW4pKSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICdUb2tlbiBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJHJlcyA9IFJlZnJlc2gtQ2VsbExvY2sgJHRva2VuDQogICAgICAgICAgICAgICAgaWYg +KC1ub3QgJHJlcy5vaykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl +c3BvbnNlIEB7IGZlaGxlciA9ICd1bmJla2FubnRlcl9sb2NrJzsgbWVsZHVuZyA9ICdMb2NrIGV4 +aXN0aWVydCBuaWNodCAobWVocikuJyB9IDQwNA0KICAgICAgICAgICAgICAgICAgICBjb250aW51 +ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl +c3BvbnNlIEB7IG9rID0gJHRydWU7IGxhc3RCZWF0ID0gJHJlcy5sb2NrLmxhc3RCZWF0IH0NCiAg +ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIERF +TEVURSAvYXBpL2xvY2svemVsbGUgIHsgdG9rZW4gfSAtPiBMb2NrIGZyZWlnZWJlbiAoYXVjaCB2 +aWEgUXVlcnktU3RyaW5nIGZ1ZXIgc2VuZEJlYWNvbikNCiAgICAgICAgICAgIGlmICgkUGF0aCAt +ZXEgJy9hcGkvbG9jay96ZWxsZScgLWFuZCAkTWV0aG9kIC1lcSAnREVMRVRFJykgew0KICAgICAg +ICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgJHRv +a2VuID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJGJvZHkpIHsNCiAgICAgICAgICAgICAg +ICAgICAgdHJ5IHsgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb247IGlmICgkYS5QU09iamVj +dC5Qcm9wZXJ0aWVzWyd0b2tlbiddKSB7ICR0b2tlbiA9IFtzdHJpbmddJGEudG9rZW4gfSB9IGNh +dGNoIHt9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6 +SXNOdWxsT3JXaGl0ZVNwYWNlKCR0b2tlbikgLWFuZCAkUmVxdWVzdC5VcmwuUXVlcnkpIHsNCiAg +ICAgICAgICAgICAgICAgICAgJHEgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVl +cnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1ZXJ5KQ0KICAgICAgICAgICAgICAgICAgICAkdG9rZW4g +PSBbc3RyaW5nXSRxWyd0b2tlbiddDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCR0b2tlbikpIHsgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ1Rva2VuIGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk +cmVzID0gUmVsZWFzZS1DZWxsTG9jayAkdG9rZW4NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25P +YmplY3QgJFJlc3BvbnNlIEB7IG9rID0gJHJlcy5vayB9DQogICAgICAgICAgICAgICAgY29udGlu +dWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBHRVQgL2FwaS9sb2NrL3plbGxlbiAt +PiBMaXN0ZSBhbGxlciBha3RpdmVuIExvY2tzIChmdWVyIExpdmUtSW5kaWNhdG9yKQ0KICAgICAg +ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlbicgLWFuZCAkTWV0aG9kIC1lcSAn +R0VUJykgew0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgbG9j +a3MgPSAoR2V0LUFsbEFjdGl2ZUNlbGxMb2NrcykgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVl +DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgUE9TVCAvYXBpL3ZlcmFudHdvcnR1bmcv +YXVmZ2VydWVja3Qg4oCUIFN0YXRpc3Rpay1DYXB0dXJlIGZ1ZXIgZGVuDQogICAgICAgICAgICAj +ICJFaW5nZXNwcnVuZ2VuIi1CYWxrZW4gaW4gZGVyIFNjaGljaHR2ZXJ0ZWlsdW5nLiBXaXJkIHZv +bSBDbGllbnQNCiAgICAgICAgICAgICMgZ2VmZXVlcnQsIHNvYmFsZCBqZW1hbmQgaW5uZXJoYWxi +IGRlciAxNC1UYWdlLVZlcmJpbmRsaWNoa2VpdCBuZXUNCiAgICAgICAgICAgICMgaW4gZGllIFRv +cC0yICgxLi8yLiBWSTMtREdMKSBlaW5lciBTY2hpY2h0IGF1ZnJ1ZWNrdCDigJQgYWxzbw0KICAg +ICAgICAgICAgIyBhdXNzZXJwbGFubWFlc3NpZyBWZXJhbnR3b3J0dW5nIHVlYmVybmltbXQuDQog +ICAgICAgICAgICAjIEJvZHk6IHsgcGVyc29uSWQsIGRhdHVtLCBzY2hpY2h0LCBzdHVmZSwgdm9y +aGVyV2VydCwgYXVzbG9lc2VyUGVyc29uSWQgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn +L2FwaS92ZXJhbnR3b3J0dW5nL2F1ZmdlcnVlY2t0JyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykg +ew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUg +Z3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRhID0gJGJvZHkg +fCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVs +dGlnZXMgSlNPTicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHBpZCA9IGlmICgk +YS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZXJzb25JZCddKSB7IFtzdHJpbmddJGEucGVyc29uSWQg +fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICRkYXQgPSBpZiAoJGEuUFNPYmplY3QuUHJv +cGVydGllc1snZGF0dW0nXSkgeyBbc3RyaW5nXSRhLmRhdHVtIH0gZWxzZSB7ICcnIH0NCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkcGlkIC1vciAtbm90ICRkYXQpIHsgU2VuZC1FcnJvciAkUmVz +cG9uc2UgJ3BlcnNvbklkL2RhdHVtIGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg +ICAgICAkZmVsZGVyID0gW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQg +ICA9ICRwaWQNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgICA9ICRkYXQNCiAgICAgICAg +ICAgICAgICAgICAgc2NoaWNodCAgICA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydzY2hp +Y2h0J10pIHsgW3N0cmluZ10kYS5zY2hpY2h0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAg +ICAgICAgc3R1ZmUgICAgICA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdHVmZSddKSB7 +IFtpbnRdJGEuc3R1ZmUgfSBlbHNlIHsgMCB9DQogICAgICAgICAgICAgICAgICAgIHZvcmhlcldl +cnQgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1sndm9yaGVyV2VydCddKSB7IFtzdHJpbmdd +JGEudm9yaGVyV2VydCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgIGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydhdXNsb2VzZXJQZXJzb25JZCddKSB7 +DQogICAgICAgICAgICAgICAgICAgICRmZWxkZXJbJ2F1c2xvZXNlclBlcnNvbklkJ10gPSBbc3Ry +aW5nXSRhLmF1c2xvZXNlclBlcnNvbklkDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3ZlcmFudHdvcnR1bmcuZWluZ2VzcHJ1bmdlbicgJGZlbGRl +cg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkdHJ1 +ZSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KDQogICAgICAg +ICAgICAjIEdFVCAvYXBpL3BsYW51bmcvY2hhbmdlcz9zZWl0PTxpc28tdHM+IC0+IERlbHRhLUxp +c3RlIGZ1ZXIgTGl2ZS1TeW5jDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51 +bmcvY2hhbmdlcycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICRx +ID0gW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpQYXJzZVF1ZXJ5U3RyaW5nKCRSZXF1ZXN0LlVy +bC5RdWVyeSkNCiAgICAgICAgICAgICAgICAkbG9nID0gUmVhZC1Kc29uT2JqZWN0ICdjaGFuZ2Vz +Lmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkbG9nIC1vciAtbm90ICgkbG9n +IC1pcyBbYXJyYXldKSkgeyAkbG9nID0gQCgpIH0NCiAgICAgICAgICAgICAgICAkbWF4U2VxID0g +R2V0LU1heENoYW5nZVNlcSAkbG9nDQogICAgICAgICAgICAgICAgaWYgKCRxLkFsbEtleXMgLWNv +bnRhaW5zICdzZWl0X3NlcScpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBOZXVlciByYWNlLWZy +ZWllciBzZXEtQ3Vyc29yIChDaGFuZ2VzICsgc2VydmVyU2VxIGF1cw0KICAgICAgICAgICAgICAg +ICAgICAjIERFTVNFTEJFTiBSZWFkKS4gTGVlcmVyIHNlaXRfc2VxID0gRXJzdC1TeW5jIC0+IG51 +ciBDdXJzb3IuDQogICAgICAgICAgICAgICAgICAgICRyYXcgPSBbc3RyaW5nXSRxWydzZWl0X3Nl +cSddDQogICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JFbXB0eSgkcmF3 +KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoYW5nZXMgPSBAKCkNCiAgICAgICAgICAg +ICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzcSA9IDA7IFt2b2lk +XVtpbnRdOjpUcnlQYXJzZSgkcmF3LCBbcmVmXSRzcSkNCiAgICAgICAgICAgICAgICAgICAgICAg +ICRjaGFuZ2VzID0gQCgkbG9nIHwgV2hlcmUtT2JqZWN0IHsgJG51bGwgLW5lICRfLnNlcSAtYW5k +IFtpbnRdJF8uc2VxIC1ndCAkc3EgfSkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAg +ICAgICAgICBzZXJ2ZXJUcyAgPSAoR2V0LURhdGUpLlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5n +KCdvJykNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclNlcSA9ICRtYXhTZXENCiAgICAg +ICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgICA9IFtvYmplY3RbXV0kY2hhbmdlcw0KICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg +ICAgICAgIyBCYWNrd2FyZC1jb21wYXQ6IGFsdGVyIFdhbGwtQ2xvY2stQ3Vyc29yIChhbHRlIENs +aWVudHMpLg0KICAgICAgICAgICAgICAgICAgICAkc2VpdCA9IFtzdHJpbmddJHFbJ3NlaXQnXQ0K +ICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAg +ICAgICAgICAgICAgICAgICBzZXJ2ZXJUcyAgPSAoR2V0LURhdGUpLlRvVW5pdmVyc2FsVGltZSgp +LlRvU3RyaW5nKCdvJykNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclNlcSA9ICRtYXhT +ZXENCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgICA9IChHZXQtQ2hhbmdlc1NpbmNl +ICRzZWl0KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0g +UHJvZmlsYmlsZGVyIChBdmF0YXJlKSA9PT09PQ0KICAgICAgICAgICAgIyBEYXRlaTogJERhdGFE +aXIvYXZhdGFycy88aWQ+LmpwZyAgIChKUEVHLCB2b20gQ2xpZW50IGF1ZiAyMDB4MjAwDQogICAg +ICAgICAgICAjIGhlcnVudGVyZ2VyZWNobmV0LCB1ZWJsaWNoIDUtMjUgS0IpLg0KICAgICAgICAg +ICAgIw0KICAgICAgICAgICAgIyBCZXJlY2h0aWd1bmc6DQogICAgICAgICAgICAjICAgUE9TVC9E +RUxFVEU6IFNVL0ZBIE9ERVIgZWlnZW5lIFBlcnNvbklkIChTZWxmLVNlcnZpY2UpLg0KICAgICAg +ICAgICAgIyAgIEdFVDogICAgICAgICBhbGxlIGVpbmdlbG9nZ3RlbiBVc2VyIChpbSBHcmlkIHNp +Y2h0YmFyKS4NCiAgICAgICAgICAgICMNCiAgICAgICAgICAgICMgUE9TVC1Cb2R5OiB7ICJkYXRh +VXJsIjogImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsPC4uLj4iIH0NCiAgICAgICAgICAgICMgMjUw +IEtCIGhhcnRlciBDYXAgKGRlZmVuc2l2IOKAlCBDbGllbnQgc2NoaWNrdCB0eXBpc2NoIDwzMCBL +QikuDQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2FwaS9wZXJzb25lbi8oXGQrKS9h +dmF0YXIkJykgew0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9ICRtYXRjaGVzWzFdDQogICAg +ICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgJGlzdEVpZ2VuID0g +KCRudWxsIC1uZSAkci5tZWluZVBlcnNvbklkIC1hbmQgW2ludF0kcGVyc29uSWQgLWVxIFtpbnRd +JHIubWVpbmVQZXJzb25JZCkNCiAgICAgICAgICAgICAgICAkaXN0QmVyZWNodGlndCA9IChUZXN0 +LUlzdEFkbWluKSAtb3IgJGlzdEVpZ2VuDQogICAgICAgICAgICAgICAgJGF2YXRhckRpciA9IEpv +aW4tUGF0aCAkRGF0YURpciAnYXZhdGFycycNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz +dC1QYXRoIC1MaXRlcmFsUGF0aCAkYXZhdGFyRGlyKSkgew0KICAgICAgICAgICAgICAgICAgICB0 +cnkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1QYXRoICRhdmF0YXJEaXIgLUZvcmNl +IHwgT3V0LU51bGwgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAkYXZhdGFyRmlsZSA9IEpvaW4tUGF0aCAkYXZhdGFyRGlyICgkcGVyc29uSWQgKyAnLmpwZycp +DQogICAgICAgICAgICAgICAgaWYgKCRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkaXN0QmVyZWNodGlndCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn +S2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAg +JGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3Qg +JGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgJG9iaiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICAgICAg +ICAgJGRhdGFVcmwgPSBbc3RyaW5nXSRvYmouZGF0YVVybA0KICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKC1ub3QgJGRhdGFVcmwgLW9yIC1ub3QgJGRhdGFVcmwuU3RhcnRzV2l0aCgnZGF0YTpp +bWFnZS8nKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdVbmd1ZWx0aWdlcyBCaWxkZm9ybWF0IChlcndhcnRlIGRhdGE6aW1hZ2UvLi4uO2Jhc2U2 +NCwuLi4pJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAkYmFzZTY0ID0gJGRhdGFVcmwgLXJlcGxhY2UgJ15kYXRhOmltYWdl +L1thLXpBLVpdKztiYXNlNjQsJywgJycNCiAgICAgICAgICAgICAgICAgICAgICAgICRieXRlcyA9 +IFtTeXN0ZW0uQ29udmVydF06OkZyb21CYXNlNjRTdHJpbmcoJGJhc2U2NCkNCiAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkYnl0ZXMuTGVuZ3RoIC1ndCAyNjIxNDQpIHsgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ0JpbGQgenUgZ3Jvc3MgKG1heCAyNTAgS0IpJyA0MTM7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgIFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsQnl0ZXMoJGF2 +YXRhckZpbGUsICRieXRlcykNCiAgICAgICAgICAgICAgICAgICAgICAgICMgYXZhdGFyVHMgaW4g +cGxhbnVuZy5qc29uIHNldHplbiwgZGFtaXQgZGVyIENhY2hlLUJ1c3Rlcg0KICAgICAgICAgICAg +ICAgICAgICAgICAgIyBuYWNoIFJlbG9hZCBiZWthbm50IGlzdCAoQ2xpZW50IGhhZW5ndCA/dHM9 +PGF2YXRhclRzPg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBhbiBkaWUgQmlsZC1VUkwpLg0K +ICAgICAgICAgICAgICAgICAgICAgICAgJHRzID0gW2xvbmddKFtEYXRlVGltZU9mZnNldF06OlV0 +Y05vdy5Ub1VuaXhUaW1lTWlsbGlzZWNvbmRzKCkpDQogICAgICAgICAgICAgICAgICAgICAgICBJ +bnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHBsYW51bmcgLWFuZCAkcGxhbnVu +Zy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgk +cCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKFtzdHJpbmddJHAuaWQgLWVxIFtzdHJpbmddJHBlcnNvbklkKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ2F2YXRhclRzJ10pIHsgJHAuYXZhdGFyVHMgPSAkdHMgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0 +eU5hbWUgJ2F2YXRhclRzJyAtTm90ZVByb3BlcnR5VmFsdWUgJHRzIC1Gb3JjZSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5n +Lmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAg +ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2F2YXRhci5nZXNldHp0JyBAeyBwZXJzb25JZCA9ICRw +ZXJzb25JZDsgYnl0ZXMgPSAkYnl0ZXMuTGVuZ3RoIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JzsgYnl0 +ZXMgPSAkYnl0ZXMuTGVuZ3RoOyBhdmF0YXJUcyA9ICR0cyB9DQogICAgICAgICAgICAgICAgICAg +IH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2Ug +KCJBdmF0YXItVXBsb2FkIGZlaGxnZXNjaGxhZ2VuOiAiICsgJF8uRXhjZXB0aW9uLk1lc3NhZ2Up +IDUwMA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl +DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkTWV0aG9kIC1lcSAnREVM +RVRFJykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkaXN0QmVyZWNodGlndCkgeyBT +ZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0N +CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChU +ZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhdmF0YXJGaWxlKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRhdmF0YXJGaWxlIC1Gb3JjZSAtRXJy +b3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdy +aXRlLUxvZ0VpbnRyYWcgJ2F2YXRhci5lbnRmZXJudCcgQHsgcGVyc29uSWQgPSAkcGVyc29uSWQg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgSW52 +b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRwbGFudW5nIC1hbmQgJHBsYW51bmcu +cGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAg +aW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmIChbc3RyaW5nXSRwLmlkIC1lcSBbc3RyaW5nXSRwZXJzb25JZCAtYW5kICRwLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2F2YXRhclRzJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkcC5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgnYXZhdGFyVHMnKQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0g -fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYXZh -dGFyLmdlc2V0enQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklkOyBieXRlcyA9ICRieXRlcy5MZW5n -dGggfQ0KICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA -eyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBieXRlcyA9ICRieXRlcy5MZW5ndGg7IGF2YXRhclRz -ID0gJHRzIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkF2YXRhci1VcGxvYWQgZmVobGdlc2NobGFn -ZW46ICIgKyAkXy5FeGNlcHRpb24uTWVzc2FnZSkgNTAwDQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgaWYgKCRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgICAg -IGlmICgtbm90ICRpc3RCZXJlY2h0aWd0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBC -ZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICB0cnkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGF2YXRh -ckZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJh -bFBhdGggJGF2YXRhckZpbGUgLUZvcmNlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYXZhdGFyLmVudGZl -cm50JyBAeyBwZXJzb25JZCA9ICRwZXJzb25JZCB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpz -b24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9i -amVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVs -bCAtbmUgJHBsYW51bmcgLWFuZCAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddJHAuaWQgLWVxIFtz -dHJpbmddJHBlcnNvbklkIC1hbmQgJHAuUFNPYmplY3QuUHJvcGVydGllc1snYXZhdGFyVHMnXSkg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwLlBTT2JqZWN0LlBy -b3BlcnRpZXMuUmVtb3ZlKCdhdmF0YXJUcycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0 -LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg -ICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVj -dCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgICAg -ICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICgiQXZhdGFyLUxvZXNjaGVuIGZlaGxnZXNjaGxhZ2VuOiAiICsgJF8uRXhjZXB0aW9uLk1lc3Nh -Z2UpIDUwMA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRp -bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBBdmF0 -YXItU3RhdGljLVNlcnZpbmc6IC9kYXRhL2F2YXRhcnMvPGlkPi5qcGcgbGllc3QgZGlyZWt0IGF1 -cw0KICAgICAgICAgICAgIyAkRGF0YURpci9hdmF0YXJzLy4gQmV3dXNzdCBlaWdlbmVyIFBmYWQg -c3RhdHQgdWViZXIgUmVzb2x2ZS0NCiAgICAgICAgICAgICMgU2FmZVBhdGgsIHdlaWwgZG9ydCBk -ZXIgQXNzZXQtQ2FjaGUtUm9vdCBnZW51dHp0IHdpcmQgKEF2YXRhcmUNCiAgICAgICAgICAgICMg -bGllZ2VuIGFiZXIgdW50ZXIgRGF0YURpcikuDQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNo -ICdeL2RhdGEvYXZhdGFycy8oXGQrKVwuanBnJCcgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0K -ICAgICAgICAgICAgICAgICRhdmF0YXJGaWxlID0gSm9pbi1QYXRoIChKb2luLVBhdGggJERhdGFE -aXIgJ2F2YXRhcnMnKSAoJG1hdGNoZXNbMV0gKyAnLmpwZycpDQogICAgICAgICAgICAgICAgaWYg -KFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGF2YXRhckZpbGUgLVBhdGhUeXBlIExlYWYpIHsNCiAg -ICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsQnl0 -ZXMoJGF2YXRhckZpbGUpDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0dXNDb2Rl -ID0gMjAwDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlwZSA9ICdpbWFn -ZS9qcGVnJw0KICAgICAgICAgICAgICAgICAgICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25z -ZQ0KICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0ID0gJGNvbnRl -bnQuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uV3Jp -dGUoJGNvbnRlbnQsIDAsICRjb250ZW50Lkxlbmd0aCkNCiAgICAgICAgICAgICAgICAgICAgJFJl -c3BvbnNlLk91dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAg -ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJBdmF0YXIgbmljaHQgZ2Vm -dW5kZW46ICIgKyAkUGF0aCkgNDA0DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -IGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gU3RhdGlzY2hl -IERhdGVpZW4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy8nIC1vciAkUGF0aCAt -ZXEgJycpIHsgJFBhdGggPSAnL2luZGV4Lmh0bWwnIH0NCiAgICAgICAgICAgICRSZWxQYXRoID0g -JFBhdGguVHJpbVN0YXJ0KCcvJykNCiAgICAgICAgICAgICMgZGF0YS8tRGlyZWt0enVncmlmZi1H -YXRlIChTcHJpbnQgMSDigJQgU2ljaGVyaGVpdHMtTm90YnJlbXNlIDIwMjYtMDUtMjgpOg0KICAg -ICAgICAgICAgIyBHRVQgL2RhdGEvYWRtaW4uanNvbiAodW5kIHBsYW51bmcuanNvbiwgbG9nYnVj -aC5qc29uLCBoaW53ZWlzZS5qc29uLA0KICAgICAgICAgICAgIyBjaGFuZ2VzLmpzb24sIHNvd2ll -IGFsbGUgQmFja3VwLURhdGVpZW4pIGxpZWZlcnRlIHZvcmhlciBSb2gtSlNPTiBPSE5FDQogICAg -ICAgICAgICAjIEF1dGgtQ2hlY2suIEF2YXRhci1TdWJwZmFkIHdpcmQgb2JlbiBzZXBhcmF0IGdl -cm91dGV0LiBBbGxlcyBhbmRlcmUNCiAgICAgICAgICAgICMgdW50ZXIgL2RhdGEvIGRhcmYgTlVS -IGR1cmNoIGVpbmUgZXhwbGl6aXRlIFdoaXRlbGlzdCAoU3RhdGlzdGlrLSB1bmQNCiAgICAgICAg -ICAgICMgTG9nYnVjaC1UYXJuLU1hcmt1cHMsIHdlaXRlciB1bnRlbiBnZWdhdGVkKS4gU29uc3Qg -NDA0Lg0KICAgICAgICAgICAgIyBNaXR0ZWlsdW5ncy1VcGxvYWRzIChTcHJpbnQgRC0zYiwgMjAy -Ni0wNS0yOSk6IHZvbSBTVSBob2NoZ2VsYWRlbmUNCiAgICAgICAgICAgICMgQmlsZGVyICsgUERG -cyB1bnRlciBkYXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuL21fPHRzPl88cmFuZD4uPGV4dD4uDQog -ICAgICAgICAgICAjIEVuZHVuZ3MtV2hpdGVsaXN0IHZlcmhpbmRlcnQgQ29kZS1TbXVnZ2xpbmcg -dWViZXIgZGVuIFBmYWQuDQogICAgICAgICAgICAkaXN0TWl0dGVpbHVuZ1VwbG9hZCA9ICgkUmVs -UGF0aCAtbWF0Y2ggJ15kYXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuL21fXGQrX1thLXowLTldK1wu -KGpwZ3xwbmd8d2VicHxwZGYpJCcpDQogICAgICAgICAgICBpZiAoJFJlbFBhdGggLWxpa2UgJ2Rh -dGEvKicgLWFuZA0KICAgICAgICAgICAgICAgICRSZWxQYXRoIC1uZSAnZGF0YS9tYWluZnJhbWUu -aHRtbCcgLWFuZA0KICAgICAgICAgICAgICAgICRSZWxQYXRoIC1uZSAnZGF0YS9zYW5pdGl6ZXIu -aHRtbCcgLWFuZA0KICAgICAgICAgICAgICAgIC1ub3QgJGlzdE1pdHRlaWx1bmdVcGxvYWQpIHsN -CiAgICAgICAgICAgICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9IChkYXRhLy1EaXJla3R6dWdy -aWZmIGJsb2NraWVydCknIC1mICRSZWxQYXRoKQ0KICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICgiVW5iZWthbm50ZXIgRW5kcHVua3Q6ICRNZXRob2QgJFBhdGgiKSA0MDQNCiAg -ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBWZXJz -Y2hsZWllcnVuZ3MtRmlsdGVyOiBkYXMgU3RhdGlzdGlrLSB1bmQgTG9nYnVjaC1Nb2R1bCBzYW10 -DQogICAgICAgICAgICAjIE1hcmt1cC1GcmFnbWVudCB3ZXJkZW4gbnVyIGFuIEJlcmVjaHRpZ3Rl -IGF1c2dlbGllZmVydC4NCiAgICAgICAgICAgICMgRGlyZWt0ZXIgWnVncmlmZiBkdXJjaCBVbmJl -cmVjaHRpZ3RlIChCcm93c2VyLVVSTC1FaW5nYWJlLA0KICAgICAgICAgICAgIyBTb3VyY2UtU3Rv -ZWJlcm4pIGJla29tbXQgNDA0IOKAlCB3aWUgYmVpIGplZGVtIG5pY2h0IGV4aXN0aWVyZW5kZW4N -CiAgICAgICAgICAgICMgUGZhZCwga2VpbiBTdGF0dXNjb2RlLVZlcnJhdC4NCiAgICAgICAgICAg -IGlmICgkUmVsUGF0aCAtZXEgJ2pzL3N0YXRpc3Rpay5qcycgLW9yICRSZWxQYXRoIC1lcSAnZGF0 -YS9tYWluZnJhbWUuaHRtbCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJm -QmVyZWljaCAnc3RhdGlzdGlrJykpIHsNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFwaSAoJ0dB -VEUgNDA0IHswfSAoa2VpbiBTdGF0aXN0aWstUmVjaHQpJyAtZiAkUmVsUGF0aCkNCiAgICAgICAg -ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJVbmJla2FubnRlciBFbmRwdW5rdDog -JE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZWlmICgkUmVsUGF0aCAtZXEgJ2pzL2xvZ2J1 -Y2guanMnIC1vciAkUmVsUGF0aCAtZXEgJ2RhdGEvc2FuaXRpemVyLmh0bWwnKSB7DQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2xvZ2J1Y2gnKSkgew0KICAgICAg -ICAgICAgICAgICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9IChrZWluIExvZ2J1Y2gtUmVjaHQp -JyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -KCJVbmJla2FubnRlciBFbmRwdW5rdDogJE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICRGaWxlUGF0aCA9IFJlc29sdmUtU2FmZVBhdGggJFJlbFBhdGgNCiAgICAgICAgICAg -ICR2b25GYWxsYmFjayA9ICRmYWxzZQ0KICAgICAgICAgICAgIyBTaGFyZS1GYWxsYmFjazogd2Vu -biBkaWUgRGF0ZWkgbG9rYWwgZmVobHQgKHouQi4geGxzeC5mdWxsLm1pbi5qcw0KICAgICAgICAg -ICAgIyB3aXJkIGJld3Vzc3QgbmljaHQgaW4gZGVuIENsaWVudC1DYWNoZSBrb3BpZXJ0KSwgdmVy -c3VjaGUgc2llDQogICAgICAgICAgICAjIHZvbSBrb25maWd1cmllcnRlbiBBc3NldEZhbGxiYWNr -LVBmYWQgbmFjaHp1bGFkZW4uDQogICAgICAgICAgICBpZiAoKC1ub3QgJEZpbGVQYXRoIC1vciAt -bm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRGaWxlUGF0aCAtUGF0aFR5cGUgTGVhZikpIC1h -bmQgJHNjcmlwdDpBc3NldEZhbGxiYWNrKSB7DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAg -ICAgICAgICAgICAgICAgJGZhbGxiYWNrVHJ5ID0gSm9pbi1QYXRoICRzY3JpcHQ6QXNzZXRGYWxs -YmFjayAkUmVsUGF0aA0KICAgICAgICAgICAgICAgICAgICAkZmFsbGJhY2tOb3JtID0gW1N5c3Rl -bS5JTy5QYXRoXTo6R2V0RnVsbFBhdGgoJGZhbGxiYWNrVHJ5KQ0KICAgICAgICAgICAgICAgICAg -ICAkZmFsbGJhY2tSb290Tm9ybSA9IFtTeXN0ZW0uSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRzY3Jp -cHQ6QXNzZXRGYWxsYmFjaykNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRmYWxsYmFja05vcm0u -U3RhcnRzV2l0aCgkZmFsbGJhY2tSb290Tm9ybSwgW1N5c3RlbS5TdHJpbmdDb21wYXJpc29uXTo6 -T3JkaW5hbElnbm9yZUNhc2UpIC1hbmQNCiAgICAgICAgICAgICAgICAgICAgICAgIChUZXN0LVBh -dGggLUxpdGVyYWxQYXRoICRmYWxsYmFja05vcm0gLVBhdGhUeXBlIExlYWYpKSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAkRmlsZVBhdGggPSAkZmFsbGJhY2tOb3JtDQogICAgICAgICAgICAg -ICAgICAgICAgICAkdm9uRmFsbGJhY2sgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdG -QUxMQkFDSy1GRUhMRVIgezB9OiB7MX0nIC1mICRSZWxQYXRoLCAkXy5FeGNlcHRpb24uTWVzc2Fn -ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJEZp -bGVQYXRoIC1hbmQgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJEZpbGVQYXRoIC1QYXRoVHlwZSBM -ZWFmKSkgew0KICAgICAgICAgICAgICAgICRleHQgPSBbU3lzdGVtLklPLlBhdGhdOjpHZXRFeHRl -bnNpb24oJEZpbGVQYXRoKS5Ub0xvd2VyKCkNCiAgICAgICAgICAgICAgICAkbWltZSA9IGlmICgk -TWltZVR5cGVzLkNvbnRhaW5zS2V5KCRleHQpKSB7ICRNaW1lVHlwZXNbJGV4dF0gfSBlbHNlIHsg -J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfQ0KICAgICAgICAgICAgICAgICRjb250ZW50ID0g -W1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRGaWxlUGF0aCkNCiAgICAgICAgICAgICAg -ICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9IDIwMA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5D -b250ZW50VHlwZSA9ICRtaW1lDQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVhZGVycyAk -UmVzcG9uc2UNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0ID0gJGNv -bnRlbnQuTGVuZ3RoDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5Xcml0 -ZSgkY29udGVudCwgMCwgJGNvbnRlbnQuTGVuZ3RoKQ0KICAgICAgICAgICAgICAgICRSZXNwb25z -ZS5PdXRwdXRTdHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAgICAgIGlmICgkdm9uRmFsbGJhY2sp -IHsgTG9nLUFwaSAoJ0ZJTEUgMjAwIHswfSAoRmFsbGJhY2ssIHsxfSBCeXRlcyknIC1mICRSZWxQ -YXRoLCAkY29udGVudC5MZW5ndGgpIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg -ICAgICAgTG9nLUFwaSAoJ0ZJTEUgNDA0IHswfSAod2VkZXIgaW0gUm9vdCBub2NoIHVlYmVyIEFz -c2V0RmFsbGJhY2sgZ2VmdW5kZW4pJyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICBTZW5k -LUVycm9yICRSZXNwb25zZSAoIlVuYmVrYW5udGVyIEVuZHB1bmt0OiAkTWV0aG9kICRQYXRoIikg -NDA0DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggew0KICAgICAgICAg -ICAgTG9nLUFwaSAoJ0VYQ0VQVElPTiB7MH0gezF9OiB7Mn0nIC1mICRNZXRob2QsICRQYXRoLCAk -Xy5FeGNlcHRpb24uTWVzc2FnZSkNCiAgICAgICAgICAgIHRyeSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICRfLkV4Y2VwdGlvbi5NZXNzYWdlIDUwMCB9IGNhdGNoIHt9DQogICAgICAgIH0NCiAgICB9 -DQp9DQpjYXRjaCB7DQogICAgV3JpdGUtSG9zdCAoJ1NlcnZlci1GZWhsZXI6IHswfScgLWYgJF8u -RXhjZXB0aW9uLk1lc3NhZ2UpDQogICAgTG9nLUFwaSAoJ01BSU4tTE9PUCBFWENFUFRJT046IHsw -fScgLWYgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpDQp9DQpmaW5hbGx5IHsNCiAgICAkV2F0Y2hkb2dU -aW1lci5TdG9wKCkNCiAgICBpZiAoJExpc3RlbmVyLklzTGlzdGVuaW5nKSB7ICRMaXN0ZW5lci5T -dG9wKCkgfQ0KICAgIExvZy1BcGkgJ1NIVVRET1dOJw0KICAgIFdyaXRlLUhvc3QgJ1NlcnZlciBi -ZWVuZGV0LicNCn0NCg== +ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAn +cGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAg +ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWxv +ZXNjaHQnIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkF2YXRhci1Mb2VzY2hlbiBmZWhsZ2VzY2hs +YWdlbjogIiArICRfLkV4Y2VwdGlvbi5NZXNzYWdlKSA1MDANCiAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICMgQXZhdGFyLVN0YXRpYy1TZXJ2aW5nOiAvZGF0YS9hdmF0 +YXJzLzxpZD4uanBnIGxpZXN0IGRpcmVrdCBhdXMNCiAgICAgICAgICAgICMgJERhdGFEaXIvYXZh +dGFycy8uIEJld3Vzc3QgZWlnZW5lciBQZmFkIHN0YXR0IHVlYmVyIFJlc29sdmUtDQogICAgICAg +ICAgICAjIFNhZmVQYXRoLCB3ZWlsIGRvcnQgZGVyIEFzc2V0LUNhY2hlLVJvb3QgZ2VudXR6dCB3 +aXJkIChBdmF0YXJlDQogICAgICAgICAgICAjIGxpZWdlbiBhYmVyIHVudGVyIERhdGFEaXIpLg0K +ICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9kYXRhL2F2YXRhcnMvKFxkKylcLmpwZyQn +IC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkYXZhdGFyRmlsZSA9 +IEpvaW4tUGF0aCAoSm9pbi1QYXRoICREYXRhRGlyICdhdmF0YXJzJykgKCRtYXRjaGVzWzFdICsg +Jy5qcGcnKQ0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhdmF0 +YXJGaWxlIC1QYXRoVHlwZSBMZWFmKSB7DQogICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0g +W1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRhdmF0YXJGaWxlKQ0KICAgICAgICAgICAg +ICAgICAgICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9IDIwMA0KICAgICAgICAgICAgICAgICAgICAk +UmVzcG9uc2UuQ29udGVudFR5cGUgPSAnaW1hZ2UvanBlZycNCiAgICAgICAgICAgICAgICAgICAg +QWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UNCiAgICAgICAgICAgICAgICAgICAgJFJlc3Bv +bnNlLkNvbnRlbnRMZW5ndGg2NCA9ICRjb250ZW50Lkxlbmd0aA0KICAgICAgICAgICAgICAgICAg +ICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLldyaXRlKCRjb250ZW50LCAwLCAkY29udGVudC5MZW5n +dGgpDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uQ2xvc2UoKQ0K +ICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICgiQXZhdGFyIG5pY2h0IGdlZnVuZGVuOiAiICsgJFBhdGgpIDQwNA0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog +ICAgICAgICAgICAjID09PT09IFN0YXRpc2NoZSBEYXRlaWVuID09PT09DQogICAgICAgICAgICBp +ZiAoJFBhdGggLWVxICcvJyAtb3IgJFBhdGggLWVxICcnKSB7ICRQYXRoID0gJy9pbmRleC5odG1s +JyB9DQogICAgICAgICAgICAkUmVsUGF0aCA9ICRQYXRoLlRyaW1TdGFydCgnLycpDQogICAgICAg +ICAgICAjIGRhdGEvLURpcmVrdHp1Z3JpZmYtR2F0ZSAoU3ByaW50IDEg4oCUIFNpY2hlcmhlaXRz +LU5vdGJyZW1zZSAyMDI2LTA1LTI4KToNCiAgICAgICAgICAgICMgR0VUIC9kYXRhL2FkbWluLmpz +b24gKHVuZCBwbGFudW5nLmpzb24sIGxvZ2J1Y2guanNvbiwgaGlud2Vpc2UuanNvbiwNCiAgICAg +ICAgICAgICMgY2hhbmdlcy5qc29uLCBzb3dpZSBhbGxlIEJhY2t1cC1EYXRlaWVuKSBsaWVmZXJ0 +ZSB2b3JoZXIgUm9oLUpTT04gT0hORQ0KICAgICAgICAgICAgIyBBdXRoLUNoZWNrLiBBdmF0YXIt +U3VicGZhZCB3aXJkIG9iZW4gc2VwYXJhdCBnZXJvdXRldC4gQWxsZXMgYW5kZXJlDQogICAgICAg +ICAgICAjIHVudGVyIC9kYXRhLyBkYXJmIE5VUiBkdXJjaCBlaW5lIGV4cGxpeml0ZSBXaGl0ZWxp +c3QgKFN0YXRpc3Rpay0gdW5kDQogICAgICAgICAgICAjIExvZ2J1Y2gtVGFybi1NYXJrdXBzLCB3 +ZWl0ZXIgdW50ZW4gZ2VnYXRlZCkuIFNvbnN0IDQwNC4NCiAgICAgICAgICAgICMgTWl0dGVpbHVu +Z3MtVXBsb2FkcyAoU3ByaW50IEQtM2IsIDIwMjYtMDUtMjkpOiB2b20gU1UgaG9jaGdlbGFkZW5l +DQogICAgICAgICAgICAjIEJpbGRlciArIFBERnMgdW50ZXIgZGF0YS91cGxvYWRzL21pdHRlaWx1 +bmdlbi9tXzx0cz5fPHJhbmQ+LjxleHQ+Lg0KICAgICAgICAgICAgIyBFbmR1bmdzLVdoaXRlbGlz +dCB2ZXJoaW5kZXJ0IENvZGUtU211Z2dsaW5nIHVlYmVyIGRlbiBQZmFkLg0KICAgICAgICAgICAg +JGlzdE1pdHRlaWx1bmdVcGxvYWQgPSAoJFJlbFBhdGggLW1hdGNoICdeZGF0YS91cGxvYWRzL21p +dHRlaWx1bmdlbi9tX1xkK19bYS16MC05XStcLihqcGd8cG5nfHdlYnB8cGRmKSQnKQ0KICAgICAg +ICAgICAgaWYgKCRSZWxQYXRoIC1saWtlICdkYXRhLyonIC1hbmQNCiAgICAgICAgICAgICAgICAk +UmVsUGF0aCAtbmUgJ2RhdGEvbWFpbmZyYW1lLmh0bWwnIC1hbmQNCiAgICAgICAgICAgICAgICAk +UmVsUGF0aCAtbmUgJ2RhdGEvc2FuaXRpemVyLmh0bWwnIC1hbmQNCiAgICAgICAgICAgICAgICAt +bm90ICRpc3RNaXR0ZWlsdW5nVXBsb2FkKSB7DQogICAgICAgICAgICAgICAgTG9nLUFwaSAoJ0dB +VEUgNDA0IHswfSAoZGF0YS8tRGlyZWt0enVncmlmZiBibG9ja2llcnQpJyAtZiAkUmVsUGF0aCkN +CiAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIlVuYmVrYW5udGVyIEVuZHB1 +bmt0OiAkTWV0aG9kICRQYXRoIikgNDA0DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICMgVmVyc2NobGVpZXJ1bmdzLUZpbHRlcjogZGFzIFN0YXRp +c3Rpay0gdW5kIExvZ2J1Y2gtTW9kdWwgc2FtdA0KICAgICAgICAgICAgIyBNYXJrdXAtRnJhZ21l +bnQgd2VyZGVuIG51ciBhbiBCZXJlY2h0aWd0ZSBhdXNnZWxpZWZlcnQuDQogICAgICAgICAgICAj +IERpcmVrdGVyIFp1Z3JpZmYgZHVyY2ggVW5iZXJlY2h0aWd0ZSAoQnJvd3Nlci1VUkwtRWluZ2Fi +ZSwNCiAgICAgICAgICAgICMgU291cmNlLVN0b2ViZXJuKSBiZWtvbW10IDQwNCDigJQgd2llIGJl +aSBqZWRlbSBuaWNodCBleGlzdGllcmVuZGVuDQogICAgICAgICAgICAjIFBmYWQsIGtlaW4gU3Rh +dHVzY29kZS1WZXJyYXQuDQogICAgICAgICAgICBpZiAoJFJlbFBhdGggLWVxICdqcy9zdGF0aXN0 +aWsuanMnIC1vciAkUmVsUGF0aCAtZXEgJ2RhdGEvbWFpbmZyYW1lLmh0bWwnKSB7DQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ3N0YXRpc3RpaycpKSB7DQogICAg +ICAgICAgICAgICAgICAgIExvZy1BcGkgKCdHQVRFIDQwNCB7MH0gKGtlaW4gU3RhdGlzdGlrLVJl +Y2h0KScgLWYgJFJlbFBhdGgpDQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICgiVW5iZWthbm50ZXIgRW5kcHVua3Q6ICRNZXRob2QgJFBhdGgiKSA0MDQNCiAgICAgICAg +ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVs +c2VpZiAoJFJlbFBhdGggLWVxICdqcy9sb2didWNoLmpzJyAtb3IgJFJlbFBhdGggLWVxICdkYXRh +L3Nhbml0aXplci5odG1sJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZC +ZXJlaWNoICdsb2didWNoJykpIHsNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFwaSAoJ0dBVEUg +NDA0IHswfSAoa2VpbiBMb2didWNoLVJlY2h0KScgLWYgJFJlbFBhdGgpDQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiVW5iZWthbm50ZXIgRW5kcHVua3Q6ICRNZXRo +b2QgJFBhdGgiKSA0MDQNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkRmlsZVBhdGggPSBSZXNvbHZlLVNh +ZmVQYXRoICRSZWxQYXRoDQogICAgICAgICAgICAkdm9uRmFsbGJhY2sgPSAkZmFsc2UNCiAgICAg +ICAgICAgICMgU2hhcmUtRmFsbGJhY2s6IHdlbm4gZGllIERhdGVpIGxva2FsIGZlaGx0ICh6LkIu +IHhsc3guZnVsbC5taW4uanMNCiAgICAgICAgICAgICMgd2lyZCBiZXd1c3N0IG5pY2h0IGluIGRl +biBDbGllbnQtQ2FjaGUga29waWVydCksIHZlcnN1Y2hlIHNpZQ0KICAgICAgICAgICAgIyB2b20g +a29uZmlndXJpZXJ0ZW4gQXNzZXRGYWxsYmFjay1QZmFkIG5hY2h6dWxhZGVuLg0KICAgICAgICAg +ICAgaWYgKCgtbm90ICRGaWxlUGF0aCAtb3IgLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAk +RmlsZVBhdGggLVBhdGhUeXBlIExlYWYpKSAtYW5kICRzY3JpcHQ6QXNzZXRGYWxsYmFjaykgew0K +ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRmYWxsYmFja1RyeSA9 +IEpvaW4tUGF0aCAkc2NyaXB0OkFzc2V0RmFsbGJhY2sgJFJlbFBhdGgNCiAgICAgICAgICAgICAg +ICAgICAgJGZhbGxiYWNrTm9ybSA9IFtTeXN0ZW0uSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRmYWxs +YmFja1RyeSkNCiAgICAgICAgICAgICAgICAgICAgJGZhbGxiYWNrUm9vdE5vcm0gPSBbU3lzdGVt +LklPLlBhdGhdOjpHZXRGdWxsUGF0aCgkc2NyaXB0OkFzc2V0RmFsbGJhY2spDQogICAgICAgICAg +ICAgICAgICAgIGlmICgkZmFsbGJhY2tOb3JtLlN0YXJ0c1dpdGgoJGZhbGxiYWNrUm9vdE5vcm0s +IFtTeXN0ZW0uU3RyaW5nQ29tcGFyaXNvbl06Ok9yZGluYWxJZ25vcmVDYXNlKSAtYW5kDQogICAg +ICAgICAgICAgICAgICAgICAgICAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZmFsbGJhY2tOb3Jt +IC1QYXRoVHlwZSBMZWFmKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJEZpbGVQYXRoID0g +JGZhbGxiYWNrTm9ybQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHZvbkZhbGxiYWNrID0gJHRy +dWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAg +ICAgICAgICAgICAgICAgICBMb2ctQXBpICgnRkFMTEJBQ0stRkVITEVSIHswfTogezF9JyAtZiAk +UmVsUGF0aCwgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRGaWxlUGF0aCAtYW5kIChUZXN0LVBhdGggLUxpdGVy +YWxQYXRoICRGaWxlUGF0aCAtUGF0aFR5cGUgTGVhZikpIHsNCiAgICAgICAgICAgICAgICAkZXh0 +ID0gW1N5c3RlbS5JTy5QYXRoXTo6R2V0RXh0ZW5zaW9uKCRGaWxlUGF0aCkuVG9Mb3dlcigpDQog +ICAgICAgICAgICAgICAgJG1pbWUgPSBpZiAoJE1pbWVUeXBlcy5Db250YWluc0tleSgkZXh0KSkg +eyAkTWltZVR5cGVzWyRleHRdIH0gZWxzZSB7ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0N +CiAgICAgICAgICAgICAgICAkY29udGVudCA9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxCeXRl +cygkRmlsZVBhdGgpDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLlN0YXR1c0NvZGUgPSAyMDAN +CiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudFR5cGUgPSAkbWltZQ0KICAgICAgICAg +ICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNlDQogICAgICAgICAgICAgICAgJFJl +c3BvbnNlLkNvbnRlbnRMZW5ndGg2NCA9ICRjb250ZW50Lkxlbmd0aA0KICAgICAgICAgICAgICAg +ICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uV3JpdGUoJGNvbnRlbnQsIDAsICRjb250ZW50Lkxlbmd0 +aCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLkNsb3NlKCkNCiAgICAg +ICAgICAgICAgICBpZiAoJHZvbkZhbGxiYWNrKSB7IExvZy1BcGkgKCdGSUxFIDIwMCB7MH0gKEZh +bGxiYWNrLCB7MX0gQnl0ZXMpJyAtZiAkUmVsUGF0aCwgJGNvbnRlbnQuTGVuZ3RoKSB9DQogICAg +ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIExvZy1BcGkgKCdGSUxFIDQwNCB7MH0g +KHdlZGVyIGltIFJvb3Qgbm9jaCB1ZWJlciBBc3NldEZhbGxiYWNrIGdlZnVuZGVuKScgLWYgJFJl +bFBhdGgpDQogICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJVbmJla2FubnRl +ciBFbmRwdW5rdDogJE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAgICAgICAgfQ0KICAgICAgICB9 +DQogICAgICAgIGNhdGNoIHsNCiAgICAgICAgICAgIExvZy1BcGkgKCdFWENFUFRJT04gezB9IHsx +fTogezJ9JyAtZiAkTWV0aG9kLCAkUGF0aCwgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpDQogICAgICAg +ICAgICB0cnkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkXy5FeGNlcHRpb24uTWVzc2FnZSA1MDAg +fSBjYXRjaCB7fQ0KICAgICAgICB9DQogICAgfQ0KfQ0KY2F0Y2ggew0KICAgIFdyaXRlLUhvc3Qg +KCdTZXJ2ZXItRmVobGVyOiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgIExvZy1B +cGkgKCdNQUlOLUxPT1AgRVhDRVBUSU9OOiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0K +fQ0KZmluYWxseSB7DQogICAgJFdhdGNoZG9nVGltZXIuU3RvcCgpDQogICAgaWYgKCRMaXN0ZW5l +ci5Jc0xpc3RlbmluZykgeyAkTGlzdGVuZXIuU3RvcCgpIH0NCiAgICBMb2ctQXBpICdTSFVURE9X +TicNCiAgICBXcml0ZS1Ib3N0ICdTZXJ2ZXIgYmVlbmRldC4nDQp9DQo= ### FILE: stop.bat | 1307 QGVjaG8gb2ZmDQpzZXRsb2NhbCBlbmFibGVkZWxheWVkZXhwYW5zaW9uDQpjaGNwIDY1MDAxID5u dWwgMj4mMQ0KdGl0bGUgVkkzIERHTC1QbGFudW5nIC0gU3RvcA0KDQo6OiA9PT09PT09PT09PT09 @@ -11106,7 +11144,7 @@ ICIhQkVFTkRFVCEiPT0iMCIgKA0KICAgIGVjaG8gICBLZWluZSBsYXVmZW5kZW4gc2VydmVyLnBz MS1Qcm96ZXNzZSBnZWZ1bmRlbi4NCikgZWxzZSAoDQogICAgZWNoby4NCiAgICBlY2hvICAgJUJF RU5ERVQlIFByb3plc3NeKGVeKSBiZWVuZGV0LiBEYXRlaS1Mb2NrcyBzaW5kIGpldHp0IGZyZWku DQopDQoNCmVjaG8uDQp0aW1lb3V0IC90IDMgL25vYnJlYWsgPm51bA0KZXhpdCAvYiAwDQo= -### FILE: style.css | 234532 +### FILE: style.css | 233917 LyogPT09IFZJMyBER0wtUGxhbnVuZyDigJQgU3R5bGVzaGVldCAoRXhjZWwtdHJldWVzIExheW91 dCkgPT09CiAgIFN0YW5kOiAyMDI2LTA1LTE0ICovCgoqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHsg Ym94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9CgovKiA9PT09 @@ -14838,390 +14876,379 @@ IHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoOTYsMTYwLDI1 NSwwLjEwKSwgcmdiYSg5NiwxNjAsMjU1LDAuMTYpKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg5 NiwxNjAsMjU1LDAuNDUpOwogICAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEoOTYsMTYwLDI1NSww Ljg1KTsKfQoKLyogPT09PT0gSGlud2Vpcy1TeXN0ZW0gKEJhbm5lciBvYmVuICsgQmFkZ2UgYW0g -VXNlci1OYW1lICsgTW9kYWwtTGlzdGUpID09PT09ICovCgouaGlud2Vpcy1iYW5uZXIgewogICAg -ZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMnB4OwogICAgcGFkZGlu -ZzogOHB4IDE2cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1mYXJiZS1mZWhsZXIpOyBjb2xvcjog -I2ZmZjsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMTgpOwogICAg -Zm9udC1zaXplOiB2YXIoLS1mcy1tZCk7CiAgICBib3gtc2hhZG93OiAwIDJweCA2cHggdmFyKC0t -c2hhZG93LWxpZ2h0KTsKfQouaGlud2Vpcy1iYW5uZXIudmVyc3RlY2t0IHsgZGlzcGxheTogbm9u -ZTsgfQouaGlud2Vpcy1iYW5uZXItdGV4dCB7IGZsZXg6IDE7IGZvbnQtd2VpZ2h0OiA2MDA7IH0K -LmhpbndlaXMtYmFubmVyIC5idG4geyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9Ci5oaW53ZWlzLWJh -bm5lci1zY2hsaWVzc2VuIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjb2xvcjogI2Zm -ZjsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjQpOwogICAgd2lkdGg6IDI2 -cHg7IGhlaWdodDogMjZweDsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsKICAgIGZv -bnQtc2l6ZTogMTZweDsgbGluZS1oZWlnaHQ6IDE7IGN1cnNvcjogcG9pbnRlcjsKICAgIGRpc3Bs -YXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNl -bnRlcjsKfQouaGlud2Vpcy1iYW5uZXItc2NobGllc3Nlbjpob3ZlciB7IGJhY2tncm91bmQ6IHJn -YmEoMjU1LDI1NSwyNTUsMC4xNSk7IH0KCi5iZW51dHplci13cmFwIHsKICAgIHBvc2l0aW9uOiBy -ZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBn -YXA6IDhweDsKfQojYmVudXR6ZXItYW56ZWlnZSB7IGN1cnNvcjogZGVmYXVsdDsgfQoubWVpbi1h -dmF0YXItYnRuIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4 -OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIC8qIEZvcm0gZm9sZ3QgZGVtIGlubmVyZW4g -LnZpMy1hdmF0YXIgKGVja2lnIG1pdCBhYmdlcnVuZGV0ZW4gRWNrZW4pLiAqLwogICAgdHJhbnNp -dGlvbjogdHJhbnNmb3JtIDAuMTJzOwp9Ci5tZWluLWF2YXRhci1idG46aG92ZXIgeyB0cmFuc2Zv -cm06IHNjYWxlKDEuMDgpOyB9Ci5tZWluLWF2YXRhci1idG46aG92ZXIgLnZpMy1hdmF0YXIgewog -ICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMCwwLDAsMC4xMiksIDAgMCAwIDJw -eCByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7Cn0KLm1laW4tYXZhdGFyLWJ0bjpmb2N1cy12aXNpYmxl -IHsKICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1mYXJiZS1ha3plbnQsICM0YTkwZTIpOwog -ICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1t -ZCk7Cn0KLyogS2xpY2tiYXJlciBDdXJzb3IgbnVyIHdlbm4gZWluIEJhZGdlIGFuZ2V6ZWlndCB3 -aXJkICg9IEhpbndlaXNlIHZvcmhhbmRlbikgKi8KLmJlbnV0emVyLXdyYXA6aGFzKC5oaW53ZWlz -LWJhZGdlOm5vdCgudmVyc3RlY2t0KSkgI2JlbnV0emVyLWFuemVpZ2UgeyBjdXJzb3I6IHBvaW50 -ZXI7IH0KCi5oaW53ZWlzLWJhZGdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1p -dGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi13aWR0aDogMjBw -eDsgaGVpZ2h0OiAyMHB4OyBwYWRkaW5nOiAwIDZweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigt -LXJhZGl1cy1sZyk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1mYXJiZS1mZWhsZXIpOyBjb2xvcjog -I2ZmZjsKICAgIGZvbnQtc2l6ZTogdmFyKC0tZnMtc20pOyBmb250LXdlaWdodDogNzAwOyBsaW5l -LWhlaWdodDogMTsKICAgIGN1cnNvcjogcG9pbnRlcjsgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9u -ZTsgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggdmFyKC0tc2hh -ZG93LWxpZ2h0KTsKfQouaGlud2Vpcy1iYWRnZS52ZXJzdGVja3QgeyBkaXNwbGF5OiBub25lOyB9 -Ci5oaW53ZWlzLWJhZGdlOmhvdmVyIHsgZmlsdGVyOiBicmlnaHRuZXNzKDEuMSk7IH0KLmhpbndl -aXMtYmFkZ2U6Zm9jdXMgeyBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tdGFnLWZlaWVydGFnKTsg -b3V0bGluZS1vZmZzZXQ6IDJweDsgfQoKLmhpbndlaXMtbW9kYWwtdGFiZWxsZSB0ZCB7IHZlcnRp -Y2FsLWFsaWduOiB0b3A7IHBhZGRpbmc6IDhweCAxMHB4OyB9Ci5oaW53ZWlzLW1vZGFsLXRhYmVs -bGUgdHIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgfQou -aGlud2Vpcy1tb2RhbC10YWJlbGxlIHRyOmxhc3QtY2hpbGQgeyBib3JkZXItYm90dG9tOiBub25l -OyB9CgovKiA9PT09PSBLYW5kaWRhdGVuLVBhbmVsIHBybyB1bnRlcmJlc2V0enRlIFNjaGljaHQg -KFRhZy1EZXRhaWwpID09PT09ICovCgouYmstZGV0YWlsLXNjaGljaHQta3JpdGlzY2ggewogICAg -Ym94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWZhcmJlLWZlaGxlcikgaW5zZXQ7CiAgICBhbmlt -YXRpb246IGJrLXB1bHNlIDEuNnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0KQGtleWZyYW1lcyBi -ay1wdWxzZSB7CiAgICAwJSwgMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1mYXJi -ZS1mZWhsZXIpIGluc2V0OyB9CiAgICA1MCUgICAgICB7IGJveC1zaGFkb3c6IDAgMCAwIDNweCB2 -YXIoLS1mYXJiZS1mZWhsZXIpIGluc2V0OyB9Cn0KCi5iay1zY2hpY2h0LWthbmRpZGF0ZW4geyBt -YXJnaW4tdG9wOiAxMHB4OyBwYWRkaW5nLXRvcDogOHB4OyBib3JkZXItdG9wOiAxcHggZGFzaGVk -IHZhcigtLWJvcmRlci1saWdodCk7IH0KLmJrLWthbmRpZGF0ZW4tdG9nZ2xlIHsKICAgIGRpc3Bs -YXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsKICAgIHRyYW5z -aXRpb246IGJhY2tncm91bmQgMC4xMnMsIGJvcmRlci1jb2xvciAwLjEyczsKfQouYmsta2FuZGlk -YXRlbi10b2dnbGUgLmJrLWthbmQtcGZlaWwgewogICAgZm9udC1zaXplOiB2YXIoLS1mcy14cyk7 -IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsKICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTJzOwp9 -Ci5iay1rYW5kaWRhdGVuLXRvZ2dsZS5iay1rYW5kaWRhdGVuLXRvZ2dsZS1vZmZlbiB7CiAgICBi -YWNrZ3JvdW5kOiB2YXIoLS1iZy1ob3Zlcik7CiAgICBib3JkZXItY29sb3I6IHZhcigtLWZhcmJl -LWFremVudCk7Cn0KLmJrLWthbmRpZGF0ZW4tdG9nZ2xlLmJrLWthbmRpZGF0ZW4tdG9nZ2xlLW9m -ZmVuIC5iay1rYW5kLXBmZWlsIHsgY29sb3I6IHZhcigtLWZhcmJlLWFremVudCk7IH0KLmJrLWth -bmRpZGF0ZW4tcGFuZWwgewogICAgbWFyZ2luLXRvcDogMTBweDsgcGFkZGluZzogMTBweCAxMnB4 -OwogICAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZC1hbHQpOyBib3JkZXI6IDFweCBzb2xpZCB2 -YXIoLS1ib3JkZXItbGlnaHQpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOwp9Ci5i -ay1rYW5kaWRhdGVuLXBhbmVsLnZlcnN0ZWNrdCB7IGRpc3BsYXk6IG5vbmU7IH0KLmJrLWthbmRp -ZGF0ZW4taGlud2VpcyB7CiAgICBmb250LXNpemU6IDExLjVweDsgY29sb3I6IHZhcigtLXRleHQt -bXV0ZWQpOyBmb250LXdlaWdodDogNjAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsg -bGV0dGVyLXNwYWNpbmc6IDAuNHB4OwogICAgbWFyZ2luOiAxMHB4IDAgNnB4Owp9Ci5iay1rYW5k -aWRhdGVuLWhpbndlaXM6Zmlyc3QtY2hpbGQgeyBtYXJnaW4tdG9wOiAwOyB9Ci5iay1rYW5kaWRh -dGVuLWhpbndlaXMtdW1kaXMgeyBjb2xvcjogdmFyKC0tZmFyYmUtd2FybnVuZywgI2NhNmYxZSk7 -IH0KLmJrLWthbmRpZGF0ZW4td2FybnVuZyB7CiAgICBmb250LXNpemU6IDExLjVweDsKICAgIGJh -Y2tncm91bmQ6IHJnYmEoMjAyLDExMSwzMCwwLjEwKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJn -YmEoMjAyLDExMSwzMCwwLjM1KTsKICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tZmFy -YmUtd2FybnVuZywgI2NhNmYxZSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteHMp -OwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIG1hcmdpbi1ib3R0b206IDZweDsKICAgIGNvbG9y -OiB2YXIoLS10ZXh0LXByaW1hcnkpOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKfQouYmsta2FuZGlk -YXRlbi1sZWVyIHsgZm9udC1zaXplOiB2YXIoLS1mcy1iYXNlKTsgY29sb3I6IHZhcigtLXRleHQt -bXV0ZWQpOyBwYWRkaW5nOiA2cHggMDsgZm9udC1zdHlsZTogaXRhbGljOyB9Ci5iay1rYW5kaWRh -dGVuLWxpc3RlIHsgbGlzdC1zdHlsZTogbm9uZTsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9Ci5i -ay1rYW5kaWRhdGVuLXplaWxlIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRl -LWNvbHVtbnM6IDIycHggMWZyIGF1dG87CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHgg -OHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNh -cmQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVz -OiB2YXIoLS1yYWRpdXMtc20pOwogICAgbWFyZ2luLWJvdHRvbTogM3B4OwogICAgdHJhbnNpdGlv -bjogYm9yZGVyLWNvbG9yIDAuMTJzLCBiYWNrZ3JvdW5kIDAuMTJzOwogICAgbWluLXdpZHRoOiAw -Owp9Ci5iay1rYW5kaWRhdGVuLXplaWxlOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0t -ZmFyYmUtYWt6ZW50KTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWhvdmVyKTsKfQouYmsta2Fu -ZGlkYXRlbi16ZWlsZTpsYXN0LWNoaWxkIHsgbWFyZ2luLWJvdHRvbTogMDsgfQouYmsta2FuZGlk -YXRlbi16ZWlsZS11bWRpcyB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwMiwxMTEsMzAsMC4wNik7 -CiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHJnYmEoMjAyLDExMSwzMCwwLjU1KTsKfQouYmst -a2FuZGlkYXRlbi16ZWlsZS11bWRpczpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwMiwx -MTEsMzAsMC4xMik7CiAgICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgyMDIsMTExLDMwLDAuODUp -Owp9Ci5iay1rYW5kaWRhdGVuLXRleHQgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjog -Y29sdW1uOyBnYXA6IDJweDsgbWluLXdpZHRoOiAwOyB9Ci5iay1rYW5kaWRhdGVuLW5hbWUgewog -ICAgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IGZvbnQtc2l6 -ZTogMTIuNXB4OwogICAgbGluZS1oZWlnaHQ6IDEuMjU7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxl -eDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFw +VXNlci1OYW1lICsgTW9kYWwtTGlzdGUpID09PT09ICovCgovKiBIaW53ZWlzLUJhbm5lci1TdHls +ZXMgc2VpdCB2MS40LjUgZW50ZmVybnQg4oCUIGRlciByb3RlIEhlYWRlci1CYW5uZXIgd2ljaAog +ICBkZW0gQXV0by1Nb2RhbCBiZWltIExvZ2luIChicmFjaCB6dXZvciBkZW4gR3JpZC1TY3JvbGwp +LiBCYWRnZS1TdHlsZXMgdW50ZW4KICAgYmxlaWJlbi4gKi8KCi5iZW51dHplci13cmFwIHsKICAg +IHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVt +czogY2VudGVyOyBnYXA6IDhweDsKfQojYmVudXR6ZXItYW56ZWlnZSB7IGN1cnNvcjogZGVmYXVs +dDsgfQoubWVpbi1hdmF0YXItYnRuIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGRpc3BsYXk6 +IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIC8qIEZvcm0gZm9sZ3Qg +ZGVtIGlubmVyZW4gLnZpMy1hdmF0YXIgKGVja2lnIG1pdCBhYmdlcnVuZGV0ZW4gRWNrZW4pLiAq +LwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTJzOwp9Ci5tZWluLWF2YXRhci1idG46aG92 +ZXIgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpOyB9Ci5tZWluLWF2YXRhci1idG46aG92ZXIgLnZp +My1hdmF0YXIgewogICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMCwwLDAsMC4x +MiksIDAgMCAwIDJweCByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7Cn0KLm1laW4tYXZhdGFyLWJ0bjpm +b2N1cy12aXNpYmxlIHsKICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1mYXJiZS1ha3plbnQs +ICM0YTkwZTIpOwogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgIGJvcmRlci1yYWRpdXM6IHZh +cigtLXJhZGl1cy1tZCk7Cn0KLyogS2xpY2tiYXJlciBDdXJzb3IgbnVyIHdlbm4gZWluIEJhZGdl +IGFuZ2V6ZWlndCB3aXJkICg9IEhpbndlaXNlIHZvcmhhbmRlbikgKi8KLmJlbnV0emVyLXdyYXA6 +aGFzKC5oaW53ZWlzLWJhZGdlOm5vdCgudmVyc3RlY2t0KSkgI2JlbnV0emVyLWFuemVpZ2UgeyBj +dXJzb3I6IHBvaW50ZXI7IH0KCi5oaW53ZWlzLWJhZGdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1m +bGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1p +bi13aWR0aDogMjBweDsgaGVpZ2h0OiAyMHB4OyBwYWRkaW5nOiAwIDZweDsKICAgIGJvcmRlci1y +YWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1mYXJiZS1mZWhs +ZXIpOyBjb2xvcjogI2ZmZjsKICAgIGZvbnQtc2l6ZTogdmFyKC0tZnMtc20pOyBmb250LXdlaWdo +dDogNzAwOyBsaW5lLWhlaWdodDogMTsKICAgIGN1cnNvcjogcG9pbnRlcjsgLXdlYmtpdC11c2Vy +LXNlbGVjdDogbm9uZTsgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBib3gtc2hhZG93OiAwIDFweCAz +cHggdmFyKC0tc2hhZG93LWxpZ2h0KTsKfQouaGlud2Vpcy1iYWRnZS52ZXJzdGVja3QgeyBkaXNw +bGF5OiBub25lOyB9Ci5oaW53ZWlzLWJhZGdlOmhvdmVyIHsgZmlsdGVyOiBicmlnaHRuZXNzKDEu +MSk7IH0KLmhpbndlaXMtYmFkZ2U6Zm9jdXMgeyBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tdGFn +LWZlaWVydGFnKTsgb3V0bGluZS1vZmZzZXQ6IDJweDsgfQoKLmhpbndlaXMtbW9kYWwtdGFiZWxs +ZSB0ZCB7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHBhZGRpbmc6IDhweCAxMHB4OyB9Ci5oaW53ZWlz +LW1vZGFsLXRhYmVsbGUgdHIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVy +LWxpZ2h0KTsgfQouaGlud2Vpcy1tb2RhbC10YWJlbGxlIHRyOmxhc3QtY2hpbGQgeyBib3JkZXIt +Ym90dG9tOiBub25lOyB9CgovKiA9PT09PSBLYW5kaWRhdGVuLVBhbmVsIHBybyB1bnRlcmJlc2V0 +enRlIFNjaGljaHQgKFRhZy1EZXRhaWwpID09PT09ICovCgouYmstZGV0YWlsLXNjaGljaHQta3Jp +dGlzY2ggewogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWZhcmJlLWZlaGxlcikgaW5z +ZXQ7CiAgICBhbmltYXRpb246IGJrLXB1bHNlIDEuNnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0K +QGtleWZyYW1lcyBiay1wdWxzZSB7CiAgICAwJSwgMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDJw +eCB2YXIoLS1mYXJiZS1mZWhsZXIpIGluc2V0OyB9CiAgICA1MCUgICAgICB7IGJveC1zaGFkb3c6 +IDAgMCAwIDNweCB2YXIoLS1mYXJiZS1mZWhsZXIpIGluc2V0OyB9Cn0KCi5iay1zY2hpY2h0LWth +bmRpZGF0ZW4geyBtYXJnaW4tdG9wOiAxMHB4OyBwYWRkaW5nLXRvcDogOHB4OyBib3JkZXItdG9w +OiAxcHggZGFzaGVkIHZhcigtLWJvcmRlci1saWdodCk7IH0KLmJrLWthbmRpZGF0ZW4tdG9nZ2xl +IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZw +eDsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xMnMsIGJvcmRlci1jb2xvciAwLjEyczsK +fQouYmsta2FuZGlkYXRlbi10b2dnbGUgLmJrLWthbmQtcGZlaWwgewogICAgZm9udC1zaXplOiB2 +YXIoLS1mcy14cyk7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsKICAgIHRyYW5zaXRpb246IGNv +bG9yIDAuMTJzOwp9Ci5iay1rYW5kaWRhdGVuLXRvZ2dsZS5iay1rYW5kaWRhdGVuLXRvZ2dsZS1v +ZmZlbiB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1ob3Zlcik7CiAgICBib3JkZXItY29sb3I6 +IHZhcigtLWZhcmJlLWFremVudCk7Cn0KLmJrLWthbmRpZGF0ZW4tdG9nZ2xlLmJrLWthbmRpZGF0 +ZW4tdG9nZ2xlLW9mZmVuIC5iay1rYW5kLXBmZWlsIHsgY29sb3I6IHZhcigtLWZhcmJlLWFremVu +dCk7IH0KLmJrLWthbmRpZGF0ZW4tcGFuZWwgewogICAgbWFyZ2luLXRvcDogMTBweDsgcGFkZGlu +ZzogMTBweCAxMnB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZC1hbHQpOyBib3JkZXI6 +IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRp +dXMtbWQpOwp9Ci5iay1rYW5kaWRhdGVuLXBhbmVsLnZlcnN0ZWNrdCB7IGRpc3BsYXk6IG5vbmU7 +IH0KLmJrLWthbmRpZGF0ZW4taGlud2VpcyB7CiAgICBmb250LXNpemU6IDExLjVweDsgY29sb3I6 +IHZhcigtLXRleHQtbXV0ZWQpOyBmb250LXdlaWdodDogNjAwOwogICAgdGV4dC10cmFuc2Zvcm06 +IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IDAuNHB4OwogICAgbWFyZ2luOiAxMHB4IDAgNnB4 +Owp9Ci5iay1rYW5kaWRhdGVuLWhpbndlaXM6Zmlyc3QtY2hpbGQgeyBtYXJnaW4tdG9wOiAwOyB9 +Ci5iay1rYW5kaWRhdGVuLWhpbndlaXMtdW1kaXMgeyBjb2xvcjogdmFyKC0tZmFyYmUtd2FybnVu +ZywgI2NhNmYxZSk7IH0KLmJrLWthbmRpZGF0ZW4td2FybnVuZyB7CiAgICBmb250LXNpemU6IDEx +LjVweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjAyLDExMSwzMCwwLjEwKTsKICAgIGJvcmRlcjog +MXB4IHNvbGlkIHJnYmEoMjAyLDExMSwzMCwwLjM1KTsKICAgIGJvcmRlci1sZWZ0OiAzcHggc29s +aWQgdmFyKC0tZmFyYmUtd2FybnVuZywgI2NhNmYxZSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIo +LS1yYWRpdXMteHMpOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIG1hcmdpbi1ib3R0b206IDZw +eDsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOwogICAgbGluZS1oZWlnaHQ6IDEuNDsK +fQouYmsta2FuZGlkYXRlbi1sZWVyIHsgZm9udC1zaXplOiB2YXIoLS1mcy1iYXNlKTsgY29sb3I6 +IHZhcigtLXRleHQtbXV0ZWQpOyBwYWRkaW5nOiA2cHggMDsgZm9udC1zdHlsZTogaXRhbGljOyB9 +Ci5iay1rYW5kaWRhdGVuLWxpc3RlIHsgbGlzdC1zdHlsZTogbm9uZTsgbWFyZ2luOiAwOyBwYWRk +aW5nOiAwOyB9Ci5iay1rYW5kaWRhdGVuLXplaWxlIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBn +cmlkLXRlbXBsYXRlLWNvbHVtbnM6IDIycHggMWZyIGF1dG87CiAgICBnYXA6IDEwcHg7CiAgICBw +YWRkaW5nOiA2cHggOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6 +IHZhcigtLWJnLWNhcmQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBi +b3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtc20pOwogICAgbWFyZ2luLWJvdHRvbTogM3B4Owog +ICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTJzLCBiYWNrZ3JvdW5kIDAuMTJzOwogICAg +bWluLXdpZHRoOiAwOwp9Ci5iay1rYW5kaWRhdGVuLXplaWxlOmhvdmVyIHsKICAgIGJvcmRlci1j +b2xvcjogdmFyKC0tZmFyYmUtYWt6ZW50KTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWhvdmVy +KTsKfQouYmsta2FuZGlkYXRlbi16ZWlsZTpsYXN0LWNoaWxkIHsgbWFyZ2luLWJvdHRvbTogMDsg +fQouYmsta2FuZGlkYXRlbi16ZWlsZS11bWRpcyB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwMiwx +MTEsMzAsMC4wNik7CiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHJnYmEoMjAyLDExMSwzMCww +LjU1KTsKfQouYmsta2FuZGlkYXRlbi16ZWlsZS11bWRpczpob3ZlciB7CiAgICBiYWNrZ3JvdW5k +OiByZ2JhKDIwMiwxMTEsMzAsMC4xMik7CiAgICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgyMDIs +MTExLDMwLDAuODUpOwp9Ci5iay1rYW5kaWRhdGVuLXRleHQgeyBkaXNwbGF5OiBmbGV4OyBmbGV4 +LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDJweDsgbWluLXdpZHRoOiAwOyB9Ci5iay1rYW5kaWRh +dGVuLW5hbWUgewogICAgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLXRleHQtaGVhZGlu +Zyk7IGZvbnQtc2l6ZTogMTIuNXB4OwogICAgbGluZS1oZWlnaHQ6IDEuMjU7CiAgICBkaXNwbGF5 +OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7CiAgICB3aGl0ZS1z +cGFjZTogbm93cmFwOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsK +fQouYmsta2FuZGlkYXRlbi1tZXRhIHsKICAgIGZvbnQtc2l6ZTogMTAuNXB4OyBjb2xvcjogdmFy +KC0tdGV4dC1tdXRlZCk7IGxpbmUtaGVpZ2h0OiAxLjI7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFw OyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQouYmsta2FuZGlk -YXRlbi1tZXRhIHsKICAgIGZvbnQtc2l6ZTogMTAuNXB4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRl -ZCk7IGxpbmUtaGVpZ2h0OiAxLjI7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyBvdmVyZmxvdzog -aGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQouYmsta2FuZGlkYXRlbi13YXJuIHsg -Y29sb3I6IHZhcigtLWZhcmJlLXdhcm51bmcsICNjYTZmMWUpOyBmb250LXNpemU6IHZhcigtLWZz -LXNtKTsgfQouYmsta2FuZGlkYXRlbi1jb2RlIHsKICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7 -IGZvbnQtc2l6ZTogdmFyKC0tZnMtc20pOwogICAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZC1h -bHQpOyBwYWRkaW5nOiAycHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNt -KTsgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZh -cigtLWJvcmRlci1saWdodCk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Ci5iay1rYW5kaWRh -dGVuLWtlaW4tbWFpbCB7IG9wYWNpdHk6IDAuNTU7IH0KLmJrLWthbmRpZGF0ZW4ta2Vpbi1tYWls -IC5iay1rYW5kaWRhdGVuLWNoayB7IGN1cnNvcjogbm90LWFsbG93ZWQ7IH0KLmJrLWthbmRpZGF0 -ZW4tYWt0aW9uZW4gewogICAgbWFyZ2luLXRvcDogMTBweDsgcGFkZGluZy10b3A6IDhweDsKICAg -IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOwogICAgZGlzcGxheTog -ZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLyogPT09PT09PT09PSBFcnNjaGVp -bnVuZ3NiaWxkLUVkaXRvciA9PT09PT09PT09ICovCi8qIFR3by1Db2x1bW4tTGF5b3V0OgogICDi -lIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDi +YXRlbi13YXJuIHsgY29sb3I6IHZhcigtLWZhcmJlLXdhcm51bmcsICNjYTZmMWUpOyBmb250LXNp +emU6IHZhcigtLWZzLXNtKTsgfQouYmsta2FuZGlkYXRlbi1jb2RlIHsKICAgIGZvbnQtZmFtaWx5 +OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogdmFyKC0tZnMtc20pOwogICAgYmFja2dyb3VuZDogdmFy +KC0tYmctY2FyZC1hbHQpOyBwYWRkaW5nOiAycHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogdmFy +KC0tcmFkaXVzLXNtKTsgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsKICAgIGJvcmRlcjog +MXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9 +Ci5iay1rYW5kaWRhdGVuLWtlaW4tbWFpbCB7IG9wYWNpdHk6IDAuNTU7IH0KLmJrLWthbmRpZGF0 +ZW4ta2Vpbi1tYWlsIC5iay1rYW5kaWRhdGVuLWNoayB7IGN1cnNvcjogbm90LWFsbG93ZWQ7IH0K +LmJrLWthbmRpZGF0ZW4tYWt0aW9uZW4gewogICAgbWFyZ2luLXRvcDogMTBweDsgcGFkZGluZy10 +b3A6IDhweDsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOwog +ICAgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLyogPT09PT09 +PT09PSBFcnNjaGVpbnVuZ3NiaWxkLUVkaXRvciA9PT09PT09PT09ICovCi8qIFR3by1Db2x1bW4t +TGF5b3V0OgogICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi -lIDilIDilIDilIDilJAKICAg4pSCIFZvcnNjaGF1ICAgIOKUgiBUYWItQmFyICAgICAgICAgICAg -ICAgICAgIOKUggogICDilIIgKHN0aWNreSkgICAg4pSCIEVkaXRvciAoYWt0aXZlciBUeXApICAg -ICAg4pSCCiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKU -gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU -gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAogICBTdGlja3kgRm9vdGVyIG1pdCBTcGVpY2hlcm4g -KyBSZXNldC4KKi8KLmVyc2NoZWludW5nLWxheW91dCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAg -Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMjQwcHgsIDMwMHB4KSAxZnI7CiAgICBnYXA6 -IDE2cHg7CiAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICBtYXJnaW4tYm90dG9tOiA3MnB4OyAg -LyogUGxhdHogZnVlciBzdGlja3kgRm9vdGVyICovCn0KQG1lZGlhIChtYXgtd2lkdGg6IDEwMDBw -eCkgewogICAgLmVyc2NoZWludW5nLWxheW91dCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZy -OyB9Cn0KCi8qIC0tLS0gVm9yc2NoYXUtUGFuZWwgKGxpbmtzLCBzdGlja3kpIC0tLS0gKi8KLmVy -c2NoZWludW5nLXZvcnNjaGF1LXBhbmVsIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQp -OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKICAgIGJvcmRlci1y -YWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7CiAgICBwYWRkaW5nOiAxMnB4OwogICAgcG9zaXRpb246 -IHN0aWNreTsKICAgIHRvcDogMTBweDsKfQouZXJzY2hlaW51bmctdm9yc2NoYXUtdGl0ZWwgewog -ICAgZm9udC1zaXplOiAxMC41cHg7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgbWFyZ2luLWJv -dHRvbTogOHB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6 -IDAuNnB4OyBmb250LXdlaWdodDogNjAwOwp9Ci5lcnNjaGVpbnVuZy12b3JzY2hhdS1zdGFjayB7 -CiAgICBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDZweDsKfQou -ZXJzY2hlaW51bmctdm9yc2NoYXUtemVpbGUgewogICAgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1w -bGF0ZS1jb2x1bW5zOiA4NHB4IDFmcjsKICAgIGdhcDogMTBweDsgYWxpZ24taXRlbXM6IGNlbnRl -cjsKICAgIHBhZGRpbmc6IDZweCA4cHg7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7 -CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGN1cnNvcjogcG9pbnRlcjsg -dHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cywgYm9yZGVyLWNvbG9yIDAuMTVzOwp9Ci5lcnNj -aGVpbnVuZy12b3JzY2hhdS16ZWlsZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1o -b3Zlcik7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LXplaWxlLmFrdGl2IHsKICAgIGJhY2tncm91 -bmQ6IHZhcigtLWJnLWhvdmVyKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tZmFyYmUtYWt6ZW50 -LCAjNGE5MGUyKTsKfQouZXJzY2hlaW51bmctdm9yc2NoYXUtY2VsbHMgewogICAgZGlzcGxheTog -ZmxleDsgZ2FwOiAycHg7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LXplbGxlIHsKICAgIGZsZXg6 -IDE7IGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQtYWx0KTsKICAgIGJvcmRlci1yYWRpdXM6IHZh -cigtLXJhZGl1cy14cyk7IHBhZGRpbmc6IDRweCAzcHg7IHRleHQtYWxpZ246IGNlbnRlcjsKICAg -IGZvbnQtc2l6ZTogMTEuNXB4OyBmb250LXdlaWdodDogNjAwOyBtaW4taGVpZ2h0OiAyOHB4Owog -ICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBj -ZW50ZXI7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LWZsYXNoIHsKICAgIGJhY2tncm91bmQ6IHZh -cigtLWZhcmJlLWZydWVoLCAjQjcxQzFDKSAhaW1wb3J0YW50OwogICAgY29sb3I6ICNmZmY7CiAg -ICBtaW4td2lkdGg6IDgwcHg7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LW1ldGEgewogICAgZGlz -cGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAycHg7IG1pbi13aWR0aDog -MDsKfQouZXJzY2hlaW51bmctdm9yc2NoYXUtdHlwIHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tZnMt -YmFzZSk7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcpOwogICAg -d2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxs -aXBzaXM7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LW5vdGl6IHsKICAgIGZvbnQtc2l6ZTogdmFy -KC0tZnMteHMpOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7Cn0KLmVyc2NoZWludW5nLXZvcnNj -aGF1LWhpbndlaXMgewogICAgbWFyZ2luLXRvcDogMTBweDsgcGFkZGluZy10b3A6IDEwcHg7CiAg -ICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKICAgIGZvbnQtc2l6 -ZTogdmFyKC0tZnMteHMpOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IGZvbnQtc3R5bGU6IGl0 -YWxpYzsKfQouYnRuLW1pbmkgewogICAgcGFkZGluZzogM3B4IDhweDsgZm9udC1zaXplOiB2YXIo -LS1mcy1zbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkLWFsdCk7CiAgICBib3JkZXI6 -IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0t -cmFkaXVzLXNtKTsgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFy -eSk7Cn0KLmJ0bi1taW5pOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYmctaG92ZXIpOyB9Cgov -KiBWb3JzY2hhdS1aZWxsZW4gZXJiZW4gZGllIGZlcnRpZ2VuIE1hcmtpZXJ1bmdzLVZhcmlhYmxl -bjogKi8KLmVyc2NoZWludW5nLXZvcnNjaGF1LXplbGxlW2RhdGEtdm9yc2NoYXUta2V5PSJzb25k -ZXJ0YWdIaW53ZWlzIl0gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWhpbi1iZywgdmFy -KC0tYmctY2FyZC1hbHQpKTsKICAgIGNvbG9yOiB2YXIoLS1taGluLXRleHQsIGluaGVyaXQpOwog -ICAgZm9udC13ZWlnaHQ6IHZhcigtLW1oaW4tZncsIDYwMCk7CiAgICBib3gtc2hhZG93OiB2YXIo -LS1taGluLXNoYWRvdywgbm9uZSk7CiAgICBhbmltYXRpb246IHZhcigtLW1oaW4tYW5pbSwgbm9u -ZSk7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LXplbGxlW2RhdGEtdm9yc2NoYXUta2V5PSJzb25k -ZXJ0YWdXYXJudW5nIl0gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbXdhci1iZywgdmFy -KC0tYmctY2FyZC1hbHQpKTsKICAgIGNvbG9yOiB2YXIoLS1td2FyLXRleHQsIGluaGVyaXQpOwog -ICAgZm9udC13ZWlnaHQ6IHZhcigtLW13YXItZncsIDYwMCk7CiAgICBib3gtc2hhZG93OiB2YXIo -LS1td2FyLXNoYWRvdywgbm9uZSk7CiAgICBhbmltYXRpb246IHZhcigtLW13YXItYW5pbSwgbm9u -ZSk7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LXplbGxlW2RhdGEtdm9yc2NoYXUta2V5PSJmZWll -cnRhZ1dpY2h0aWciXSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZndpLWJnLCB2YXIo -LS1iZy1jYXJkLWFsdCkpOwogICAgY29sb3I6IHZhcigtLW1md2ktdGV4dCwgaW5oZXJpdCk7CiAg -ICBmb250LXdlaWdodDogdmFyKC0tbWZ3aS1mdywgNjAwKTsKICAgIGJveC1zaGFkb3c6IHZhcigt -LW1md2ktc2hhZG93LCBub25lKTsKICAgIGFuaW1hdGlvbjogdmFyKC0tbWZ3aS1hbmltLCBub25l -KTsKfQouZXJzY2hlaW51bmctdm9yc2NoYXUtemVsbGVbZGF0YS12b3JzY2hhdS1rZXk9ImZlcmll -biJdIHsKICAgIC8qIFZvcnNjaGF1IHplaWd0IGRpZSBTcGFsdGVuLVRvZW51bmcgYWxzIFplbGxo -aW50ZXJncnVuZCArIEJhbGtlbi1UZXh0ZmFyYmU7CiAgICAgICBGYWxsYmFja3MgPSBha3R1ZWxs -ZSBGZXJpZW4tRGVmYXVsdHMsIGRhbWl0IGF1Y2ggdW5rb25maWd1cmllcnQgZGVyCiAgICAgICB2 -ZXJ0cmF1dGUgTG9vayBlcnNjaGVpbnQuICovCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1t -ZmVyLXNwYWx0ZS1iZywgI0UwRjBFNCk7CiAgICBjb2xvcjogdmFyKC0tbWZlci10ZXh0LCAjMjU2 -MDI5KTsKICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1tZmVyLWZ3LCA3MDApOwogICAgYm94LXNoYWRv -dzogdmFyKC0tbWZlci1zaGFkb3csIG5vbmUpOwogICAgYW5pbWF0aW9uOiB2YXIoLS1tZmVyLWFu -aW0sIG5vbmUpOwp9Ci5lcnNjaGVpbnVuZy12b3JzY2hhdS16ZWxsZVtkYXRhLXZvcnNjaGF1LWtl -eT0iaGV1dGVTcGFsdGUiXSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1taGUtYmcsIHZh -cigtLWJnLWNhcmQtYWx0KSk7CiAgICBjb2xvcjogdmFyKC0tbWhlLXRleHQsIGluaGVyaXQpOwog -ICAgZm9udC13ZWlnaHQ6IHZhcigtLW1oZS1mdywgNjAwKTsKICAgIGJveC1zaGFkb3c6IHZhcigt -LW1oZS1zaGFkb3csIG5vbmUpOwogICAgYW5pbWF0aW9uOiB2YXIoLS1taGUtYW5pbSwgbm9uZSk7 -Cn0KCi8qIC0tLS0gRWRpdG9yLVNwYWx0ZSAocmVjaHRzKSAtLS0tICovCi5lcnNjaGVpbnVuZy1l -ZGl0b3Itc3BhbHRlIHsKICAgIGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47 -IGdhcDogMTBweDsKICAgIG1pbi13aWR0aDogMDsKfQovKiBUYWItQmFyOiBLYXJ0ZW4tTG9vaywg -amUgTWFya2llcnVuZ3MtVHlwIGVpbiBCdXR0b24gbWl0IGVjaHRlciBMaXZlLQogICBWb3JzY2hh -dSAoRGF0dW0vV29jaGVudGFnLSBiencuIFNjaGljaHQtWmVsbGUpIHBsdXMgTGFiZWwgZGFydW50 -ZXIuCiAgIEFrdGl2ZSBLYXJ0ZSBtaXQgQWt6ZW50LUJvcmRlciArIGxlaWNodGVtIEdsb3cuICov -Ci5lcnNjaGVpbnVuZy10YWItYmFyIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBs -YXRlLWNvbHVtbnM6IHJlcGVhdCg2LCBtaW5tYXgoMCwgMWZyKSk7CiAgICBnYXA6IDhweDsKICAg -IHBhZGRpbmc6IDhweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQpOwogICAgYm9yZGVy -OiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigt -LXJhZGl1cy1sZyk7Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAuZXJzY2hlaW51 -bmctdGFiLWJhciB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7IH0KfQpA -bWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHsKICAgIC5lcnNjaGVpbnVuZy10YWItYmFyIHsgZ3Jp -ZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTsgfQp9Ci5lcnNjaGVpbnVuZy10YWIg -ewogICAgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0 -ZW1zOiBzdHJldGNoOyBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJhY2tncm91bmQ6 -IHZhcigtLWJnLWNhcmQtYWx0KTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50Owog -ICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdGV4dC1hbGln -bjogY2VudGVyOwogICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7CiAgICB0cmFuc2l0aW9u -OiBiYWNrZ3JvdW5kIDAuMTVzLCBib3JkZXItY29sb3IgMC4xNXMsIHRyYW5zZm9ybSAwLjE1cywg -Ym94LXNoYWRvdyAwLjE1czsKfQouZXJzY2hlaW51bmctdGFiOmhvdmVyIHsKICAgIGJhY2tncm91 -bmQ6IHZhcigtLWJnLWhvdmVyKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKfQou -ZXJzY2hlaW51bmctdGFiLmFrdGl2IHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWhvdmVyKTsK -ICAgIGJvcmRlci1jb2xvcjogdmFyKC0tZmFyYmUtYWt6ZW50LCAjNGE5MGUyKTsKICAgIGJveC1z -aGFkb3c6IDAgMnB4IDEwcHggcmdiYSg3NCwxNDQsMjI2LDAuMjUpOwp9Ci5lcnNjaGVpbnVuZy10 -YWIuYWt0aXYgLmVyc2NoZWludW5nLXRhYi1sYWJlbC10b3AgewogICAgY29sb3I6IHZhcigtLXRl -eHQtaGVhZGluZyk7CiAgICBmb250LXdlaWdodDogNzAwOwp9CgovKiBDaGlwOiBiaWxkZXQgZGFz -IHRhdHNhZWNobGljaGUgRXJzY2hlaW51bmdzYmlsZCBkZXIgTWFya2llcnVuZyBhYi4KICAgRGF0 -dW0gKyBXb2NoZW50YWcgd2llIGltIFBsYW50YWZlbC1Lb3BmIGdlc3RhcGVsdDsgU3luYy1GbGFz -aCB6ZWlndAogICBzdGF0dGRlc3NlbiBkZW4gU2NoaWNodGNvZGUtVGV4dC4gKi8KLmVyc2NoZWlu -dW5nLXRhYi1jaGlwIHsKICAgIGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47 -CiAgICBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdh -cDogMXB4OwogICAgbWluLWhlaWdodDogNDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAg -IGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQpOwogICAgcGFkZGluZzogNnB4IDRweDsKICAgIGZv -bnQtd2VpZ2h0OiA3MDA7Cn0KLmVyc2NoZWludW5nLXRhYi1jaGlwLXRhZyB7CiAgICBmb250LXNp -emU6IHZhcigtLWZzLWxnKTsgbGluZS1oZWlnaHQ6IDEuMTsKfQouZXJzY2hlaW51bmctdGFiLWNo -aXAtd3QgewogICAgZm9udC1zaXplOiAxMC41cHg7IG9wYWNpdHk6IDAuODU7Cn0KLmVyc2NoZWlu -dW5nLXRhYi1jaGlwLXRleHQgewogICAgZm9udC1zaXplOiB2YXIoLS1mcy1tZCk7IGxldHRlci1z -cGFjaW5nOiAwLjVweDsKfQoKLmVyc2NoZWludW5nLXRhYi1jaGlwW2RhdGEtdm9yc2NoYXUta2V5 -PSJzb25kZXJ0YWdIaW53ZWlzIl0gewogICAgYmFja2dyb3VuZDogdmFyKC0tbWhpbi1iZywgdmFy -KC0tYmctY2FyZCkpOwogICAgY29sb3I6IHZhcigtLW1oaW4tdGV4dCwgaW5oZXJpdCk7CiAgICBi -b3gtc2hhZG93OiB2YXIoLS1taGluLXNoYWRvdywgbm9uZSk7CiAgICBhbmltYXRpb246IHZhcigt -LW1oaW4tYW5pbSwgbm9uZSk7Cn0KLmVyc2NoZWludW5nLXRhYi1jaGlwW2RhdGEtdm9yc2NoYXUt -a2V5PSJzb25kZXJ0YWdXYXJudW5nIl0gewogICAgYmFja2dyb3VuZDogdmFyKC0tbXdhci1iZywg -dmFyKC0tYmctY2FyZCkpOwogICAgY29sb3I6IHZhcigtLW13YXItdGV4dCwgaW5oZXJpdCk7CiAg -ICBib3gtc2hhZG93OiB2YXIoLS1td2FyLXNoYWRvdywgbm9uZSk7CiAgICBhbmltYXRpb246IHZh -cigtLW13YXItYW5pbSwgbm9uZSk7Cn0KLmVyc2NoZWludW5nLXRhYi1jaGlwW2RhdGEtdm9yc2No -YXUta2V5PSJmZWllcnRhZ1dpY2h0aWciXSB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tZndpLWJn -LCB2YXIoLS1iZy1jYXJkKSk7CiAgICBjb2xvcjogdmFyKC0tbWZ3aS10ZXh0LCBpbmhlcml0KTsK -ICAgIGJveC1zaGFkb3c6IHZhcigtLW1md2ktc2hhZG93LCBub25lKTsKICAgIGFuaW1hdGlvbjog -dmFyKC0tbWZ3aS1hbmltLCBub25lKTsKfQouZXJzY2hlaW51bmctdGFiLWNoaXBbZGF0YS12b3Jz -Y2hhdS1rZXk9ImZlcmllbiJdIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1mZXItc3BhbHRlLWJn -LCAjRTBGMEU0KTsKICAgIGNvbG9yOiB2YXIoLS1tZmVyLXRleHQsICMyNTYwMjkpOwogICAgYm94 -LXNoYWRvdzogdmFyKC0tbWZlci1zaGFkb3csIG5vbmUpOwogICAgYW5pbWF0aW9uOiB2YXIoLS1t -ZmVyLWFuaW0sIG5vbmUpOwp9Ci5lcnNjaGVpbnVuZy10YWItY2hpcFtkYXRhLXZvcnNjaGF1LWtl -eT0iaGV1dGVTcGFsdGUiXSB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1taGUtYmcsIHZhcigtLWJn -LWNhcmQpKTsKICAgIGNvbG9yOiB2YXIoLS1taGUtdGV4dCwgaW5oZXJpdCk7CiAgICBib3gtc2hh -ZG93OiB2YXIoLS1taGUtc2hhZG93LCBub25lKTsKICAgIGFuaW1hdGlvbjogdmFyKC0tbWhlLWFu -aW0sIG5vbmUpOwp9Ci5lcnNjaGVpbnVuZy10YWItY2hpcFtkYXRhLXZvcnNjaGF1LWtleT0ic3lu -Y0ZsYXNoIl0gewogICAgYmFja2dyb3VuZDogdmFyKC0tZmFyYmUtZnJ1ZWgsICNCNzFDMUMpOwog -ICAgY29sb3I6ICNmZmY7Cn0KCi5lcnNjaGVpbnVuZy10YWItbGFiZWwgewogICAgZGlzcGxheTog -ZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAxcHg7CiAgICBsaW5lLWhlaWdodDog -MS4yOwp9Ci5lcnNjaGVpbnVuZy10YWItbGFiZWwtdG9wIHsKICAgIGZvbnQtc2l6ZTogMTEuNXB4 -OyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsKfQouZXJzY2hl -aW51bmctdGFiLWxhYmVsLWJvdCB7CiAgICBmb250LXNpemU6IDEwLjVweDsgY29sb3I6IHZhcigt -LXRleHQtbXV0ZWQpOwp9CgouZXJzY2hlaW51bmctZWRpdG9yIHsKICAgIGJhY2tncm91bmQ6IHZh +lIDilIDilIDilIDilIDilIDilIDilIDilJAKICAg4pSCIFZvcnNjaGF1ICAgIOKUgiBUYWItQmFy +ICAgICAgICAgICAgICAgICAgIOKUggogICDilIIgKHN0aWNreSkgICAg4pSCIEVkaXRvciAoYWt0 +aXZlciBUeXApICAgICAg4pSCCiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU +gOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU +gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAogICBTdGlja3kgRm9vdGVyIG1p +dCBTcGVpY2hlcm4gKyBSZXNldC4KKi8KLmVyc2NoZWludW5nLWxheW91dCB7CiAgICBkaXNwbGF5 +OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMjQwcHgsIDMwMHB4KSAx +ZnI7CiAgICBnYXA6IDE2cHg7CiAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICBtYXJnaW4tYm90 +dG9tOiA3MnB4OyAgLyogUGxhdHogZnVlciBzdGlja3kgRm9vdGVyICovCn0KQG1lZGlhIChtYXgt +d2lkdGg6IDEwMDBweCkgewogICAgLmVyc2NoZWludW5nLWxheW91dCB7IGdyaWQtdGVtcGxhdGUt +Y29sdW1uczogMWZyOyB9Cn0KCi8qIC0tLS0gVm9yc2NoYXUtUGFuZWwgKGxpbmtzLCBzdGlja3kp +IC0tLS0gKi8KLmVyc2NoZWludW5nLXZvcnNjaGF1LXBhbmVsIHsKICAgIGJhY2tncm91bmQ6IHZh cigtLWJnLWNhcmQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsK -ICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7CiAgICBwYWRkaW5nOiAxNHB4IDE4 -cHg7Cn0KLmVyc2NoZWludW5nLWVkaXRvci1rb3BmIHsKICAgIG1hcmdpbi1ib3R0b206IDEycHg7 -IHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigt -LWJvcmRlci1saWdodCk7Cn0KLmVyc2NoZWludW5nLWVkaXRvci10aXRlbHplaWxlIHsKICAgIGRp -c3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogc3BhY2Ut -YmV0d2VlbjsKICAgIGdhcDogMTJweDsKfQouZXJzY2hlaW51bmctZWRpdG9yLXRpdGVsIHsKICAg -IG1hcmdpbjogMDsgZm9udC1zaXplOiAxNnB4OyBjb2xvcjogdmFyKC0tdGV4dC1oZWFkaW5nKTsK -fQouZXJzY2hlaW51bmctZWRpdG9yLXN1YiB7CiAgICBtYXJnaW46IDJweCAwIDA7IGZvbnQtc2l6 -ZTogdmFyKC0tZnMtc20pOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7Cn0KLmVyc2NoZWludW5n -LWVkaXRvci1ib2R5IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVt -bnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSk7CiAgICBnYXA6IDE2cHggMjJweDsKfQpAbWVk -aWEgKG1heC13aWR0aDogMTIwMHB4KSB7CiAgICAuZXJzY2hlaW51bmctZWRpdG9yLWJvZHkgeyBn -cmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7IH0KfQpAbWVk -aWEgKG1heC13aWR0aDogNzIwcHgpIHsKICAgIC5lcnNjaGVpbnVuZy1lZGl0b3ItYm9keSB7IGdy -aWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9Cn0KLmVyc2NoZWludW5nLXNla3Rpb24geyBtaW4t -d2lkdGg6IDA7IH0KLmVyc2NoZWludW5nLXNla3Rpb24tdGl0ZWwgewogICAgbWFyZ2luOiAwIDAg -OHB4OyBmb250LXNpemU6IDEwLjVweDsgZm9udC13ZWlnaHQ6IDcwMDsKICAgIHRleHQtdHJhbnNm -b3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAwLjZweDsKICAgIGNvbG9yOiB2YXIoLS10 -ZXh0LW11dGVkKTsKICAgIHBhZGRpbmctYm90dG9tOiA0cHg7IGJvcmRlci1ib3R0b206IDFweCBk -YXNoZWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKfQouZXJzY2hlaW51bmctc2VrdGlvbi1ncmlkIHsK -ICAgIGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogOHB4Owp9Ci5l -cnNjaGVpbnVuZy1mZWxkIHsKICAgIGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1u -czogOTBweCAxZnI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgbWluLXdpZHRo -OiAwOwp9Ci5lcnNjaGVpbnVuZy1mZWxkLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTEuNXB4OyBj -b2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IGZvbnQtd2VpZ2h0OiA1MDA7Cn0KLmVyc2NoZWludW5n -LWZlbGQtY29udHJvbCB7CiAgICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBn -YXA6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDI2cHg7IG1pbi13aWR0aDogMDsKfQoKLyogLS0tLSBF -aW5nYWJlLUtvbXBvbmVudGVuIC0tLS0gKi8KLmVyc2NoZWludW5nLWlucHV0IHsKICAgIHBhZGRp -bmc6IDVweCA4cHg7IGZvbnQtc2l6ZTogdmFyKC0tZnMtbWQpOwogICAgYm9yZGVyOiAxcHggc29s -aWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQtYWx0 -KTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOwogICAgYm9yZGVyLXJhZGl1czogdmFy -KC0tcmFkaXVzLXNtKTsKfQouZXJzY2hlaW51bmctaW5wdXQ6Zm9jdXMgewogICAgb3V0bGluZTog -MnB4IHNvbGlkIHZhcigtLWZhcmJlLWFremVudCwgIzRhOTBlMik7IG91dGxpbmUtb2Zmc2V0OiAx -cHg7Cn0KCi8qIEZhcmJwaWNrZXIgbWl0IMOXLUJ1dHRvbiAqLwouZXJzY2hlaW51bmctZmFyYi13 -cmFwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAg -IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7IGJvcmRlci1yYWRpdXM6IHZh -cigtLXJhZGl1cy1zbSk7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5lcnNjaGVpbnVuZy1mYXJi -LXdyYXAubGVlciAuZXJzY2hlaW51bmctZmFyYiB7CiAgICBvcGFjaXR5OiAwLjM7CiAgICBiYWNr -Z3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCB0cmFuc3BhcmVu -dCAwIDRweCwgcmdiYSgwLDAsMCwwLjE1KSA0cHggOHB4KTsKfQouZXJzY2hlaW51bmctZmFyYiB7 -CiAgICB3aWR0aDogNDRweDsgaGVpZ2h0OiAyOHB4OyBwYWRkaW5nOiAycHg7IGJvcmRlcjogbm9u -ZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjdXJzb3I6IHBvaW50ZXI7Cn0KLmVyc2No -ZWludW5nLWZhcmIteCB7CiAgICB3aWR0aDogMjJweDsgaGVpZ2h0OiAyOHB4OyBsaW5lLWhlaWdo -dDogMjZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiB2YXIoLS1mcy1sZyk7 -IGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBib3JkZXI6IG5vbmU7IGJvcmRlci1sZWZ0OiAxcHggc29s -aWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQtYWx0 -KTsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOwogICAgY3Vyc29yOiBwb2ludGVyOyBwYWRkaW5n -OiAwOwp9Ci5lcnNjaGVpbnVuZy1mYXJiLXg6aG92ZXIgewogICAgYmFja2dyb3VuZDogdmFyKC0t -YmctaG92ZXIpOyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsKfQoKLyogU2xpZGVyIG1pdCBO -dW1iZXItU3BpbmJveCAqLwouZXJzY2hlaW51bmctc2xpZGVyLXdyYXAgewogICAgZGlzcGxheTog -ZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IGZsZXg6IDE7IG1pbi13aWR0aDog -MDsKfQouZXJzY2hlaW51bmctaW5wdXQtcmFuZ2UgewogICAgZmxleDogMTsgbWluLXdpZHRoOiA2 -MHB4OwogICAgcGFkZGluZzogMDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9u -ZTsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tZmFyYmUtYWt6ZW50LCAjNGE5MGUyKTsKfQouZXJz -Y2hlaW51bmctaW5wdXQtbnVtIHsKICAgIHdpZHRoOiA1NnB4OyB0ZXh0LWFsaWduOiByaWdodDsK -fQouZXJzY2hlaW51bmctaW5wdXQtbnVtOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsgb3Bh -Y2l0eTogMTsgfQouZXJzY2hlaW51bmctZWluaGVpdCB7CiAgICBmb250LXNpemU6IHZhcigtLWZz -LXNtKTsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBtaW4td2lkdGg6IDE4cHg7Cn0KCi8qIFRv -Z2dsZS1Td2l0Y2ggKHN0YXR0IENoZWNrYm94KSAqLwouZXJzY2hlaW51bmctdG9nZ2xlIHsKICAg -IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7IGN1 -cnNvcjogcG9pbnRlcjsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9Ci5lcnNjaGVpbnVuZy10b2dn -bGUgaW5wdXQgeyBkaXNwbGF5OiBub25lOyB9Ci5lcnNjaGVpbnVuZy10b2dnbGUtcmFpbCB7CiAg -ICB3aWR0aDogMzZweDsgaGVpZ2h0OiAyMHB4OyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMt -bGcpOwogICAgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWNvbG9yKTsgcG9zaXRpb246IHJlbGF0 -aXZlOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsKfQouZXJzY2hlaW51bmctdG9n -Z2xlLXJhaWw6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcnOyBwb3NpdGlvbjogYWJzb2x1dGU7CiAg -ICB0b3A6IDJweDsgbGVmdDogMnB4OyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OwogICAgYm9y -ZGVyLXJhZGl1czogNTAlOyBiYWNrZ3JvdW5kOiAjZmZmOwogICAgdHJhbnNpdGlvbjogbGVmdCAw -LjE1czsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMyk7Cn0KLmVyc2No -ZWludW5nLXRvZ2dsZSBpbnB1dDpjaGVja2VkICsgLmVyc2NoZWludW5nLXRvZ2dsZS1yYWlsIHsK -ICAgIGJhY2tncm91bmQ6IHZhcigtLWZhcmJlLWVyZm9sZywgIzI3ODk2RCk7Cn0KLmVyc2NoZWlu -dW5nLXRvZ2dsZSBpbnB1dDpjaGVja2VkICsgLmVyc2NoZWludW5nLXRvZ2dsZS1yYWlsOjphZnRl -ciB7CiAgICBsZWZ0OiAxOHB4Owp9Ci5lcnNjaGVpbnVuZy10b2dnbGUtbGFiZWwgewogICAgZm9u -dC1zaXplOiB2YXIoLS1mcy1iYXNlKTsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOwp9CgovKiAt -LS0tIFN0aWNreSBGb290ZXIgLS0tLSAqLwouZXJzY2hlaW51bmctZm9vdGVyIHsKICAgIHBvc2l0 -aW9uOiBzdGlja3k7IGJvdHRvbTogMDsgei1pbmRleDogNTsKICAgIG1hcmdpbjogMTBweCAtMjBw -eCAtMjBweDsgIC8qIGluIGRlbiBhZG1pbi10YWItUGFkZGluZy1CZXJlaWNoIHZlcmxhZW5nZXJu -ICovCiAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQp -OwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7CiAgICBkaXNw -bGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG87CiAgICBnYXA6 -IDE0cHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KLmVyc2NoZWludW5nLWZvb3Rlci1pbmZvIHsK -ICAgIGZvbnQtc2l6ZTogdmFyKC0tZnMtc20pOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7CiAg -ICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCgoKLyogPT09PT0gTWVpbiBTY2hpY2h0LVRlYW0g4oCU -IDE0LVRhZ2UtTW9kYWwgKHNjaGljaHR0ZWFtLmpzKSA9PT09PSAqLwouc3Qta29wZmluZm8gewog -ICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZmxleC13cmFwOiB3cmFwOyBn -YXA6IDhweCAxNHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTJweDsKfQouc3QtYmFkZ2UgewogICAg -ZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAzcHggMTJweDsgYm9yZGVyLXJhZGl1czog -dmFyKC0tcmFkaXVzLXNtKTsKICAgIGZvbnQtc2l6ZTogdmFyKC0tZnMtYmFzZSk7IGZvbnQtd2Vp -Z2h0OiA3MDA7IGNvbG9yOiAjZmZmOyBsZXR0ZXItc3BhY2luZzogMC4zcHg7Cn0KLnN0LWJhZGdl -LUYgeyBiYWNrZ3JvdW5kOiAjQzc3ODAwOyB9ICAgLyogRnLDvGhkaWVuc3QgKi8KLnN0LWJhZGdl -LVMgeyBiYWNrZ3JvdW5kOiAjMTU2NUMwOyB9ICAgLyogU3DDpHRkaWVuc3QgKi8KLnN0LWJhZGdl -LU4geyBiYWNrZ3JvdW5kOiAjM0YzRDhBOyB9ICAgLyogTmFjaHRkaWVuc3QgKi8KLnN0LXplaXRy -YXVtIHsgZm9udC1zaXplOiB2YXIoLS1mcy1tZCk7IGNvbG9yOiB2YXIoLS10ZXh0LWhlYWRpbmcp -OyBmb250LXdlaWdodDogNjAwOyB9Ci5zdC1oaW53ZWlzICB7IGZvbnQtc2l6ZTogdmFyKC0tZnMt -c20pOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IH0KCi5zdC1zY3JvbGwgeyBtYXgtaGVpZ2h0 -OiA2MnZoOyBvdmVyZmxvdzogYXV0bzsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxp -Z2h0KTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsgfQouc3QtdGFiZWxsZSB7IGJv -cmRlci1jb2xsYXBzZTogc2VwYXJhdGU7IGJvcmRlci1zcGFjaW5nOiAwOyBmb250LXNpemU6IHZh -cigtLWZzLWJhc2UpOyB3aWR0aDogbWF4LWNvbnRlbnQ7IG1pbi13aWR0aDogMTAwJTsgfQouc3Qt -dGFiZWxsZSB0aCwgLnN0LXRhYmVsbGUgdGQgeyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIo -LS1ib3JkZXItbGlnaHQpOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxp -Z2h0KTsgfQoKLyogS29wZnplaWxlIHN0aWNreSBvYmVuICovCi5zdC10YWJlbGxlIHRoZWFkIHRo -IHsgcG9zaXRpb246IHN0aWNreTsgdG9wOiAwOyB6LWluZGV4OiAyOyBiYWNrZ3JvdW5kOiB2YXIo -LS1iZy10b29sYmFyKTsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IHBhZGRpbmc6IDRweCAy -cHg7IH0KLnN0LXRoLXRhZyB7IG1pbi13aWR0aDogMzhweDsgdGV4dC1hbGlnbjogY2VudGVyOyB9 -Ci5zdC10aC1kYXR1bSB7IGZvbnQtc2l6ZTogdmFyKC0tZnMtc20pOyBmb250LXdlaWdodDogNzAw -OyB9Ci5zdC10aC13dGFnICB7IGZvbnQtc2l6ZTogdmFyKC0tZnMteHMpOyBjb2xvcjogdmFyKC0t -dGV4dC1tdXRlZCk7IH0KCi8qIE5hbWVuc3NwYWx0ZSBzdGlja3kgbGlua3MgKGF1Y2ggaW0gS29w -ZiAtPiB6LWluZGV4IDMpICovCi5zdC10aC1uYW1lIHsgcG9zaXRpb246IHN0aWNreTsgbGVmdDog -MDsgei1pbmRleDogMzsgdGV4dC1hbGlnbjogbGVmdDsgbWluLXdpZHRoOiAxNzBweDsgcGFkZGlu -Zy1sZWZ0OiA4cHg7IH0KLnN0LXRkLW5hbWUgeyBwb3NpdGlvbjogc3RpY2t5OyBsZWZ0OiAwOyB6 -LWluZGV4OiAxOyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkKTsgbWluLXdpZHRoOiAxNzBweDsg -cGFkZGluZzogMnB4IDhweDsgfQouc3QtcGVyc29uIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRl -bXM6IGNlbnRlcjsgZ2FwOiA3cHg7IH0KLnN0LXBlcnNvbi1uYW1lIHsgZm9udC13ZWlnaHQ6IDYw -MDsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IGxpbmUtaGVpZ2h0OiAxLjE7IH0KLnN0LXBl -cnNvbi1tZXRhIHsgZm9udC1zaXplOiB2YXIoLS1mcy14cyk7IGNvbG9yOiB2YXIoLS10ZXh0LW11 -dGVkKTsgbGluZS1oZWlnaHQ6IDEuMTsgfQoKLnN0LXRkLXRhZyB7IHRleHQtYWxpZ246IGNlbnRl -cjsgcGFkZGluZzogM3B4IDJweDsgbWluLXdpZHRoOiAzOHB4OyBmb250LXdlaWdodDogNjAwOyBj -b2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsgfQouc3Qtd2UgeyBiYWNrZ3JvdW5kOiAjRURGMkY4 -OyB9CltkYXRhLXRoZW1lPSJuaWdodCJdIC5zdC13ZSB7IGJhY2tncm91bmQ6ICMxRjJBMzg7IH0K -Ci8qIEVpZ2VuZSBaZWlsZSBoZXJ2b3JoZWJlbiAqLwouc3QtemVpbGUtaWNoIC5zdC10ZC1uYW1l -IHsgYm94LXNoYWRvdzogaW5zZXQgM3B4IDAgMCB2YXIoLS1iZy1wcmltYXJ5KTsgfQouc3QtemVp -bGUtaWNoIC5zdC10ZC1uYW1lLCAuc3QtemVpbGUtaWNoIC5zdC10ZC10YWc6bm90KFtzdHlsZV0p -IHsgYmFja2dyb3VuZDogdmFyKC0tYmctaG92ZXIpOyB9Cg== +ICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7CiAgICBwYWRkaW5nOiAxMnB4Owog +ICAgcG9zaXRpb246IHN0aWNreTsKICAgIHRvcDogMTBweDsKfQouZXJzY2hlaW51bmctdm9yc2No +YXUtdGl0ZWwgewogICAgZm9udC1zaXplOiAxMC41cHg7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVk +KTsgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0 +dGVyLXNwYWNpbmc6IDAuNnB4OyBmb250LXdlaWdodDogNjAwOwp9Ci5lcnNjaGVpbnVuZy12b3Jz +Y2hhdS1zdGFjayB7CiAgICBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBn +YXA6IDZweDsKfQouZXJzY2hlaW51bmctdm9yc2NoYXUtemVpbGUgewogICAgZGlzcGxheTogZ3Jp +ZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA4NHB4IDFmcjsKICAgIGdhcDogMTBweDsgYWxpZ24t +aXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDZweCA4cHg7IGJvcmRlci1yYWRpdXM6IHZhcigt +LXJhZGl1cy1tZCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGN1cnNv +cjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cywgYm9yZGVyLWNvbG9yIDAu +MTVzOwp9Ci5lcnNjaGVpbnVuZy12b3JzY2hhdS16ZWlsZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5k +OiB2YXIoLS1iZy1ob3Zlcik7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LXplaWxlLmFrdGl2IHsK +ICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWhvdmVyKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0t +ZmFyYmUtYWt6ZW50LCAjNGE5MGUyKTsKfQouZXJzY2hlaW51bmctdm9yc2NoYXUtY2VsbHMgewog +ICAgZGlzcGxheTogZmxleDsgZ2FwOiAycHg7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LXplbGxl +IHsKICAgIGZsZXg6IDE7IGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQtYWx0KTsKICAgIGJvcmRl +ci1yYWRpdXM6IHZhcigtLXJhZGl1cy14cyk7IHBhZGRpbmc6IDRweCAzcHg7IHRleHQtYWxpZ246 +IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMTEuNXB4OyBmb250LXdlaWdodDogNjAwOyBtaW4taGVp +Z2h0OiAyOHB4OwogICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlm +eS1jb250ZW50OiBjZW50ZXI7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LWZsYXNoIHsKICAgIGJh +Y2tncm91bmQ6IHZhcigtLWZhcmJlLWZydWVoLCAjQjcxQzFDKSAhaW1wb3J0YW50OwogICAgY29s +b3I6ICNmZmY7CiAgICBtaW4td2lkdGg6IDgwcHg7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LW1l +dGEgewogICAgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAycHg7 +IG1pbi13aWR0aDogMDsKfQouZXJzY2hlaW51bmctdm9yc2NoYXUtdHlwIHsKICAgIGZvbnQtc2l6 +ZTogdmFyKC0tZnMtYmFzZSk7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiB2YXIoLS10ZXh0LWhl +YWRpbmcpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1v +dmVyZmxvdzogZWxsaXBzaXM7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LW5vdGl6IHsKICAgIGZv +bnQtc2l6ZTogdmFyKC0tZnMteHMpOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7Cn0KLmVyc2No +ZWludW5nLXZvcnNjaGF1LWhpbndlaXMgewogICAgbWFyZ2luLXRvcDogMTBweDsgcGFkZGluZy10 +b3A6IDEwcHg7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsK +ICAgIGZvbnQtc2l6ZTogdmFyKC0tZnMteHMpOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IGZv +bnQtc3R5bGU6IGl0YWxpYzsKfQouYnRuLW1pbmkgewogICAgcGFkZGluZzogM3B4IDhweDsgZm9u +dC1zaXplOiB2YXIoLS1mcy1zbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkLWFsdCk7 +CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOwogICAgYm9yZGVyLXJh +ZGl1czogdmFyKC0tcmFkaXVzLXNtKTsgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigt +LXRleHQtcHJpbWFyeSk7Cn0KLmJ0bi1taW5pOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYmct +aG92ZXIpOyB9CgovKiBWb3JzY2hhdS1aZWxsZW4gZXJiZW4gZGllIGZlcnRpZ2VuIE1hcmtpZXJ1 +bmdzLVZhcmlhYmxlbjogKi8KLmVyc2NoZWludW5nLXZvcnNjaGF1LXplbGxlW2RhdGEtdm9yc2No +YXUta2V5PSJzb25kZXJ0YWdIaW53ZWlzIl0gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0t +bWhpbi1iZywgdmFyKC0tYmctY2FyZC1hbHQpKTsKICAgIGNvbG9yOiB2YXIoLS1taGluLXRleHQs +IGluaGVyaXQpOwogICAgZm9udC13ZWlnaHQ6IHZhcigtLW1oaW4tZncsIDYwMCk7CiAgICBib3gt +c2hhZG93OiB2YXIoLS1taGluLXNoYWRvdywgbm9uZSk7CiAgICBhbmltYXRpb246IHZhcigtLW1o +aW4tYW5pbSwgbm9uZSk7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LXplbGxlW2RhdGEtdm9yc2No +YXUta2V5PSJzb25kZXJ0YWdXYXJudW5nIl0gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0t +bXdhci1iZywgdmFyKC0tYmctY2FyZC1hbHQpKTsKICAgIGNvbG9yOiB2YXIoLS1td2FyLXRleHQs +IGluaGVyaXQpOwogICAgZm9udC13ZWlnaHQ6IHZhcigtLW13YXItZncsIDYwMCk7CiAgICBib3gt +c2hhZG93OiB2YXIoLS1td2FyLXNoYWRvdywgbm9uZSk7CiAgICBhbmltYXRpb246IHZhcigtLW13 +YXItYW5pbSwgbm9uZSk7Cn0KLmVyc2NoZWludW5nLXZvcnNjaGF1LXplbGxlW2RhdGEtdm9yc2No +YXUta2V5PSJmZWllcnRhZ1dpY2h0aWciXSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1t +ZndpLWJnLCB2YXIoLS1iZy1jYXJkLWFsdCkpOwogICAgY29sb3I6IHZhcigtLW1md2ktdGV4dCwg +aW5oZXJpdCk7CiAgICBmb250LXdlaWdodDogdmFyKC0tbWZ3aS1mdywgNjAwKTsKICAgIGJveC1z +aGFkb3c6IHZhcigtLW1md2ktc2hhZG93LCBub25lKTsKICAgIGFuaW1hdGlvbjogdmFyKC0tbWZ3 +aS1hbmltLCBub25lKTsKfQouZXJzY2hlaW51bmctdm9yc2NoYXUtemVsbGVbZGF0YS12b3JzY2hh +dS1rZXk9ImZlcmllbiJdIHsKICAgIC8qIFZvcnNjaGF1IHplaWd0IGRpZSBTcGFsdGVuLVRvZW51 +bmcgYWxzIFplbGxoaW50ZXJncnVuZCArIEJhbGtlbi1UZXh0ZmFyYmU7CiAgICAgICBGYWxsYmFj +a3MgPSBha3R1ZWxsZSBGZXJpZW4tRGVmYXVsdHMsIGRhbWl0IGF1Y2ggdW5rb25maWd1cmllcnQg +ZGVyCiAgICAgICB2ZXJ0cmF1dGUgTG9vayBlcnNjaGVpbnQuICovCiAgICBiYWNrZ3JvdW5kLWNv +bG9yOiB2YXIoLS1tZmVyLXNwYWx0ZS1iZywgI0UwRjBFNCk7CiAgICBjb2xvcjogdmFyKC0tbWZl +ci10ZXh0LCAjMjU2MDI5KTsKICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1tZmVyLWZ3LCA3MDApOwog +ICAgYm94LXNoYWRvdzogdmFyKC0tbWZlci1zaGFkb3csIG5vbmUpOwogICAgYW5pbWF0aW9uOiB2 +YXIoLS1tZmVyLWFuaW0sIG5vbmUpOwp9Ci5lcnNjaGVpbnVuZy12b3JzY2hhdS16ZWxsZVtkYXRh +LXZvcnNjaGF1LWtleT0iaGV1dGVTcGFsdGUiXSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIo +LS1taGUtYmcsIHZhcigtLWJnLWNhcmQtYWx0KSk7CiAgICBjb2xvcjogdmFyKC0tbWhlLXRleHQs +IGluaGVyaXQpOwogICAgZm9udC13ZWlnaHQ6IHZhcigtLW1oZS1mdywgNjAwKTsKICAgIGJveC1z +aGFkb3c6IHZhcigtLW1oZS1zaGFkb3csIG5vbmUpOwogICAgYW5pbWF0aW9uOiB2YXIoLS1taGUt +YW5pbSwgbm9uZSk7Cn0KCi8qIC0tLS0gRWRpdG9yLVNwYWx0ZSAocmVjaHRzKSAtLS0tICovCi5l +cnNjaGVpbnVuZy1lZGl0b3Itc3BhbHRlIHsKICAgIGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0 +aW9uOiBjb2x1bW47IGdhcDogMTBweDsKICAgIG1pbi13aWR0aDogMDsKfQovKiBUYWItQmFyOiBL +YXJ0ZW4tTG9vaywgamUgTWFya2llcnVuZ3MtVHlwIGVpbiBCdXR0b24gbWl0IGVjaHRlciBMaXZl +LQogICBWb3JzY2hhdSAoRGF0dW0vV29jaGVudGFnLSBiencuIFNjaGljaHQtWmVsbGUpIHBsdXMg +TGFiZWwgZGFydW50ZXIuCiAgIEFrdGl2ZSBLYXJ0ZSBtaXQgQWt6ZW50LUJvcmRlciArIGxlaWNo +dGVtIEdsb3cuICovCi5lcnNjaGVpbnVuZy10YWItYmFyIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAg +ICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg2LCBtaW5tYXgoMCwgMWZyKSk7CiAgICBn +YXA6IDhweDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQp +OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKICAgIGJvcmRlci1y +YWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAg +ICAuZXJzY2hlaW51bmctdGFiLWJhciB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMs +IDFmcik7IH0KfQpAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHsKICAgIC5lcnNjaGVpbnVuZy10 +YWItYmFyIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTsgfQp9Ci5lcnNj +aGVpbnVuZy10YWIgewogICAgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsK +ICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOyBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDhweDsKICAg +IGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQtYWx0KTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRy +YW5zcGFyZW50OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwog +ICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7CiAg +ICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzLCBib3JkZXItY29sb3IgMC4xNXMsIHRyYW5z +Zm9ybSAwLjE1cywgYm94LXNoYWRvdyAwLjE1czsKfQouZXJzY2hlaW51bmctdGFiOmhvdmVyIHsK +ICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWhvdmVyKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRl +WSgtMXB4KTsKfQouZXJzY2hlaW51bmctdGFiLmFrdGl2IHsKICAgIGJhY2tncm91bmQ6IHZhcigt +LWJnLWhvdmVyKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tZmFyYmUtYWt6ZW50LCAjNGE5MGUy +KTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDEwcHggcmdiYSg3NCwxNDQsMjI2LDAuMjUpOwp9Ci5l +cnNjaGVpbnVuZy10YWIuYWt0aXYgLmVyc2NoZWludW5nLXRhYi1sYWJlbC10b3AgewogICAgY29s +b3I6IHZhcigtLXRleHQtaGVhZGluZyk7CiAgICBmb250LXdlaWdodDogNzAwOwp9CgovKiBDaGlw +OiBiaWxkZXQgZGFzIHRhdHNhZWNobGljaGUgRXJzY2hlaW51bmdzYmlsZCBkZXIgTWFya2llcnVu +ZyBhYi4KICAgRGF0dW0gKyBXb2NoZW50YWcgd2llIGltIFBsYW50YWZlbC1Lb3BmIGdlc3RhcGVs +dDsgU3luYy1GbGFzaCB6ZWlndAogICBzdGF0dGRlc3NlbiBkZW4gU2NoaWNodGNvZGUtVGV4dC4g +Ki8KLmVyc2NoZWludW5nLXRhYi1jaGlwIHsKICAgIGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0 +aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNl +bnRlcjsKICAgIGdhcDogMXB4OwogICAgbWluLWhlaWdodDogNDRweDsKICAgIGJvcmRlci1yYWRp +dXM6IDVweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQpOwogICAgcGFkZGluZzogNnB4 +IDRweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7Cn0KLmVyc2NoZWludW5nLXRhYi1jaGlwLXRhZyB7 +CiAgICBmb250LXNpemU6IHZhcigtLWZzLWxnKTsgbGluZS1oZWlnaHQ6IDEuMTsKfQouZXJzY2hl +aW51bmctdGFiLWNoaXAtd3QgewogICAgZm9udC1zaXplOiAxMC41cHg7IG9wYWNpdHk6IDAuODU7 +Cn0KLmVyc2NoZWludW5nLXRhYi1jaGlwLXRleHQgewogICAgZm9udC1zaXplOiB2YXIoLS1mcy1t +ZCk7IGxldHRlci1zcGFjaW5nOiAwLjVweDsKfQoKLmVyc2NoZWludW5nLXRhYi1jaGlwW2RhdGEt +dm9yc2NoYXUta2V5PSJzb25kZXJ0YWdIaW53ZWlzIl0gewogICAgYmFja2dyb3VuZDogdmFyKC0t +bWhpbi1iZywgdmFyKC0tYmctY2FyZCkpOwogICAgY29sb3I6IHZhcigtLW1oaW4tdGV4dCwgaW5o +ZXJpdCk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1taGluLXNoYWRvdywgbm9uZSk7CiAgICBhbmlt +YXRpb246IHZhcigtLW1oaW4tYW5pbSwgbm9uZSk7Cn0KLmVyc2NoZWludW5nLXRhYi1jaGlwW2Rh +dGEtdm9yc2NoYXUta2V5PSJzb25kZXJ0YWdXYXJudW5nIl0gewogICAgYmFja2dyb3VuZDogdmFy +KC0tbXdhci1iZywgdmFyKC0tYmctY2FyZCkpOwogICAgY29sb3I6IHZhcigtLW13YXItdGV4dCwg +aW5oZXJpdCk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1td2FyLXNoYWRvdywgbm9uZSk7CiAgICBh +bmltYXRpb246IHZhcigtLW13YXItYW5pbSwgbm9uZSk7Cn0KLmVyc2NoZWludW5nLXRhYi1jaGlw +W2RhdGEtdm9yc2NoYXUta2V5PSJmZWllcnRhZ1dpY2h0aWciXSB7CiAgICBiYWNrZ3JvdW5kOiB2 +YXIoLS1tZndpLWJnLCB2YXIoLS1iZy1jYXJkKSk7CiAgICBjb2xvcjogdmFyKC0tbWZ3aS10ZXh0 +LCBpbmhlcml0KTsKICAgIGJveC1zaGFkb3c6IHZhcigtLW1md2ktc2hhZG93LCBub25lKTsKICAg +IGFuaW1hdGlvbjogdmFyKC0tbWZ3aS1hbmltLCBub25lKTsKfQouZXJzY2hlaW51bmctdGFiLWNo +aXBbZGF0YS12b3JzY2hhdS1rZXk9ImZlcmllbiJdIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1m +ZXItc3BhbHRlLWJnLCAjRTBGMEU0KTsKICAgIGNvbG9yOiB2YXIoLS1tZmVyLXRleHQsICMyNTYw +MjkpOwogICAgYm94LXNoYWRvdzogdmFyKC0tbWZlci1zaGFkb3csIG5vbmUpOwogICAgYW5pbWF0 +aW9uOiB2YXIoLS1tZmVyLWFuaW0sIG5vbmUpOwp9Ci5lcnNjaGVpbnVuZy10YWItY2hpcFtkYXRh +LXZvcnNjaGF1LWtleT0iaGV1dGVTcGFsdGUiXSB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1taGUt +YmcsIHZhcigtLWJnLWNhcmQpKTsKICAgIGNvbG9yOiB2YXIoLS1taGUtdGV4dCwgaW5oZXJpdCk7 +CiAgICBib3gtc2hhZG93OiB2YXIoLS1taGUtc2hhZG93LCBub25lKTsKICAgIGFuaW1hdGlvbjog +dmFyKC0tbWhlLWFuaW0sIG5vbmUpOwp9Ci5lcnNjaGVpbnVuZy10YWItY2hpcFtkYXRhLXZvcnNj +aGF1LWtleT0ic3luY0ZsYXNoIl0gewogICAgYmFja2dyb3VuZDogdmFyKC0tZmFyYmUtZnJ1ZWgs +ICNCNzFDMUMpOwogICAgY29sb3I6ICNmZmY7Cn0KCi5lcnNjaGVpbnVuZy10YWItbGFiZWwgewog +ICAgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAxcHg7CiAgICBs +aW5lLWhlaWdodDogMS4yOwp9Ci5lcnNjaGVpbnVuZy10YWItbGFiZWwtdG9wIHsKICAgIGZvbnQt +c2l6ZTogMTEuNXB4OyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5 +KTsKfQouZXJzY2hlaW51bmctdGFiLWxhYmVsLWJvdCB7CiAgICBmb250LXNpemU6IDEwLjVweDsg +Y29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOwp9CgouZXJzY2hlaW51bmctZWRpdG9yIHsKICAgIGJh +Y2tncm91bmQ6IHZhcigtLWJnLWNhcmQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9y +ZGVyLWxpZ2h0KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7CiAgICBwYWRk +aW5nOiAxNHB4IDE4cHg7Cn0KLmVyc2NoZWludW5nLWVkaXRvci1rb3BmIHsKICAgIG1hcmdpbi1i +b3R0b206IDEycHg7IHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4 +IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7Cn0KLmVyc2NoZWludW5nLWVkaXRvci10aXRlbHpl +aWxlIHsKICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29u +dGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogMTJweDsKfQouZXJzY2hlaW51bmctZWRpdG9y +LXRpdGVsIHsKICAgIG1hcmdpbjogMDsgZm9udC1zaXplOiAxNnB4OyBjb2xvcjogdmFyKC0tdGV4 +dC1oZWFkaW5nKTsKfQouZXJzY2hlaW51bmctZWRpdG9yLXN1YiB7CiAgICBtYXJnaW46IDJweCAw +IDA7IGZvbnQtc2l6ZTogdmFyKC0tZnMtc20pOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7Cn0K +LmVyc2NoZWludW5nLWVkaXRvci1ib2R5IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRl +bXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSk7CiAgICBnYXA6IDE2cHgg +MjJweDsKfQpAbWVkaWEgKG1heC13aWR0aDogMTIwMHB4KSB7CiAgICAuZXJzY2hlaW51bmctZWRp +dG9yLWJvZHkgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZy +KSk7IH0KfQpAbWVkaWEgKG1heC13aWR0aDogNzIwcHgpIHsKICAgIC5lcnNjaGVpbnVuZy1lZGl0 +b3ItYm9keSB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9Cn0KLmVyc2NoZWludW5nLXNl +a3Rpb24geyBtaW4td2lkdGg6IDA7IH0KLmVyc2NoZWludW5nLXNla3Rpb24tdGl0ZWwgewogICAg +bWFyZ2luOiAwIDAgOHB4OyBmb250LXNpemU6IDEwLjVweDsgZm9udC13ZWlnaHQ6IDcwMDsKICAg +IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAwLjZweDsKICAgIGNv +bG9yOiB2YXIoLS10ZXh0LW11dGVkKTsKICAgIHBhZGRpbmctYm90dG9tOiA0cHg7IGJvcmRlci1i +b3R0b206IDFweCBkYXNoZWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsKfQouZXJzY2hlaW51bmctc2Vr +dGlvbi1ncmlkIHsKICAgIGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdh +cDogOHB4Owp9Ci5lcnNjaGVpbnVuZy1mZWxkIHsKICAgIGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVt +cGxhdGUtY29sdW1uczogOTBweCAxZnI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhw +eDsgbWluLXdpZHRoOiAwOwp9Ci5lcnNjaGVpbnVuZy1mZWxkLWxhYmVsIHsKICAgIGZvbnQtc2l6 +ZTogMTEuNXB4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IGZvbnQtd2VpZ2h0OiA1MDA7Cn0K +LmVyc2NoZWludW5nLWZlbGQtY29udHJvbCB7CiAgICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVt +czogY2VudGVyOyBnYXA6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDI2cHg7IG1pbi13aWR0aDogMDsK +fQoKLyogLS0tLSBFaW5nYWJlLUtvbXBvbmVudGVuIC0tLS0gKi8KLmVyc2NoZWludW5nLWlucHV0 +IHsKICAgIHBhZGRpbmc6IDVweCA4cHg7IGZvbnQtc2l6ZTogdmFyKC0tZnMtbWQpOwogICAgYm9y +ZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIGJhY2tncm91bmQ6IHZhcigt +LWJnLWNhcmQtYWx0KTsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOwogICAgYm9yZGVy +LXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsKfQouZXJzY2hlaW51bmctaW5wdXQ6Zm9jdXMgewog +ICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWZhcmJlLWFremVudCwgIzRhOTBlMik7IG91dGxp +bmUtb2Zmc2V0OiAxcHg7Cn0KCi8qIEZhcmJwaWNrZXIgbWl0IMOXLUJ1dHRvbiAqLwouZXJzY2hl +aW51bmctZmFyYi13cmFwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczog +c3RyZXRjaDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7IGJvcmRl +ci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5lcnNj +aGVpbnVuZy1mYXJiLXdyYXAubGVlciAuZXJzY2hlaW51bmctZmFyYiB7CiAgICBvcGFjaXR5OiAw +LjM7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVn +LCB0cmFuc3BhcmVudCAwIDRweCwgcmdiYSgwLDAsMCwwLjE1KSA0cHggOHB4KTsKfQouZXJzY2hl +aW51bmctZmFyYiB7CiAgICB3aWR0aDogNDRweDsgaGVpZ2h0OiAyOHB4OyBwYWRkaW5nOiAycHg7 +IGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjdXJzb3I6IHBvaW50 +ZXI7Cn0KLmVyc2NoZWludW5nLWZhcmIteCB7CiAgICB3aWR0aDogMjJweDsgaGVpZ2h0OiAyOHB4 +OyBsaW5lLWhlaWdodDogMjZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiB2 +YXIoLS1mcy1sZyk7IGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBib3JkZXI6IG5vbmU7IGJvcmRlci1s +ZWZ0OiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIGJhY2tncm91bmQ6IHZhcigt +LWJnLWNhcmQtYWx0KTsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOwogICAgY3Vyc29yOiBwb2lu +dGVyOyBwYWRkaW5nOiAwOwp9Ci5lcnNjaGVpbnVuZy1mYXJiLXg6aG92ZXIgewogICAgYmFja2dy +b3VuZDogdmFyKC0tYmctaG92ZXIpOyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsKfQoKLyog +U2xpZGVyIG1pdCBOdW1iZXItU3BpbmJveCAqLwouZXJzY2hlaW51bmctc2xpZGVyLXdyYXAgewog +ICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IGZsZXg6IDE7 +IG1pbi13aWR0aDogMDsKfQouZXJzY2hlaW51bmctaW5wdXQtcmFuZ2UgewogICAgZmxleDogMTsg +bWluLXdpZHRoOiA2MHB4OwogICAgcGFkZGluZzogMDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7 +IGJvcmRlcjogbm9uZTsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tZmFyYmUtYWt6ZW50LCAjNGE5 +MGUyKTsKfQouZXJzY2hlaW51bmctaW5wdXQtbnVtIHsKICAgIHdpZHRoOiA1NnB4OyB0ZXh0LWFs +aWduOiByaWdodDsKfQouZXJzY2hlaW51bmctaW5wdXQtbnVtOjotd2Via2l0LWlubmVyLXNwaW4t +YnV0dG9uIHsgb3BhY2l0eTogMTsgfQouZXJzY2hlaW51bmctZWluaGVpdCB7CiAgICBmb250LXNp +emU6IHZhcigtLWZzLXNtKTsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBtaW4td2lkdGg6IDE4 +cHg7Cn0KCi8qIFRvZ2dsZS1Td2l0Y2ggKHN0YXR0IENoZWNrYm94KSAqLwouZXJzY2hlaW51bmct +dG9nZ2xlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBn +YXA6IDEwcHg7IGN1cnNvcjogcG9pbnRlcjsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9Ci5lcnNj +aGVpbnVuZy10b2dnbGUgaW5wdXQgeyBkaXNwbGF5OiBub25lOyB9Ci5lcnNjaGVpbnVuZy10b2dn +bGUtcmFpbCB7CiAgICB3aWR0aDogMzZweDsgaGVpZ2h0OiAyMHB4OyBib3JkZXItcmFkaXVzOiB2 +YXIoLS1yYWRpdXMtbGcpOwogICAgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWNvbG9yKTsgcG9z +aXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsKfQouZXJz +Y2hlaW51bmctdG9nZ2xlLXJhaWw6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcnOyBwb3NpdGlvbjog +YWJzb2x1dGU7CiAgICB0b3A6IDJweDsgbGVmdDogMnB4OyB3aWR0aDogMTZweDsgaGVpZ2h0OiAx +NnB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOyBiYWNrZ3JvdW5kOiAjZmZmOwogICAgdHJhbnNp +dGlvbjogbGVmdCAwLjE1czsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAu +Myk7Cn0KLmVyc2NoZWludW5nLXRvZ2dsZSBpbnB1dDpjaGVja2VkICsgLmVyc2NoZWludW5nLXRv +Z2dsZS1yYWlsIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWZhcmJlLWVyZm9sZywgIzI3ODk2RCk7 +Cn0KLmVyc2NoZWludW5nLXRvZ2dsZSBpbnB1dDpjaGVja2VkICsgLmVyc2NoZWludW5nLXRvZ2ds +ZS1yYWlsOjphZnRlciB7CiAgICBsZWZ0OiAxOHB4Owp9Ci5lcnNjaGVpbnVuZy10b2dnbGUtbGFi +ZWwgewogICAgZm9udC1zaXplOiB2YXIoLS1mcy1iYXNlKTsgY29sb3I6IHZhcigtLXRleHQtbXV0 +ZWQpOwp9CgovKiAtLS0tIFN0aWNreSBGb290ZXIgLS0tLSAqLwouZXJzY2hlaW51bmctZm9vdGVy +IHsKICAgIHBvc2l0aW9uOiBzdGlja3k7IGJvdHRvbTogMDsgei1pbmRleDogNTsKICAgIG1hcmdp +bjogMTBweCAtMjBweCAtMjBweDsgIC8qIGluIGRlbiBhZG1pbi10YWItUGFkZGluZy1CZXJlaWNo +IHZlcmxhZW5nZXJuICovCiAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgIGJhY2tncm91bmQ6IHZh +cigtLWJnLWNhcmQpOwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdo +dCk7CiAgICBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1 +dG87CiAgICBnYXA6IDE0cHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KLmVyc2NoZWludW5nLWZv +b3Rlci1pbmZvIHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tZnMtc20pOyBjb2xvcjogdmFyKC0tdGV4 +dC1tdXRlZCk7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCgoKLyogPT09PT0gTWVpbiBTY2hp +Y2h0LVRlYW0g4oCUIDE0LVRhZ2UtTW9kYWwgKHNjaGljaHR0ZWFtLmpzKSA9PT09PSAqLwouc3Qt +a29wZmluZm8gewogICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZmxleC13 +cmFwOiB3cmFwOyBnYXA6IDhweCAxNHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTJweDsKfQouc3Qt +YmFkZ2UgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAzcHggMTJweDsgYm9y +ZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsKICAgIGZvbnQtc2l6ZTogdmFyKC0tZnMtYmFz +ZSk7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAjZmZmOyBsZXR0ZXItc3BhY2luZzogMC4zcHg7 +Cn0KLnN0LWJhZGdlLUYgeyBiYWNrZ3JvdW5kOiAjQzc3ODAwOyB9ICAgLyogRnLDvGhkaWVuc3Qg +Ki8KLnN0LWJhZGdlLVMgeyBiYWNrZ3JvdW5kOiAjMTU2NUMwOyB9ICAgLyogU3DDpHRkaWVuc3Qg +Ki8KLnN0LWJhZGdlLU4geyBiYWNrZ3JvdW5kOiAjM0YzRDhBOyB9ICAgLyogTmFjaHRkaWVuc3Qg +Ki8KLnN0LXplaXRyYXVtIHsgZm9udC1zaXplOiB2YXIoLS1mcy1tZCk7IGNvbG9yOiB2YXIoLS10 +ZXh0LWhlYWRpbmcpOyBmb250LXdlaWdodDogNjAwOyB9Ci5zdC1oaW53ZWlzICB7IGZvbnQtc2l6 +ZTogdmFyKC0tZnMtc20pOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IH0KCi5zdC1zY3JvbGwg +eyBtYXgtaGVpZ2h0OiA2MnZoOyBvdmVyZmxvdzogYXV0bzsgYm9yZGVyOiAxcHggc29saWQgdmFy +KC0tYm9yZGVyLWxpZ2h0KTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNtKTsgfQouc3Qt +dGFiZWxsZSB7IGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7IGJvcmRlci1zcGFjaW5nOiAwOyBm +b250LXNpemU6IHZhcigtLWZzLWJhc2UpOyB3aWR0aDogbWF4LWNvbnRlbnQ7IG1pbi13aWR0aDog +MTAwJTsgfQouc3QtdGFiZWxsZSB0aCwgLnN0LXRhYmVsbGUgdGQgeyBib3JkZXItcmlnaHQ6IDFw +eCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFy +KC0tYm9yZGVyLWxpZ2h0KTsgfQoKLyogS29wZnplaWxlIHN0aWNreSBvYmVuICovCi5zdC10YWJl +bGxlIHRoZWFkIHRoIHsgcG9zaXRpb246IHN0aWNreTsgdG9wOiAwOyB6LWluZGV4OiAyOyBiYWNr +Z3JvdW5kOiB2YXIoLS1iZy10b29sYmFyKTsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IHBh +ZGRpbmc6IDRweCAycHg7IH0KLnN0LXRoLXRhZyB7IG1pbi13aWR0aDogMzhweDsgdGV4dC1hbGln +bjogY2VudGVyOyB9Ci5zdC10aC1kYXR1bSB7IGZvbnQtc2l6ZTogdmFyKC0tZnMtc20pOyBmb250 +LXdlaWdodDogNzAwOyB9Ci5zdC10aC13dGFnICB7IGZvbnQtc2l6ZTogdmFyKC0tZnMteHMpOyBj +b2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IH0KCi8qIE5hbWVuc3NwYWx0ZSBzdGlja3kgbGlua3Mg +KGF1Y2ggaW0gS29wZiAtPiB6LWluZGV4IDMpICovCi5zdC10aC1uYW1lIHsgcG9zaXRpb246IHN0 +aWNreTsgbGVmdDogMDsgei1pbmRleDogMzsgdGV4dC1hbGlnbjogbGVmdDsgbWluLXdpZHRoOiAx +NzBweDsgcGFkZGluZy1sZWZ0OiA4cHg7IH0KLnN0LXRkLW5hbWUgeyBwb3NpdGlvbjogc3RpY2t5 +OyBsZWZ0OiAwOyB6LWluZGV4OiAxOyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkKTsgbWluLXdp +ZHRoOiAxNzBweDsgcGFkZGluZzogMnB4IDhweDsgfQouc3QtcGVyc29uIHsgZGlzcGxheTogZmxl +eDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA3cHg7IH0KLnN0LXBlcnNvbi1uYW1lIHsgZm9u +dC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLXRleHQtaGVhZGluZyk7IGxpbmUtaGVpZ2h0OiAx +LjE7IH0KLnN0LXBlcnNvbi1tZXRhIHsgZm9udC1zaXplOiB2YXIoLS1mcy14cyk7IGNvbG9yOiB2 +YXIoLS10ZXh0LW11dGVkKTsgbGluZS1oZWlnaHQ6IDEuMTsgfQoKLnN0LXRkLXRhZyB7IHRleHQt +YWxpZ246IGNlbnRlcjsgcGFkZGluZzogM3B4IDJweDsgbWluLXdpZHRoOiAzOHB4OyBmb250LXdl +aWdodDogNjAwOyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsgfQouc3Qtd2UgeyBiYWNrZ3Jv +dW5kOiAjRURGMkY4OyB9CltkYXRhLXRoZW1lPSJuaWdodCJdIC5zdC13ZSB7IGJhY2tncm91bmQ6 +ICMxRjJBMzg7IH0KCi8qIEVpZ2VuZSBaZWlsZSBoZXJ2b3JoZWJlbiAqLwouc3QtemVpbGUtaWNo +IC5zdC10ZC1uYW1lIHsgYm94LXNoYWRvdzogaW5zZXQgM3B4IDAgMCB2YXIoLS1iZy1wcmltYXJ5 +KTsgfQouc3QtemVpbGUtaWNoIC5zdC10ZC1uYW1lLCAuc3QtemVpbGUtaWNoIC5zdC10ZC10YWc6 +bm90KFtzdHlsZV0pIHsgYmFja2dyb3VuZDogdmFyKC0tYmctaG92ZXIpOyB9Cg== ### FILE: sync-check.html | 4249 PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVU Ri04Ij4KPHRpdGxlPlZJMyBTeW5jLUNoZWNrPC90aXRsZT4KPHN0eWxlPgogIGJvZHkgeyBmb250