ClIgdmVyc2lvbiAzLjYuMiBQYXRjaGVkICgyMDIwLTAyLTEyIHI3Nzc5NSkgLS0gIkRhcmsgYW5kIFN0b3JteSBOaWdodCIKQ29weXJpZ2h0IChDKSAyMDIwIFRoZSBSIEZvdW5kYXRpb24gZm9yIFN0YXRpc3RpY2FsIENvbXB1dGluZwpQbGF0Zm9ybTogeDg2XzY0LXBjLWxpbnV4LWdudSAoNjQtYml0KQoKUiBpcyBmcmVlIHNvZnR3YXJlIGFuZCBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCllvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgpUeXBlICdsaWNlbnNlKCknIG9yICdsaWNlbmNlKCknIGZvciBkaXN0cmlidXRpb24gZGV0YWlscy4KClIgaXMgYSBjb2xsYWJvcmF0aXZlIHByb2plY3Qgd2l0aCBtYW55IGNvbnRyaWJ1dG9ycy4KVHlwZSAnY29udHJpYnV0b3JzKCknIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZAonY2l0YXRpb24oKScgb24gaG93IHRvIGNpdGUgUiBvciBSIHBhY2thZ2VzIGluIHB1YmxpY2F0aW9ucy4KClR5cGUgJ2RlbW8oKScgZm9yIHNvbWUgZGVtb3MsICdoZWxwKCknIGZvciBvbi1saW5lIGhlbHAsIG9yCidoZWxwLnN0YXJ0KCknIGZvciBhbiBIVE1MIGJyb3dzZXIgaW50ZXJmYWNlIHRvIGhlbHAuClR5cGUgJ3EoKScgdG8gcXVpdCBSLgoKPiAjIyBSZWdyZXNzaW9uIHRlc3RzIGZvciB3aGljaCB0aGUgcHJpbnRlZCBvdXRwdXQgaXMgdGhlIGlzc3VlCj4gIyMjIF9hbmRfIG11c3Qgd29yayAobm8gUmVjb21tZW5kZWQgcGFja2FnZXMsIHBsZWFzZSkKPiAKPiBwZGYoInJlZy10ZXN0cy0yLnBkZiIsIGVuY29kaW5nID0gIklTT0xhdGluMS5lbmMiKQo+IAo+ICMjIGZvcmNlIHN0YW5kYXJkIGhhbmRsaW5nIGZvciBkYXRhIGZyYW1lcwo+IG9wdGlvbnMoc3RyaW5nc0FzRmFjdG9ycz1UUlVFKQo+IG9wdGlvbnModXNlRmFuY3lRdW90ZXM9RkFMU0UpCj4gCj4gIyMjIG1vdmVkIGZyb20gdmFyaW91cyAuUmQgZmlsZXMKPiAjIyBhYmJyZXZpYXRlCj4gZm9yKG0gaW4gMTo1KSB7CisgICBjYXQoIlxuIixtLCI6XG4iKQorICAgcHJpbnQoYXMudmVjdG9yKGFiYnJldmlhdGUoc3RhdGUubmFtZSwgbWlubD1tKSkpCisgfQoKIDEgOgogWzFdICJBbGIiICAiQWxzIiAgIkFyeiIgICJBcmsiICAiQ2xmIiAgIkNsciIgICJDbiIgICAiRCIgICAgIkYiICAgICJHIiAgIApbMTFdICJIIiAgICAiSWQiICAgIklsIiAgICJJbiIgICAiSXciICAgIktucyIgICJLbnQiICAiTCIgICAgIk1hbiIgICJNciIgIApbMjFdICJNc3NjIiAiTWMiICAgIk1ubiIgICJNc3NzIiAiTXNzciIgIk1udCIgICJOYiIgICAiTnYiICAgIk5IIiAgICJOSiIgIApbMzFdICJOTSIgICAiTlkiICAgIk5DIiAgICJORCIgICAiT2giICAgIk9rIiAgICJPciIgICAiUCIgICAgIlJJIiAgICJTQyIgIApbNDFdICJTRCIgICAiVG4iICAgIlR4IiAgICJVIiAgICAiVnJtIiAgIlZyZyIgICJXc2giICAiV1YiICAgIldzYyIgICJXeSIgIAoKIDIgOgogWzFdICJBbGIiICAiQWxzIiAgIkFyeiIgICJBcmsiICAiQ2xmIiAgIkNsciIgICJDbiIgICAiRGwiICAgIkZsIiAgICJHciIgIApbMTFdICJIdyIgICAiSWQiICAgIklsIiAgICJJbiIgICAiSXciICAgIktucyIgICJLbnQiICAiTHMiICAgIk1hbiIgICJNciIgIApbMjFdICJNc3NjIiAiTWMiICAgIk1ubiIgICJNc3NzIiAiTXNzciIgIk1udCIgICJOYiIgICAiTnYiICAgIk5IIiAgICJOSiIgIApbMzFdICJOTSIgICAiTlkiICAgIk5DIiAgICJORCIgICAiT2giICAgIk9rIiAgICJPciIgICAiUG4iICAgIlJJIiAgICJTQyIgIApbNDFdICJTRCIgICAiVG4iICAgIlR4IiAgICJVdCIgICAiVnJtIiAgIlZyZyIgICJXc2giICAiV1YiICAgIldzYyIgICJXeSIgIAoKIDMgOgogWzFdICJBbGIiICAiQWxzIiAgIkFyeiIgICJBcmsiICAiQ2xmIiAgIkNsciIgICJDbm4iICAiRGx3IiAgIkZsciIgICJHcmciIApbMTFdICJIYXciICAiSWRoIiAgIklsbCIgICJJbmQiICAiSW93IiAgIktucyIgICJLbnQiICAiTHNuIiAgIk1hbiIgICJNcnkiIApbMjFdICJNc3NjIiAiTWNoIiAgIk1ubiIgICJNc3NzIiAiTXNzciIgIk1udCIgICJOYnIiICAiTnZkIiAgIk53SCIgICJOd0oiIApbMzFdICJOd00iICAiTndZIiAgIk5yQyIgICJOckQiICAiT2hpIiAgIk9rbCIgICJPcmciICAiUG5uIiAgIlJoSSIgICJTdEMiIApbNDFdICJTdEQiICAiVG5uIiAgIlR4cyIgICJVdGgiICAiVnJtIiAgIlZyZyIgICJXc2giICAiV3NWIiAgIldzYyIgICJXeW0iIAoKIDQgOgogWzFdICJBbGJtIiAiQWxzayIgIkFyem4iICJBcmtuIiAiQ2xmciIgIkNscmQiICJDbm5jIiAiRGx3ciIgIkZscmQiICJHZXJnIgpbMTFdICJIYXdhIiAiSWRhaCIgIklsbG4iICJJbmRuIiAiSW93YSIgIktuc3MiICJLbnRjIiAiTG9zbiIgIk1haW4iICJNcnlsIgpbMjFdICJNc3NjIiAiTWNoZyIgIk1ubnMiICJNc3NzIiAiTXNzciIgIk1udG4iICJOYnJzIiAiTmV2ZCIgIk53SG0iICJOd0pyIgpbMzFdICJOd014IiAiTndZciIgIk5ydEMiICJOcnREIiAiT2hpbyIgIk9rbGgiICJPcmduIiAiUG5ucyIgIlJoZEkiICJTdGhDIgpbNDFdICJTdGhEIiAiVG5ucyIgIlRleHMiICJVdGFoIiAiVnJtbiIgIlZyZ24iICJXc2huIiAiV3N0ViIgIldzY24iICJXeW1uIgoKIDUgOgogWzFdICJBbGFibSIgIkFsYXNrIiAiQXJpem4iICJBcmtucyIgIkNsZnJuIiAiQ29scmQiICJDbm5jdCIgIkRlbHdyIiAiRmxvcmQiClsxMF0gIkdlb3JnIiAiSGF3YWkiICJJZGFobyIgIklsbG5zIiAiSW5kaW4iICJJb3dhIiAgIkthbnNzIiAiS250Y2siICJMb3VzbiIKWzE5XSAiTWFpbmUiICJNcnlsbiIgIk1zc2NoIiAiTWNoZ24iICJNbm5zdCIgIk1zc3NzIiAiTWlzc3IiICJNb250biIgIk5icnNrIgpbMjhdICJOZXZhZCIgIk53SG1wIiAiTndKcnMiICJOd014YyIgIk53WXJrIiAiTnJ0aEMiICJOcnRoRCIgIk9oaW8iICAiT2tsaG0iClszN10gIk9yZWduIiAiUG5uc3kiICJSaGRJcyIgIlN0aENyIiAiU3RoRGsiICJUbm5zcyIgIlRleGFzIiAiVXRhaCIgICJWcm1udCIKWzQ2XSAiVmlyZ24iICJXc2huZyIgIldzdFZyIiAiV3NjbnMiICJXeW1uZyIKPiAKPiAjIyBhcHBseQo+IHggPC0gY2JpbmQoeDEgPSAzLCB4MiA9IGMoNDoxLCAyOjUpKQo+IGRpbW5hbWVzKHgpW1sxXV0gPC0gbGV0dGVyc1sxOjhdCj4gYXBwbHkoeCwgIDIsIHN1bW1hcnkpICMgNiB4IG4gbWF0cml4CiAgICAgICAgeDEgeDIKTWluLiAgICAgMyAgMQoxc3QgUXUuICAzICAyCk1lZGlhbiAgIDMgIDMKTWVhbiAgICAgMyAgMwozcmQgUXUuICAzICA0Ck1heC4gICAgIDMgIDUKPiBhcHBseSh4LCAgMSwgcXVhbnRpbGUpIyA1IHggbiBtYXRyaXgKICAgICAgICBhIGIgICAgYyAgIGQgICAgZSBmICAgIGcgICBoCjAlICAgMy4wMCAzIDIuMDAgMS4wIDIuMDAgMyAzLjAwIDMuMAoyNSUgIDMuMjUgMyAyLjI1IDEuNSAyLjI1IDMgMy4yNSAzLjUKNTAlICAzLjUwIDMgMi41MCAyLjAgMi41MCAzIDMuNTAgNC4wCjc1JSAgMy43NSAzIDIuNzUgMi41IDIuNzUgMyAzLjc1IDQuNQoxMDAlIDQuMDAgMyAzLjAwIDMuMCAzLjAwIDMgNC4wMCA1LjAKPiAKPiBkLmFyciA8LSAyOjUKPiBhcnIgPC0gYXJyYXkoMTpwcm9kKGQuYXJyKSwgZC5hcnIsCisgICAgICAgICAgbGlzdChOVUxMLGxldHRlcnNbMTpkLmFyclsyXV0sTlVMTCxwYXN0ZSgiViIsNCsxOmQuYXJyWzRdLHNlcD0iIikpKQo+IGFhIDwtIGFycmF5KDE6MjAsYygyLDIsNSkpCj4gc3RyKGFwcGx5KGFhW0ZBTFNFLCwsZHJvcD1GQUxTRV0sIDEsIGRpbSkpIyBlbXB0eSBpbnRlZ2VyLCBgaW5jb3JyZWN0JyBkaW0uCiBpbnQoMCkgCj4gc3RvcGlmbm90KAorICAgICAgICBhcHBseShhcnIsIDE6Miwgc3VtKSA9PSB0KGFwcGx5KGFyciwgMjoxLCBzdW0pKSwKKyAgICAgICAgYWEgPT0gYXBwbHkoYWEsMjozLGZ1bmN0aW9uKHgpIHgpLAorICAgICAgICBhbGwuZXF1YWwoYXBwbHkoYXBwbHkoYWEsMjozLCBzdW0pLDIsc3VtKSwKKyAgICAgICAgICAgICAgICAgIDEwKzE2KjA6NCwgdG9sZXJhbmNlID0gNCouTWFjaGluZSRkb3VibGUuZXBzKQorICkKPiBtYXJnIDwtIGxpc3QoMToyLCAyOjMsIGMoMiw0KSwgYygxLDMpLCAyOjQsIDE6MywgMTo0KQo+IGZvcihtIGluIG1hcmcpIHByaW50KGFwcGx5KGFyciwgcHJpbnQobSksIHN1bSkpClsxXSAxIDIKICAgICAgICBhICAgIGIgICAgYwpbMSxdIDExNjAgMTIwMCAxMjQwClsyLF0gMTE4MCAxMjIwIDEyNjAKWzFdIDIgMwogIFssMV0gWywyXSBbLDNdIFssNF0KYSAgNDk1ICA1NTUgIDYxNSAgNjc1CmIgIDUxNSAgNTc1ICA2MzUgIDY5NQpjICA1MzUgIDU5NSAgNjU1ICA3MTUKWzFdIDIgNAogICBWNSAgVjYgIFY3ICBWOCAgVjkKYSAgODQgMjc2IDQ2OCA2NjAgODUyCmIgMTAwIDI5MiA0ODQgNjc2IDg2OApjIDExNiAzMDggNTAwIDY5MiA4ODQKWzFdIDEgMwogICAgIFssMV0gWywyXSBbLDNdIFssNF0KWzEsXSAgNzY1ICA4NTUgIDk0NSAxMDM1ClsyLF0gIDc4MCAgODcwICA5NjAgMTA1MApbMV0gMiAzIDQKLCAsIFY1CgogIFssMV0gWywyXSBbLDNdIFssNF0KYSAgICAzICAgMTUgICAyNyAgIDM5CmIgICAgNyAgIDE5ICAgMzEgICA0MwpjICAgMTEgICAyMyAgIDM1ICAgNDcKCiwgLCBWNgoKICBbLDFdIFssMl0gWywzXSBbLDRdCmEgICA1MSAgIDYzICAgNzUgICA4NwpiICAgNTUgICA2NyAgIDc5ICAgOTEKYyAgIDU5ICAgNzEgICA4MyAgIDk1CgosICwgVjcKCiAgWywxXSBbLDJdIFssM10gWyw0XQphICAgOTkgIDExMSAgMTIzICAxMzUKYiAgMTAzICAxMTUgIDEyNyAgMTM5CmMgIDEwNyAgMTE5ICAxMzEgIDE0MwoKLCAsIFY4CgogIFssMV0gWywyXSBbLDNdIFssNF0KYSAgMTQ3ICAxNTkgIDE3MSAgMTgzCmIgIDE1MSAgMTYzICAxNzUgIDE4NwpjICAxNTUgIDE2NyAgMTc5ICAxOTEKCiwgLCBWOQoKICBbLDFdIFssMl0gWywzXSBbLDRdCmEgIDE5NSAgMjA3ICAyMTkgIDIzMQpiICAxOTkgIDIxMSAgMjIzICAyMzUKYyAgMjAzICAyMTUgIDIyNyAgMjM5CgpbMV0gMSAyIDMKLCAsIDEKCiAgICAgICBhICAgYiAgIGMKWzEsXSAyNDUgMjU1IDI2NQpbMixdIDI1MCAyNjAgMjcwCgosICwgMgoKICAgICAgIGEgICBiICAgYwpbMSxdIDI3NSAyODUgMjk1ClsyLF0gMjgwIDI5MCAzMDAKCiwgLCAzCgogICAgICAgYSAgIGIgICBjClsxLF0gMzA1IDMxNSAzMjUKWzIsXSAzMTAgMzIwIDMzMAoKLCAsIDQKCiAgICAgICBhICAgYiAgIGMKWzEsXSAzMzUgMzQ1IDM1NQpbMixdIDM0MCAzNTAgMzYwCgpbMV0gMSAyIDMgNAosICwgMSwgVjUKCiAgICAgYSBiIGMKWzEsXSAxIDMgNQpbMixdIDIgNCA2CgosICwgMiwgVjUKCiAgICAgYSAgYiAgYwpbMSxdIDcgIDkgMTEKWzIsXSA4IDEwIDEyCgosICwgMywgVjUKCiAgICAgIGEgIGIgIGMKWzEsXSAxMyAxNSAxNwpbMixdIDE0IDE2IDE4CgosICwgNCwgVjUKCiAgICAgIGEgIGIgIGMKWzEsXSAxOSAyMSAyMwpbMixdIDIwIDIyIDI0CgosICwgMSwgVjYKCiAgICAgIGEgIGIgIGMKWzEsXSAyNSAyNyAyOQpbMixdIDI2IDI4IDMwCgosICwgMiwgVjYKCiAgICAgIGEgIGIgIGMKWzEsXSAzMSAzMyAzNQpbMixdIDMyIDM0IDM2CgosICwgMywgVjYKCiAgICAgIGEgIGIgIGMKWzEsXSAzNyAzOSA0MQpbMixdIDM4IDQwIDQyCgosICwgNCwgVjYKCiAgICAgIGEgIGIgIGMKWzEsXSA0MyA0NSA0NwpbMixdIDQ0IDQ2IDQ4CgosICwgMSwgVjcKCiAgICAgIGEgIGIgIGMKWzEsXSA0OSA1MSA1MwpbMixdIDUwIDUyIDU0CgosICwgMiwgVjcKCiAgICAgIGEgIGIgIGMKWzEsXSA1NSA1NyA1OQpbMixdIDU2IDU4IDYwCgosICwgMywgVjcKCiAgICAgIGEgIGIgIGMKWzEsXSA2MSA2MyA2NQpbMixdIDYyIDY0IDY2CgosICwgNCwgVjcKCiAgICAgIGEgIGIgIGMKWzEsXSA2NyA2OSA3MQpbMixdIDY4IDcwIDcyCgosICwgMSwgVjgKCiAgICAgIGEgIGIgIGMKWzEsXSA3MyA3NSA3NwpbMixdIDc0IDc2IDc4CgosICwgMiwgVjgKCiAgICAgIGEgIGIgIGMKWzEsXSA3OSA4MSA4MwpbMixdIDgwIDgyIDg0CgosICwgMywgVjgKCiAgICAgIGEgIGIgIGMKWzEsXSA4NSA4NyA4OQpbMixdIDg2IDg4IDkwCgosICwgNCwgVjgKCiAgICAgIGEgIGIgIGMKWzEsXSA5MSA5MyA5NQpbMixdIDkyIDk0IDk2CgosICwgMSwgVjkKCiAgICAgIGEgICBiICAgYwpbMSxdIDk3ICA5OSAxMDEKWzIsXSA5OCAxMDAgMTAyCgosICwgMiwgVjkKCiAgICAgICBhICAgYiAgIGMKWzEsXSAxMDMgMTA1IDEwNwpbMixdIDEwNCAxMDYgMTA4CgosICwgMywgVjkKCiAgICAgICBhICAgYiAgIGMKWzEsXSAxMDkgMTExIDExMwpbMixdIDExMCAxMTIgMTE0CgosICwgNCwgVjkKCiAgICAgICBhICAgYiAgIGMKWzEsXSAxMTUgMTE3IDExOQpbMixdIDExNiAxMTggMTIwCgo+IGZvcihtIGluIG1hcmcpICMjIDc1JSBvZiB0aGUgdGltZSBoZXJlIHdhcyBzcGVudCBvbiB0aGUgbmFtZXMKKyAgIHByaW50KGRpbShhcHBseShhcnIsIHByaW50KG0pLCBxdWFudGlsZSwgbmFtZXM9RkFMU0UpKSA9PSBjKDUsZC5hcnJbbV0pKQpbMV0gMSAyClsxXSBUUlVFIFRSVUUgVFJVRQpbMV0gMiAzClsxXSBUUlVFIFRSVUUgVFJVRQpbMV0gMiA0ClsxXSBUUlVFIFRSVUUgVFJVRQpbMV0gMSAzClsxXSBUUlVFIFRSVUUgVFJVRQpbMV0gMiAzIDQKWzFdIFRSVUUgVFJVRSBUUlVFIFRSVUUKWzFdIDEgMiAzClsxXSBUUlVFIFRSVUUgVFJVRSBUUlVFClsxXSAxIDIgMyA0ClsxXSBUUlVFIFRSVUUgVFJVRSBUUlVFIFRSVUUKPiAKPiAjIyBCZXNzZWwKPiBudXMgPC0gYygwOjUsMTAsMjApCj4gCj4geDAgPC0gMl4oLTIwOjEwKQo+IHBsb3QoeDAseDAsIGxvZz0neHknLCB5bGFiPSIiLCB5bGltPWMoLjEsMWU2MCksdHlwZT0nbicsCisgICAgICBtYWluID0gIkJlc3NlbCBGdW5jdGlvbnMgLVlfbnUoeCkgIG5lYXIgMFxuIGxvZyAtIGxvZyAgc2NhbGUiKQo+IGZvcihudSBpbiBzb3J0KGMobnVzLG51cysuNSkpKSBsaW5lcyh4MCwgLWJlc3NlbFkoeDAsbnU9bnUpLCBjb2wgPSBudSsyKQo+IGxlZ2VuZCgzLDFlNTAsIGxlZz1wYXN0ZSgibnU9IiwgcGFzdGUobnVzLG51cysuNSwgc2VwPSIsIikpLCBjb2w9bnVzKzIsIGx3ZD0xKQo+IAo+IHggPC0gc2VxKDMsNTAwKTt5bCA8LSBjKC0uMywgLjIpCj4gcGxvdCh4LHgsIHlsaW0gPSB5bCwgeWxhYj0iIix0eXBlPSduJywgbWFpbiA9ICJCZXNzZWwgRnVuY3Rpb25zICBZX251KHgpIikKPiBmb3IobnUgaW4gbnVzKXt4eCA8LSB4W3ggPiAuNipudV07IGxpbmVzKHh4LGJlc3NlbFkoeHgsbnU9bnUpLCBjb2wgPSBudSsyKX0KPiBsZWdlbmQoMzAwLC0uMDgsIGxlZz1wYXN0ZSgibnU9IixudXMpLCBjb2wgPSBudXMrMiwgbHdkPTEpCj4gCj4geCA8LSBzZXEoMTAsNTAwMDAsYnk9MTApO3lsIDwtIGMoLS4xLCAuMSkKPiBwbG90KHgseCwgeWxpbSA9IHlsLCB5bGFiPSIiLHR5cGU9J24nLCBtYWluID0gIkJlc3NlbCBGdW5jdGlvbnMgIFlfbnUoeCkiKQo+IGZvcihudSBpbiBudXMpe3h4IDwtIHhbeCA+IC42Km51XTsgbGluZXMoeHgsYmVzc2VsWSh4eCxudT1udSksIGNvbCA9IG51KzIpfQo+IHN1bW1hcnkoYlkgPC0gYmVzc2VsWSgyLG51ID0gbnUgPC0gc2VxKDAsMTAwLGxlbj01MDEpKSkKICAgICAgIE1pbi4gICAgIDFzdCBRdS4gICAgICBNZWRpYW4gICAgICAgIE1lYW4gICAgIDNyZCBRdS4gICAgICAgIE1heC4gCi0zLjAwMWUrMTU1IC0xLjA2N2UrMTA3ICAtMS45NzZlKzYyIC05Ljk2MWUrMTUyICAtMi4wNTllKzIzICAgMS4wMDBlKzAwIAo+IHdoaWNoKGJZID49IDApClsxXSAxIDIgMyA0IDUKPiBzdW1tYXJ5KGJZIDwtIGJlc3NlbFkoMixudSA9IG51IDwtIHNlcSgzLDMwMCxsZW49NTEpKSkKICAgICAgIE1pbi4gICAgIDFzdCBRdS4gICAgICBNZWRpYW4gICAgICAgIE1lYW4gICAgIDNyZCBRdS4gICAgICAgIE1heC4gCiAgICAgICAtSW5mICAgICAgICAtSW5mIC0yLjI0OGUrMjYzICAgICAgICAtSW5mIC0zLjc3N2UrMTE2ICAtMS4wMDBlKzAwIApUaGVyZSB3ZXJlIDIyIHdhcm5pbmdzICh1c2Ugd2FybmluZ3MoKSB0byBzZWUgdGhlbSkKPiBzdW1tYXJ5KGJJIDwtIGJlc3NlbEkoeCA9IHggPC0gMTA6NzAwLCAxKSkKICAgICAgTWluLiAgICAxc3QgUXUuICAgICBNZWRpYW4gICAgICAgTWVhbiAgICAzcmQgUXUuICAgICAgIE1heC4gCiAyLjY3MWUrMDMgIDYuMDI2ZSs3NyAzLjE2MWUrMTUyIDMuNTAxZSsyOTkgMi40MDllKzIyNyAxLjUyOWUrMzAyIAo+ICMjIGVuZCBvZiBtb3ZlZCBmcm9tIEJlc3NlbC5SZAo+IAo+ICMjIGRhdGEuZnJhbWUKPiBzZXQuc2VlZCgxMjMpCj4gTDMgPC0gTEVUVEVSU1sxOjNdCj4gZCA8LSBkYXRhLmZyYW1lKGNiaW5kKHg9MSwgeT0xOjEwKSwgZmFjID0gc2FtcGxlKEwzLCAxMCwgcmVwbGFjZT1UUlVFKSkKPiBzdHIoZCkKJ2RhdGEuZnJhbWUnOgkxMCBvYnMuIG9mICAzIHZhcmlhYmxlczoKICQgeCAgOiBudW0gIDEgMSAxIDEgMSAxIDEgMSAxIDEKICQgeSAgOiBudW0gIDEgMiAzIDQgNSA2IDcgOCA5IDEwCiAkIGZhYzogRmFjdG9yIHcvIDMgbGV2ZWxzICJBIiwiQiIsIkMiOiAzIDMgMyAyIDMgMiAyIDIgMyAxCj4gKGQwICA8LSBkWywgRkFMU0VdKSAjIE5VTEwgZGF0YWZyYW1lIHdpdGggMTAgcm93cwpkYXRhIGZyYW1lIHdpdGggMCBjb2x1bW5zIGFuZCAxMCByb3dzCj4gKGQuMCA8LSBkW0ZBTFNFLCBdKSAjIDwwIHJvd3M+IGRhdGFmcmFtZSAgKDMgY29scykKWzFdIHggICB5ICAgZmFjCjwwIHJvd3M+IChvciAwLWxlbmd0aCByb3cubmFtZXMpCj4gKGQwMCA8LSBkMFtGQUxTRSxdKSAjIE5VTEwgZGF0YWZyYW1lIHdpdGggMCByb3dzCmRhdGEgZnJhbWUgd2l0aCAwIGNvbHVtbnMgYW5kIDAgcm93cwo+IHN0b3BpZm5vdChpZGVudGljYWwoZCwgY2JpbmQoZCwgZDApKSwKKyAgICAgICAgICAgaWRlbnRpY2FsKGQsIGNiaW5kKGQwLCBkKSkpCj4gc3RvcGlmbm90KGlkZW50aWNhbChkLCByYmluZChkLGQuMCkpLAorICAgICAgICAgICBpZGVudGljYWwoZCwgcmJpbmQoZC4wLGQpKSwKKyAgICAgICAgICAgaWRlbnRpY2FsKGQsIHJiaW5kKGQwMCxkKSksCisgICAgICAgICAgIGlkZW50aWNhbChkLCByYmluZChkLGQwMCkpKQo+ICMjIENvbW1lbnRzOiBmYWlsZWQgYmVmb3JlIHZlci4gMS40LjAKPiAKPiAjIyBkaWFnCj4gZGlhZyhhcnJheSgxOjQsIGRpbT01KSkKICAgICBbLDFdIFssMl0gWywzXSBbLDRdIFssNV0KWzEsXSAgICAxICAgIDAgICAgMCAgICAwICAgIDAKWzIsXSAgICAwICAgIDIgICAgMCAgICAwICAgIDAKWzMsXSAgICAwICAgIDAgICAgMyAgICAwICAgIDAKWzQsXSAgICAwICAgIDAgICAgMCAgICA0ICAgIDAKWzUsXSAgICAwICAgIDAgICAgMCAgICAwICAgIDEKPiAjIyB0ZXN0IGJlaGF2aW91ciB3aXRoIDAgcm93cyBvciBjb2x1bW5zCj4gZGlhZygwKQo8MCB4IDAgbWF0cml4Pgo+IHogPC0gbWF0cml4KDAsIDAsIDQpCj4gZGlhZyh6KQpudW1lcmljKDApCj4gZGlhZyh6KSA8LSBudW1lcmljKDApCj4gegogICAgIFssMV0gWywyXSBbLDNdIFssNF0KPiAjIyBlbmQgb2YgbW92ZWQgZnJvbSBkaWFnLlJkCj4gCj4gIyMgZm9ybWF0Cj4gIyMgaGFuZGxpbmcgb2YgcXVvdGVzCj4genogPC0gZGF0YS5mcmFtZShhPUkoImFiYyIpLCBiPUkoImRlZlwiZ2giKSkKPiBmb3JtYXQoenopCiAgICBhICAgICAgYgoxIGFiYyBkZWYiZ2gKPiAjIyAiIChFIGZvbnRpZmljYXRpb24pCj4gCj4gIyMgcHJpbnRpbmcgbW9yZSB0aGFuIDE2IGlzIHBsYXRmb3JtLWRlcGVuZGVudAo+IGZvcihpIGluIGMoMTo1LDEwLDE1LDE2KSkgY2F0KGksIjpcdCIsZm9ybWF0KHBpLGRpZ2l0cz1pKSwiXG4iKQoxIDoJIDMgCjIgOgkgMy4xIAozIDoJIDMuMTQgCjQgOgkgMy4xNDIgCjUgOgkgMy4xNDE2IAoxMCA6CSAzLjE0MTU5MjY1NCAKMTUgOgkgMy4xNDE1OTI2NTM1ODk3OSAKMTYgOgkgMy4xNDE1OTI2NTM1ODk3OTMgCj4gCj4gcCA8LSBjKDQ3LDEzLDIsLjEsLjAyMywuMDA0NSwgMWUtMTAwKS8xMDAwCj4gZm9ybWF0LnB2YWwocCkKWzFdICIwLjA0NzAiICAiMC4wMTMwIiAgIjAuMDAyMCIgICIwLjAwMDEiICAiMi4zZS0wNSIgIjQuNWUtMDYiICI8IDJlLTE2Igo+IGZvcm1hdC5wdmFsKHAgLyAwLjkpClsxXSAiMC4wNTIyMjIyMiIgIjAuMDE0NDQ0NDQiICIwLjAwMjIyMjIyIiAiMC4wMDAxMTExMSIgIjIuNTU1NmUtMDUiCls2XSAiNS4wMDAwZS0wNiIgIjwgMi4yMmUtMTYiCj4gZm9ybWF0LnB2YWwocCAvIDAuOSwgZGlnPTMpClsxXSAiMC4wNTIyMjIiICIwLjAxNDQ0NCIgIjAuMDAyMjIyIiAiMC4wMDAxMTEiICIyLjU2ZS0wNSIgIjUuMDBlLTA2IiAiPCAyZS0xNiIgCj4gIyMgZW5kIG9mIG1vdmVkIGZyb20gZm9ybWF0LlJkCj4gCj4gCj4gIyMgaXMuZmluaXRlCj4geCA8LSBjKDEwMCwtMWUtMTMsSW5mLC1JbmYsIE5hTiwgcGksIE5BKQo+IHggIyAgMS4wMDAwMDAgLTMuMDAwMDAwICAgICAgIEluZiAgICAgIC1JbmYgICAgICAgIE5BICAzLjE0MTU5MyAgICAgICAgTkEKWzFdICAxLjAwMDAwMGUrMDIgLTEuMDAwMDAwZS0xMyAgICAgICAgICAgSW5mICAgICAgICAgIC1JbmYgICAgICAgICAgIE5hTgpbNl0gIDMuMTQxNTkzZSswMCAgICAgICAgICAgIE5BCj4gbmFtZXMoeCkgPC0gZm9ybWF0Qyh4LCBkaWc9MykKPiBpcy5maW5pdGUoeCkKICAgMTAwIC0xZS0xMyAgICBJbmYgICAtSW5mICAgIE5hTiAgIDMuMTQgICAgIE5BIAogIFRSVUUgICBUUlVFICBGQUxTRSAgRkFMU0UgIEZBTFNFICAgVFJVRSAgRkFMU0UgCj4gIyMtICAgMTAwIC0xZS0xMyBJbmYgLUluZiBOYU4gMy4xNCBOQQo+ICMjLSAgICAgVCAgICAgIFQgICAuICAgIC4gICAuICAgIFQgIC4KPiBpcy5uYSh4KQogICAxMDAgLTFlLTEzICAgIEluZiAgIC1JbmYgICAgTmFOICAgMy4xNCAgICAgTkEgCiBGQUxTRSAgRkFMU0UgIEZBTFNFICBGQUxTRSAgIFRSVUUgIEZBTFNFICAgVFJVRSAKPiAjIy0gICAxMDAgLTFlLTEzIEluZiAtSW5mIE5hTiAzLjE0IE5BCj4gIyMtICAgICAuICAgICAgLiAgIC4gICAgLiAgIFQgICAgLiAgVAo+IHdoaWNoKGlzLm5hKHgpICYgIWlzLm5hbih4KSkjIG9ubHkgJ05BJzogNwogIE5BIAogICA3IAo+IAo+IGlzLm5hKHgpIHwgaXMuZmluaXRlKHgpCiAgIDEwMCAtMWUtMTMgICAgSW5mICAgLUluZiAgICBOYU4gICAzLjE0ICAgICBOQSAKICBUUlVFICAgVFJVRSAgRkFMU0UgIEZBTFNFICAgVFJVRSAgIFRSVUUgICBUUlVFIAo+ICMjLSAgIDEwMCAtMWUtMTMgSW5mIC1JbmYgTmFOIDMuMTQgTkEKPiAjIy0gICAgIFQgICAgICBUICAgLiAgICAuICAgVCAgICBUICBUCj4gaXMuaW5maW5pdGUoeCkKICAgMTAwIC0xZS0xMyAgICBJbmYgICAtSW5mICAgIE5hTiAgIDMuMTQgICAgIE5BIAogRkFMU0UgIEZBTFNFICAgVFJVRSAgIFRSVUUgIEZBTFNFICBGQUxTRSAgRkFMU0UgCj4gIyMtICAgMTAwIC0xZS0xMyBJbmYgLUluZiBOYU4gMy4xNCBOQQo+ICMjLSAgICAgLiAgICAgIC4gICBUICAgIFQgICAuICAgIC4gIC4KPiAKPiAjIy0tIGVpdGhlciAgZmluaXRlIG9yIGluZmluaXRlICBvciAgTkE6Cj4gYWxsKGlzLm5hKHgpICE9IGlzLmZpbml0ZSh4KSB8IGlzLmluZmluaXRlKHgpKSAjIFRSVUUKWzFdIFRSVUUKPiBhbGwoaXMubmFuKHgpICE9IGlzLmZpbml0ZSh4KSB8IGlzLmluZmluaXRlKHgpKSAjIEZBTFNFOiBoYXZlICdyZWFsJyBOQQpbMV0gRkFMU0UKPiAKPiAjIy0tLSBJbnRlZ2VyCj4gKGl4IDwtIHN0cnVjdHVyZShhcy5pbnRlZ2VyKHgpLG5hbWVzPSBuYW1lcyh4KSkpCiAgIDEwMCAtMWUtMTMgICAgSW5mICAgLUluZiAgICBOYU4gICAzLjE0ICAgICBOQSAKICAgMTAwICAgICAgMCAgICAgTkEgICAgIE5BICAgICBOQSAgICAgIDMgICAgIE5BIApXYXJuaW5nIG1lc3NhZ2U6CkluIHN0cnVjdHVyZShhcy5pbnRlZ2VyKHgpLCBuYW1lcyA9IG5hbWVzKHgpKSA6CiAgTkFzIGludHJvZHVjZWQgYnkgY29lcmNpb24gdG8gaW50ZWdlciByYW5nZQo+ICMjLSAgIDEwMCAtMWUtMTMgICAgSW5mICAgLUluZiAgICBOYU4gICAzLjE0ICAgICBOQQo+ICMjLSAgIDEwMCAgICAgIDAgICAgIE5BICAgICBOQSAgICAgTkEgICAgICAzICAgICBOQQo+IGFsbChpcy5uYShpeCkgIT0gaXMuZmluaXRlKGl4KSB8IGlzLmluZmluaXRlKGl4KSkgIyBUUlVFIChzdGlsbCkKWzFdIFRSVUUKPiAKPiBzdG9yYWdlLm1vZGUoaWkgPC0gLTM6NSkKWzFdICJpbnRlZ2VyIgo+IHN0b3JhZ2UubW9kZSh6bSA8LSBvdXRlcihpaSxpaSwgRlVOPSIqIikpIyBpbnRlZ2VyClsxXSAiZG91YmxlIgo+IHN0b3JhZ2UubW9kZSh6ZCA8LSBvdXRlcihpaSxpaSwgRlVOPSIvIikpIyBkb3VibGUKWzFdICJkb3VibGUiCj4gcmFuZ2UoemQsIG5hLnJtPVRSVUUpIyAtSW5mICBJbmYKWzFdIC1JbmYgIEluZgo+IHpkWyxpaT09MF0KWzFdIC1JbmYgLUluZiAtSW5mICBOYU4gIEluZiAgSW5mICBJbmYgIEluZiAgSW5mCj4gCj4gKHN0b3JhZ2UubW9kZShwcmludCgxOjEgLyAwOjApKSkjIEluZiAiZG91YmxlIgpbMV0gSW5mClsxXSAiZG91YmxlIgo+IChzdG9yYWdlLm1vZGUocHJpbnQoMToxIC8gMToxKSkpIyAxICJkb3VibGUiClsxXSAxClsxXSAiZG91YmxlIgo+IChzdG9yYWdlLm1vZGUocHJpbnQoMToxICsgMToxKSkpIyAyICJpbnRlZ2VyIgpbMV0gMgpbMV0gImludGVnZXIiCj4gKHN0b3JhZ2UubW9kZShwcmludCgyOjIgKiAyOjIpKSkjIDQgImludGVnZXIiClsxXSA0ClsxXSAiaW50ZWdlciIKPiAjIyBlbmQgb2YgbW92ZWQgZnJvbSBpcy5maW5pdGUuUmQKPiAKPiAKPiAjIyBrcm9uZWNrZXIKPiBmcmVkIDwtIG1hdHJpeCgxOjEyLCAzLCA0LCBkaW1uYW1lcz1saXN0KExFVFRFUlNbMTozXSwgTEVUVEVSU1s0OjddKSkKPiBiaWxsIDwtIGMoImhhcHB5IiA9IDEwMCwgInNhZCIgPSAxMDAwKQo+IGtyb25lY2tlcihmcmVkLCBiaWxsLCBtYWtlLmRpbW5hbWVzID0gVFJVRSkKICAgICAgICAgIEQ6ICAgRTogICBGOiAgICBHOgpBOmhhcHB5ICAxMDAgIDQwMCAgNzAwICAxMDAwCkE6c2FkICAgMTAwMCA0MDAwIDcwMDAgMTAwMDAKQjpoYXBweSAgMjAwICA1MDAgIDgwMCAgMTEwMApCOnNhZCAgIDIwMDAgNTAwMCA4MDAwIDExMDAwCkM6aGFwcHkgIDMwMCAgNjAwICA5MDAgIDEyMDAKQzpzYWQgICAzMDAwIDYwMDAgOTAwMCAxMjAwMAo+IAo+IGJpbGwgPC0gb3V0ZXIoYmlsbCwgYygiY2F0Ij0zLCAiZG9nIj00KSkKPiBrcm9uZWNrZXIoZnJlZCwgYmlsbCwgbWFrZS5kaW1uYW1lcyA9IFRSVUUpCiAgICAgICAgRDpjYXQgRDpkb2cgRTpjYXQgRTpkb2cgRjpjYXQgRjpkb2cgRzpjYXQgRzpkb2cKQTpoYXBweSAgIDMwMCAgIDQwMCAgMTIwMCAgMTYwMCAgMjEwMCAgMjgwMCAgMzAwMCAgNDAwMApBOnNhZCAgICAzMDAwICA0MDAwIDEyMDAwIDE2MDAwIDIxMDAwIDI4MDAwIDMwMDAwIDQwMDAwCkI6aGFwcHkgICA2MDAgICA4MDAgIDE1MDAgIDIwMDAgIDI0MDAgIDMyMDAgIDMzMDAgIDQ0MDAKQjpzYWQgICAgNjAwMCAgODAwMCAxNTAwMCAyMDAwMCAyNDAwMCAzMjAwMCAzMzAwMCA0NDAwMApDOmhhcHB5ICAgOTAwICAxMjAwICAxODAwICAyNDAwICAyNzAwICAzNjAwICAzNjAwICA0ODAwCkM6c2FkICAgIDkwMDAgMTIwMDAgMTgwMDAgMjQwMDAgMjcwMDAgMzYwMDAgMzYwMDAgNDgwMDAKPiAKPiAjIGRpbW5hbWVzIGFyZSBoYXJkIHdvcms6IGxldCdzIHRlc3QgdGhlbSB0aG9yb3VnaGx5Cj4gCj4gZGltbmFtZXMoYmlsbCkgPC0gTlVMTAo+IGtyb25lY2tlcihmcmVkLCBiaWxsLCBtYWtlPVRSVUUpCiAgICAgRDogICAgRDogICAgRTogICAgRTogICAgRjogICAgRjogICAgRzogICAgRzoKQTogIDMwMCAgIDQwMCAgMTIwMCAgMTYwMCAgMjEwMCAgMjgwMCAgMzAwMCAgNDAwMApBOiAzMDAwICA0MDAwIDEyMDAwIDE2MDAwIDIxMDAwIDI4MDAwIDMwMDAwIDQwMDAwCkI6ICA2MDAgICA4MDAgIDE1MDAgIDIwMDAgIDI0MDAgIDMyMDAgIDMzMDAgIDQ0MDAKQjogNjAwMCAgODAwMCAxNTAwMCAyMDAwMCAyNDAwMCAzMjAwMCAzMzAwMCA0NDAwMApDOiAgOTAwICAxMjAwICAxODAwICAyNDAwICAyNzAwICAzNjAwICAzNjAwICA0ODAwCkM6IDkwMDAgMTIwMDAgMTgwMDAgMjQwMDAgMjcwMDAgMzYwMDAgMzYwMDAgNDgwMDAKPiBrcm9uZWNrZXIoYmlsbCwgZnJlZCwgbWFrZT1UUlVFKQogICAgIDpEICAgIDpFICAgIDpGICAgIDpHICAgIDpEICAgIDpFICAgIDpGICAgIDpHCjpBICAzMDAgIDEyMDAgIDIxMDAgIDMwMDAgICA0MDAgIDE2MDAgIDI4MDAgIDQwMDAKOkIgIDYwMCAgMTUwMCAgMjQwMCAgMzMwMCAgIDgwMCAgMjAwMCAgMzIwMCAgNDQwMAo6QyAgOTAwICAxODAwICAyNzAwICAzNjAwICAxMjAwICAyNDAwICAzNjAwICA0ODAwCjpBIDMwMDAgMTIwMDAgMjEwMDAgMzAwMDAgIDQwMDAgMTYwMDAgMjgwMDAgNDAwMDAKOkIgNjAwMCAxNTAwMCAyNDAwMCAzMzAwMCAgODAwMCAyMDAwMCAzMjAwMCA0NDAwMAo6QyA5MDAwIDE4MDAwIDI3MDAwIDM2MDAwIDEyMDAwIDI0MDAwIDM2MDAwIDQ4MDAwCj4gCj4gZGltKGJpbGwpIDwtIGMoMiwgMiwgMSkKPiBkaW1uYW1lcyhiaWxsKSA8LSBsaXN0KGMoImhhcHB5IiwgInNhZCIpLCBOVUxMLCAiIikKPiBrcm9uZWNrZXIoZnJlZCwgYmlsbCwgbWFrZT1UUlVFKQosICwgOgoKICAgICAgICAgIEQ6ICAgIEQ6ICAgIEU6ICAgIEU6ICAgIEY6ICAgIEY6ICAgIEc6ICAgIEc6CkE6aGFwcHkgIDMwMCAgIDQwMCAgMTIwMCAgMTYwMCAgMjEwMCAgMjgwMCAgMzAwMCAgNDAwMApBOnNhZCAgIDMwMDAgIDQwMDAgMTIwMDAgMTYwMDAgMjEwMDAgMjgwMDAgMzAwMDAgNDAwMDAKQjpoYXBweSAgNjAwICAgODAwICAxNTAwICAyMDAwICAyNDAwICAzMjAwICAzMzAwICA0NDAwCkI6c2FkICAgNjAwMCAgODAwMCAxNTAwMCAyMDAwMCAyNDAwMCAzMjAwMCAzMzAwMCA0NDAwMApDOmhhcHB5ICA5MDAgIDEyMDAgIDE4MDAgIDI0MDAgIDI3MDAgIDM2MDAgIDM2MDAgIDQ4MDAKQzpzYWQgICA5MDAwIDEyMDAwIDE4MDAwIDI0MDAwIDI3MDAwIDM2MDAwIDM2MDAwIDQ4MDAwCgo+IAo+IGJpbGwgPC0gYXJyYXkoMToyNCwgYygzLCA0LCAyKSkKPiBkaW1uYW1lcyhiaWxsKSA8LSBsaXN0KE5VTEwsIE5VTEwsIGMoImhhcHB5IiwgInNhZCIpKQo+IGtyb25lY2tlcihiaWxsLCBmcmVkLCBtYWtlPVRSVUUpCiwgLCBoYXBweToKCiAgIDpEIDpFIDpGIDpHIDpEIDpFIDpGIDpHIDpEIDpFIDpGICA6RyA6RCA6RSAgOkYgIDpHCjpBICAxICA0ICA3IDEwICA0IDE2IDI4IDQwICA3IDI4IDQ5ICA3MCAxMCA0MCAgNzAgMTAwCjpCICAyICA1ICA4IDExICA4IDIwIDMyIDQ0IDE0IDM1IDU2ICA3NyAyMCA1MCAgODAgMTEwCjpDICAzICA2ICA5IDEyIDEyIDI0IDM2IDQ4IDIxIDQyIDYzICA4NCAzMCA2MCAgOTAgMTIwCjpBICAyICA4IDE0IDIwICA1IDIwIDM1IDUwICA4IDMyIDU2ICA4MCAxMSA0NCAgNzcgMTEwCjpCICA0IDEwIDE2IDIyIDEwIDI1IDQwIDU1IDE2IDQwIDY0ICA4OCAyMiA1NSAgODggMTIxCjpDICA2IDEyIDE4IDI0IDE1IDMwIDQ1IDYwIDI0IDQ4IDcyICA5NiAzMyA2NiAgOTkgMTMyCjpBICAzIDEyIDIxIDMwICA2IDI0IDQyIDYwICA5IDM2IDYzICA5MCAxMiA0OCAgODQgMTIwCjpCICA2IDE1IDI0IDMzIDEyIDMwIDQ4IDY2IDE4IDQ1IDcyICA5OSAyNCA2MCAgOTYgMTMyCjpDICA5IDE4IDI3IDM2IDE4IDM2IDU0IDcyIDI3IDU0IDgxIDEwOCAzNiA3MiAxMDggMTQ0CgosICwgc2FkOgoKICAgOkQgOkUgIDpGICA6RyA6RCAgOkUgIDpGICA6RyA6RCAgOkUgIDpGICA6RyA6RCAgOkUgIDpGICA6Rwo6QSAxMyA1MiAgOTEgMTMwIDE2ICA2NCAxMTIgMTYwIDE5ICA3NiAxMzMgMTkwIDIyICA4OCAxNTQgMjIwCjpCIDI2IDY1IDEwNCAxNDMgMzIgIDgwIDEyOCAxNzYgMzggIDk1IDE1MiAyMDkgNDQgMTEwIDE3NiAyNDIKOkMgMzkgNzggMTE3IDE1NiA0OCAgOTYgMTQ0IDE5MiA1NyAxMTQgMTcxIDIyOCA2NiAxMzIgMTk4IDI2NAo6QSAxNCA1NiAgOTggMTQwIDE3ICA2OCAxMTkgMTcwIDIwICA4MCAxNDAgMjAwIDIzICA5MiAxNjEgMjMwCjpCIDI4IDcwIDExMiAxNTQgMzQgIDg1IDEzNiAxODcgNDAgMTAwIDE2MCAyMjAgNDYgMTE1IDE4NCAyNTMKOkMgNDIgODQgMTI2IDE2OCA1MSAxMDIgMTUzIDIwNCA2MCAxMjAgMTgwIDI0MCA2OSAxMzggMjA3IDI3Ngo6QSAxNSA2MCAxMDUgMTUwIDE4ICA3MiAxMjYgMTgwIDIxICA4NCAxNDcgMjEwIDI0ICA5NiAxNjggMjQwCjpCIDMwIDc1IDEyMCAxNjUgMzYgIDkwIDE0NCAxOTggNDIgMTA1IDE2OCAyMzEgNDggMTIwIDE5MiAyNjQKOkMgNDUgOTAgMTM1IDE4MCA1NCAxMDggMTYyIDIxNiA2MyAxMjYgMTg5IDI1MiA3MiAxNDQgMjE2IDI4OAoKPiBrcm9uZWNrZXIoZnJlZCwgYmlsbCwgbWFrZT1UUlVFKQosICwgOmhhcHB5CgogICBEOiBEOiBEOiBEOiBFOiBFOiBFOiBFOiBGOiBGOiBGOiAgRjogRzogRzogIEc6ICBHOgpBOiAgMSAgNCAgNyAxMCAgNCAxNiAyOCA0MCAgNyAyOCA0OSAgNzAgMTAgNDAgIDcwIDEwMApBOiAgMiAgNSAgOCAxMSAgOCAyMCAzMiA0NCAxNCAzNSA1NiAgNzcgMjAgNTAgIDgwIDExMApBOiAgMyAgNiAgOSAxMiAxMiAyNCAzNiA0OCAyMSA0MiA2MyAgODQgMzAgNjAgIDkwIDEyMApCOiAgMiAgOCAxNCAyMCAgNSAyMCAzNSA1MCAgOCAzMiA1NiAgODAgMTEgNDQgIDc3IDExMApCOiAgNCAxMCAxNiAyMiAxMCAyNSA0MCA1NSAxNiA0MCA2NCAgODggMjIgNTUgIDg4IDEyMQpCOiAgNiAxMiAxOCAyNCAxNSAzMCA0NSA2MCAyNCA0OCA3MiAgOTYgMzMgNjYgIDk5IDEzMgpDOiAgMyAxMiAyMSAzMCAgNiAyNCA0MiA2MCAgOSAzNiA2MyAgOTAgMTIgNDggIDg0IDEyMApDOiAgNiAxNSAyNCAzMyAxMiAzMCA0OCA2NiAxOCA0NSA3MiAgOTkgMjQgNjAgIDk2IDEzMgpDOiAgOSAxOCAyNyAzNiAxOCAzNiA1NCA3MiAyNyA1NCA4MSAxMDggMzYgNzIgMTA4IDE0NAoKLCAsIDpzYWQKCiAgIEQ6IEQ6IEQ6IEQ6IEU6ICBFOiAgRTogIEU6ICBGOiAgRjogIEY6ICBGOiAgRzogIEc6ICBHOiAgRzoKQTogMTMgMTYgMTkgMjIgNTIgIDY0ICA3NiAgODggIDkxIDExMiAxMzMgMTU0IDEzMCAxNjAgMTkwIDIyMApBOiAxNCAxNyAyMCAyMyA1NiAgNjggIDgwICA5MiAgOTggMTE5IDE0MCAxNjEgMTQwIDE3MCAyMDAgMjMwCkE6IDE1IDE4IDIxIDI0IDYwICA3MiAgODQgIDk2IDEwNSAxMjYgMTQ3IDE2OCAxNTAgMTgwIDIxMCAyNDAKQjogMjYgMzIgMzggNDQgNjUgIDgwICA5NSAxMTAgMTA0IDEyOCAxNTIgMTc2IDE0MyAxNzYgMjA5IDI0MgpCOiAyOCAzNCA0MCA0NiA3MCAgODUgMTAwIDExNSAxMTIgMTM2IDE2MCAxODQgMTU0IDE4NyAyMjAgMjUzCkI6IDMwIDM2IDQyIDQ4IDc1ICA5MCAxMDUgMTIwIDEyMCAxNDQgMTY4IDE5MiAxNjUgMTk4IDIzMSAyNjQKQzogMzkgNDggNTcgNjYgNzggIDk2IDExNCAxMzIgMTE3IDE0NCAxNzEgMTk4IDE1NiAxOTIgMjI4IDI2NApDOiA0MiA1MSA2MCA2OSA4NCAxMDIgMTIwIDEzOCAxMjYgMTUzIDE4MCAyMDcgMTY4IDIwNCAyNDAgMjc2CkM6IDQ1IDU0IDYzIDcyIDkwIDEwOCAxMjYgMTQ0IDEzNSAxNjIgMTg5IDIxNiAxODAgMjE2IDI1MiAyODgKCj4gCj4gZnJlZCA8LSBvdXRlcihmcmVkLCBjKCJmcmVxdWVudGlzdCI9NCwgImJheWVzaWFuIj00MDAwKSkKPiBrcm9uZWNrZXIoZnJlZCwgYmlsbCwgbWFrZT1UUlVFKQosICwgZnJlcXVlbnRpc3Q6aGFwcHkKCiAgIEQ6IEQ6ICBEOiAgRDogRTogIEU6ICBFOiAgRTogIEY6ICBGOiAgRjogIEY6ICBHOiAgRzogIEc6ICBHOgpBOiAgNCAxNiAgMjggIDQwIDE2ICA2NCAxMTIgMTYwICAyOCAxMTIgMTk2IDI4MCAgNDAgMTYwIDI4MCA0MDAKQTogIDggMjAgIDMyICA0NCAzMiAgODAgMTI4IDE3NiAgNTYgMTQwIDIyNCAzMDggIDgwIDIwMCAzMjAgNDQwCkE6IDEyIDI0ICAzNiAgNDggNDggIDk2IDE0NCAxOTIgIDg0IDE2OCAyNTIgMzM2IDEyMCAyNDAgMzYwIDQ4MApCOiAgOCAzMiAgNTYgIDgwIDIwICA4MCAxNDAgMjAwICAzMiAxMjggMjI0IDMyMCAgNDQgMTc2IDMwOCA0NDAKQjogMTYgNDAgIDY0ICA4OCA0MCAxMDAgMTYwIDIyMCAgNjQgMTYwIDI1NiAzNTIgIDg4IDIyMCAzNTIgNDg0CkI6IDI0IDQ4ICA3MiAgOTYgNjAgMTIwIDE4MCAyNDAgIDk2IDE5MiAyODggMzg0IDEzMiAyNjQgMzk2IDUyOApDOiAxMiA0OCAgODQgMTIwIDI0ICA5NiAxNjggMjQwICAzNiAxNDQgMjUyIDM2MCAgNDggMTkyIDMzNiA0ODAKQzogMjQgNjAgIDk2IDEzMiA0OCAxMjAgMTkyIDI2NCAgNzIgMTgwIDI4OCAzOTYgIDk2IDI0MCAzODQgNTI4CkM6IDM2IDcyIDEwOCAxNDQgNzIgMTQ0IDIxNiAyODggMTA4IDIxNiAzMjQgNDMyIDE0NCAyODggNDMyIDU3NgoKLCAsIGZyZXF1ZW50aXN0OnNhZAoKICAgIEQ6ICBEOiAgRDogIEQ6ICBFOiAgRTogIEU6ICBFOiAgRjogIEY6ICBGOiAgRjogIEc6ICBHOiAgIEc6ICAgRzoKQTogIDUyICA2NCAgNzYgIDg4IDIwOCAyNTYgMzA0IDM1MiAzNjQgNDQ4IDUzMiA2MTYgNTIwIDY0MCAgNzYwICA4ODAKQTogIDU2ICA2OCAgODAgIDkyIDIyNCAyNzIgMzIwIDM2OCAzOTIgNDc2IDU2MCA2NDQgNTYwIDY4MCAgODAwICA5MjAKQTogIDYwICA3MiAgODQgIDk2IDI0MCAyODggMzM2IDM4NCA0MjAgNTA0IDU4OCA2NzIgNjAwIDcyMCAgODQwICA5NjAKQjogMTA0IDEyOCAxNTIgMTc2IDI2MCAzMjAgMzgwIDQ0MCA0MTYgNTEyIDYwOCA3MDQgNTcyIDcwNCAgODM2ICA5NjgKQjogMTEyIDEzNiAxNjAgMTg0IDI4MCAzNDAgNDAwIDQ2MCA0NDggNTQ0IDY0MCA3MzYgNjE2IDc0OCAgODgwIDEwMTIKQjogMTIwIDE0NCAxNjggMTkyIDMwMCAzNjAgNDIwIDQ4MCA0ODAgNTc2IDY3MiA3NjggNjYwIDc5MiAgOTI0IDEwNTYKQzogMTU2IDE5MiAyMjggMjY0IDMxMiAzODQgNDU2IDUyOCA0NjggNTc2IDY4NCA3OTIgNjI0IDc2OCAgOTEyIDEwNTYKQzogMTY4IDIwNCAyNDAgMjc2IDMzNiA0MDggNDgwIDU1MiA1MDQgNjEyIDcyMCA4MjggNjcyIDgxNiAgOTYwIDExMDQKQzogMTgwIDIxNiAyNTIgMjg4IDM2MCA0MzIgNTA0IDU3NiA1NDAgNjQ4IDc1NiA4NjQgNzIwIDg2NCAxMDA4IDExNTIKCiwgLCBiYXllc2lhbjpoYXBweQoKICAgICAgRDogICAgRDogICAgIEQ6ICAgICBEOiAgICBFOiAgICAgRTogICAgIEU6ICAgICBFOiAgICAgRjogICAgIEY6ICAgICBGOgpBOiAgNDAwMCAxNjAwMCAgMjgwMDAgIDQwMDAwIDE2MDAwICA2NDAwMCAxMTIwMDAgMTYwMDAwICAyODAwMCAxMTIwMDAgMTk2MDAwCkE6ICA4MDAwIDIwMDAwICAzMjAwMCAgNDQwMDAgMzIwMDAgIDgwMDAwIDEyODAwMCAxNzYwMDAgIDU2MDAwIDE0MDAwMCAyMjQwMDAKQTogMTIwMDAgMjQwMDAgIDM2MDAwICA0ODAwMCA0ODAwMCAgOTYwMDAgMTQ0MDAwIDE5MjAwMCAgODQwMDAgMTY4MDAwIDI1MjAwMApCOiAgODAwMCAzMjAwMCAgNTYwMDAgIDgwMDAwIDIwMDAwICA4MDAwMCAxNDAwMDAgMjAwMDAwICAzMjAwMCAxMjgwMDAgMjI0MDAwCkI6IDE2MDAwIDQwMDAwICA2NDAwMCAgODgwMDAgNDAwMDAgMTAwMDAwIDE2MDAwMCAyMjAwMDAgIDY0MDAwIDE2MDAwMCAyNTYwMDAKQjogMjQwMDAgNDgwMDAgIDcyMDAwICA5NjAwMCA2MDAwMCAxMjAwMDAgMTgwMDAwIDI0MDAwMCAgOTYwMDAgMTkyMDAwIDI4ODAwMApDOiAxMjAwMCA0ODAwMCAgODQwMDAgMTIwMDAwIDI0MDAwICA5NjAwMCAxNjgwMDAgMjQwMDAwICAzNjAwMCAxNDQwMDAgMjUyMDAwCkM6IDI0MDAwIDYwMDAwICA5NjAwMCAxMzIwMDAgNDgwMDAgMTIwMDAwIDE5MjAwMCAyNjQwMDAgIDcyMDAwIDE4MDAwMCAyODgwMDAKQzogMzYwMDAgNzIwMDAgMTA4MDAwIDE0NDAwMCA3MjAwMCAxNDQwMDAgMjE2MDAwIDI4ODAwMCAxMDgwMDAgMjE2MDAwIDMyNDAwMAogICAgICAgRjogICAgIEc6ICAgICBHOiAgICAgRzogICAgIEc6CkE6IDI4MDAwMCAgNDAwMDAgMTYwMDAwIDI4MDAwMCA0MDAwMDAKQTogMzA4MDAwICA4MDAwMCAyMDAwMDAgMzIwMDAwIDQ0MDAwMApBOiAzMzYwMDAgMTIwMDAwIDI0MDAwMCAzNjAwMDAgNDgwMDAwCkI6IDMyMDAwMCAgNDQwMDAgMTc2MDAwIDMwODAwMCA0NDAwMDAKQjogMzUyMDAwICA4ODAwMCAyMjAwMDAgMzUyMDAwIDQ4NDAwMApCOiAzODQwMDAgMTMyMDAwIDI2NDAwMCAzOTYwMDAgNTI4MDAwCkM6IDM2MDAwMCAgNDgwMDAgMTkyMDAwIDMzNjAwMCA0ODAwMDAKQzogMzk2MDAwICA5NjAwMCAyNDAwMDAgMzg0MDAwIDUyODAwMApDOiA0MzIwMDAgMTQ0MDAwIDI4ODAwMCA0MzIwMDAgNTc2MDAwCgosICwgYmF5ZXNpYW46c2FkCgogICAgICAgRDogICAgIEQ6ICAgICBEOiAgICAgRDogICAgIEU6ICAgICBFOiAgICAgRTogICAgIEU6ICAgICBGOiAgICAgRjogICAgIEY6CkE6ICA1MjAwMCAgNjQwMDAgIDc2MDAwICA4ODAwMCAyMDgwMDAgMjU2MDAwIDMwNDAwMCAzNTIwMDAgMzY0MDAwIDQ0ODAwMCA1MzIwMDAKQTogIDU2MDAwICA2ODAwMCAgODAwMDAgIDkyMDAwIDIyNDAwMCAyNzIwMDAgMzIwMDAwIDM2ODAwMCAzOTIwMDAgNDc2MDAwIDU2MDAwMApBOiAgNjAwMDAgIDcyMDAwICA4NDAwMCAgOTYwMDAgMjQwMDAwIDI4ODAwMCAzMzYwMDAgMzg0MDAwIDQyMDAwMCA1MDQwMDAgNTg4MDAwCkI6IDEwNDAwMCAxMjgwMDAgMTUyMDAwIDE3NjAwMCAyNjAwMDAgMzIwMDAwIDM4MDAwMCA0NDAwMDAgNDE2MDAwIDUxMjAwMCA2MDgwMDAKQjogMTEyMDAwIDEzNjAwMCAxNjAwMDAgMTg0MDAwIDI4MDAwMCAzNDAwMDAgNDAwMDAwIDQ2MDAwMCA0NDgwMDAgNTQ0MDAwIDY0MDAwMApCOiAxMjAwMDAgMTQ0MDAwIDE2ODAwMCAxOTIwMDAgMzAwMDAwIDM2MDAwMCA0MjAwMDAgNDgwMDAwIDQ4MDAwMCA1NzYwMDAgNjcyMDAwCkM6IDE1NjAwMCAxOTIwMDAgMjI4MDAwIDI2NDAwMCAzMTIwMDAgMzg0MDAwIDQ1NjAwMCA1MjgwMDAgNDY4MDAwIDU3NjAwMCA2ODQwMDAKQzogMTY4MDAwIDIwNDAwMCAyNDAwMDAgMjc2MDAwIDMzNjAwMCA0MDgwMDAgNDgwMDAwIDU1MjAwMCA1MDQwMDAgNjEyMDAwIDcyMDAwMApDOiAxODAwMDAgMjE2MDAwIDI1MjAwMCAyODgwMDAgMzYwMDAwIDQzMjAwMCA1MDQwMDAgNTc2MDAwIDU0MDAwMCA2NDgwMDAgNzU2MDAwCiAgICAgICBGOiAgICAgRzogICAgIEc6ICAgICAgRzogICAgICBHOgpBOiA2MTYwMDAgNTIwMDAwIDY0MDAwMCAgNzYwMDAwICA4ODAwMDAKQTogNjQ0MDAwIDU2MDAwMCA2ODAwMDAgIDgwMDAwMCAgOTIwMDAwCkE6IDY3MjAwMCA2MDAwMDAgNzIwMDAwICA4NDAwMDAgIDk2MDAwMApCOiA3MDQwMDAgNTcyMDAwIDcwNDAwMCAgODM2MDAwICA5NjgwMDAKQjogNzM2MDAwIDYxNjAwMCA3NDgwMDAgIDg4MDAwMCAxMDEyMDAwCkI6IDc2ODAwMCA2NjAwMDAgNzkyMDAwICA5MjQwMDAgMTA1NjAwMApDOiA3OTIwMDAgNjI0MDAwIDc2ODAwMCAgOTEyMDAwIDEwNTYwMDAKQzogODI4MDAwIDY3MjAwMCA4MTYwMDAgIDk2MDAwMCAxMTA0MDAwCkM6IDg2NDAwMCA3MjAwMDAgODY0MDAwIDEwMDgwMDAgMTE1MjAwMAoKPiAjIyBlbmQgb2YgbW92ZWQgZnJvbSBrcm9uZWNrZXIuUmQKPiAKPiAjIyBtZXJnZQo+IGF1dGhvcnMgPC0gZGF0YS5mcmFtZSgKKyAgICAgc3VybmFtZSA9IGMoIlR1a2V5IiwgIlZlbmFibGVzIiwgIlRpZXJuZXkiLCAiUmlwbGV5IiwgIk1jTmVpbCIpLAorICAgICBuYXRpb25hbGl0eSA9IGMoIlVTIiwgIkF1c3RyYWxpYSIsICJVUyIsICJVSyIsICJBdXN0cmFsaWEiKSwKKyAgICAgZGVjZWFzZWQgPSBjKCJ5ZXMiLCByZXAoIm5vIiwgNCkpKQo+IGJvb2tzIDwtIGRhdGEuZnJhbWUoCisgICAgIG5hbWUgPSBjKCJUdWtleSIsICJWZW5hYmxlcyIsICJUaWVybmV5IiwKKyAgICAgICAgICAgICAgIlJpcGxleSIsICJSaXBsZXkiLCAiTWNOZWlsIiwgIlIgQ29yZSIpLAorICAgICB0aXRsZSA9IGMoIkV4cGxvcmF0b3J5IERhdGEgQW5hbHlzaXMiLAorICAgICAgICAgICAgICAgIk1vZGVybiBBcHBsaWVkIFN0YXRpc3RpY3MgLi4uIiwKKyAgICAgICAgICAgICAgICJMSVNQLVNUQVQiLAorICAgICAgICAgICAgICAgIlNwYXRpYWwgU3RhdGlzdGljcyIsICJTdG9jaGFzdGljIFNpbXVsYXRpb24iLAorICAgICAgICAgICAgICAgIkludGVyYWN0aXZlIERhdGEgQW5hbHlzaXMiLAorICAgICAgICAgICAgICAgIkFuIEludHJvZHVjdGlvbiB0byBSIiksCisgICAgIG90aGVyLmF1dGhvciA9IGMoTkEsICJSaXBsZXkiLCBOQSwgTkEsIE5BLCBOQSwKKyAgICAgICAgICAgICAgICAgICAgICAiVmVuYWJsZXMgJiBTbWl0aCIpKQo+IGIyIDwtIGJvb2tzOyBuYW1lcyhiMilbMV0gPC0gbmFtZXMoYXV0aG9ycylbMV0KPiAKPiBtZXJnZShhdXRob3JzLCBiMiwgYWxsLnggPSBUUlVFKQogICBzdXJuYW1lIG5hdGlvbmFsaXR5IGRlY2Vhc2VkICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlIG90aGVyLmF1dGhvcgoxICAgTWNOZWlsICAgQXVzdHJhbGlhICAgICAgIG5vICAgICBJbnRlcmFjdGl2ZSBEYXRhIEFuYWx5c2lzICAgICAgICAgPE5BPgoyICAgUmlwbGV5ICAgICAgICAgIFVLICAgICAgIG5vICAgICAgICAgICAgU3BhdGlhbCBTdGF0aXN0aWNzICAgICAgICAgPE5BPgozICAgUmlwbGV5ICAgICAgICAgIFVLICAgICAgIG5vICAgICAgICAgU3RvY2hhc3RpYyBTaW11bGF0aW9uICAgICAgICAgPE5BPgo0ICBUaWVybmV5ICAgICAgICAgIFVTICAgICAgIG5vICAgICAgICAgICAgICAgICAgICAgTElTUC1TVEFUICAgICAgICAgPE5BPgo1ICAgIFR1a2V5ICAgICAgICAgIFVTICAgICAgeWVzICAgICBFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzICAgICAgICAgPE5BPgo2IFZlbmFibGVzICAgQXVzdHJhbGlhICAgICAgIG5vIE1vZGVybiBBcHBsaWVkIFN0YXRpc3RpY3MgLi4uICAgICAgIFJpcGxleQo+IG1lcmdlKGF1dGhvcnMsIGIyLCBhbGwueSA9IFRSVUUpCiAgIHN1cm5hbWUgbmF0aW9uYWxpdHkgZGVjZWFzZWQgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgICAgIG90aGVyLmF1dGhvcgoxICAgTWNOZWlsICAgQXVzdHJhbGlhICAgICAgIG5vICAgICBJbnRlcmFjdGl2ZSBEYXRhIEFuYWx5c2lzICAgICAgICAgICAgIDxOQT4KMiAgIFJpcGxleSAgICAgICAgICBVSyAgICAgICBubyAgICAgICAgICAgIFNwYXRpYWwgU3RhdGlzdGljcyAgICAgICAgICAgICA8TkE+CjMgICBSaXBsZXkgICAgICAgICAgVUsgICAgICAgbm8gICAgICAgICBTdG9jaGFzdGljIFNpbXVsYXRpb24gICAgICAgICAgICAgPE5BPgo0ICBUaWVybmV5ICAgICAgICAgIFVTICAgICAgIG5vICAgICAgICAgICAgICAgICAgICAgTElTUC1TVEFUICAgICAgICAgICAgIDxOQT4KNSAgICBUdWtleSAgICAgICAgICBVUyAgICAgIHllcyAgICAgRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcyAgICAgICAgICAgICA8TkE+CjYgVmVuYWJsZXMgICBBdXN0cmFsaWEgICAgICAgbm8gTW9kZXJuIEFwcGxpZWQgU3RhdGlzdGljcyAuLi4gICAgICAgICAgIFJpcGxleQo3ICAgUiBDb3JlICAgICAgICA8TkE+ICAgICA8TkE+ICAgICAgICAgIEFuIEludHJvZHVjdGlvbiB0byBSIFZlbmFibGVzICYgU21pdGgKPiAKPiAjIyBlbXB0eSBkLmYuIDoKPiBtZXJnZShhdXRob3JzLCBiMls3LF0pClsxXSBzdXJuYW1lICAgICAgbmF0aW9uYWxpdHkgIGRlY2Vhc2VkICAgICB0aXRsZSAgICAgICAgb3RoZXIuYXV0aG9yCjwwIHJvd3M+IChvciAwLWxlbmd0aCByb3cubmFtZXMpCj4gCj4gbWVyZ2UoYXV0aG9ycywgYjJbNyxdLCBhbGwueSA9IFRSVUUpCiAgc3VybmFtZSBuYXRpb25hbGl0eSBkZWNlYXNlZCAgICAgICAgICAgICAgICB0aXRsZSAgICAgb3RoZXIuYXV0aG9yCjEgIFIgQ29yZSAgICAgICAgPE5BPiAgICAgPE5BPiBBbiBJbnRyb2R1Y3Rpb24gdG8gUiBWZW5hYmxlcyAmIFNtaXRoCj4gbWVyZ2UoYXV0aG9ycywgYjJbNyxdLCBhbGwueCA9IFRSVUUpCiAgIHN1cm5hbWUgbmF0aW9uYWxpdHkgZGVjZWFzZWQgdGl0bGUgb3RoZXIuYXV0aG9yCjEgICBNY05laWwgICBBdXN0cmFsaWEgICAgICAgbm8gIDxOQT4gICAgICAgICA8TkE+CjIgICBSaXBsZXkgICAgICAgICAgVUsgICAgICAgbm8gIDxOQT4gICAgICAgICA8TkE+CjMgIFRpZXJuZXkgICAgICAgICAgVVMgICAgICAgbm8gIDxOQT4gICAgICAgICA8TkE+CjQgICAgVHVrZXkgICAgICAgICAgVVMgICAgICB5ZXMgIDxOQT4gICAgICAgICA8TkE+CjUgVmVuYWJsZXMgICBBdXN0cmFsaWEgICAgICAgbm8gIDxOQT4gICAgICAgICA8TkE+Cj4gIyMgZW5kIG9mIG1vdmVkIGZyb20gbWVyZ2UuUmQKPiAKPiAjIyBOQQo+IGlzLm5hKGMoMSxOQSkpClsxXSBGQUxTRSAgVFJVRQo+IGlzLm5hKHBhc3RlKGMoMSxOQSkpKQpbMV0gRkFMU0UgRkFMU0UKPiBpcy5uYShsaXN0KCkpIyBsb2dpY2FsKDApCmxvZ2ljYWwoMCkKPiBsbCA8LSBsaXN0KHBpLCJDIixOYU4sSW5mLCAxOjMsIGMoMCxOQSksIE5BKQo+IGlzLm5hIChsbCkKWzFdIEZBTFNFIEZBTFNFICBUUlVFIEZBTFNFIEZBTFNFIEZBTFNFICBUUlVFCj4gbGFwcGx5KGxsLCBpcy5uYW4pICAjIGlzLm5hbiBubyBsb25nZXIgd29ya3Mgb24gbGlzdHMKW1sxXV0KWzFdIEZBTFNFCgpbWzJdXQpbMV0gRkFMU0UKCltbM11dClsxXSBUUlVFCgpbWzRdXQpbMV0gRkFMU0UKCltbNV1dClsxXSBGQUxTRSBGQUxTRSBGQUxTRQoKW1s2XV0KWzFdIEZBTFNFIEZBTFNFCgpbWzddXQpbMV0gRkFMU0UKCj4gIyMgZW5kIG9mIG1vdmVkIGZyb20gTkEuUmQKPiAKPiAjIyBpcy5uYSB3YXMgcmV0dXJuaW5nIHVuc2V0IHZhbHVlcyBvbiBuZXN0ZWQgbGlzdHMKPiBsbCA8LSBsaXN0KGxpc3QoMSkpCj4gZm9yIChpIGluIDE6NSkgcHJpbnQoYXMuaW50ZWdlcihpcy5uYShsbCkpKQpbMV0gMApbMV0gMApbMV0gMApbMV0gMApbMV0gMAo+IAo+ICMjIHNjYWxlCj4gIyMgdGVzdCBvdXQgTkEgaGFuZGxpbmcKPiB0bSA8LSBtYXRyaXgoYygyLDEsMCwxLDAsTkEsTkEsTkEsMCksIG5yb3c9MykKPiBzY2FsZSh0bSwgLCBGQUxTRSkKICAgICBbLDFdIFssMl0gWywzXQpbMSxdICAgIDEgIDAuNSAgIE5BClsyLF0gICAgMCAtMC41ICAgTkEKWzMsXSAgIC0xICAgTkEgICAgMAphdHRyKCwic2NhbGVkOmNlbnRlciIpClsxXSAxLjAgMC41IDAuMAo+IHNjYWxlKHRtKQogICAgIFssMV0gICAgICAgWywyXSBbLDNdClsxLF0gICAgMSAgMC43MDcxMDY4ICAgTkEKWzIsXSAgICAwIC0wLjcwNzEwNjggICBOQQpbMyxdICAgLTEgICAgICAgICBOQSAgTmFOCmF0dHIoLCJzY2FsZWQ6Y2VudGVyIikKWzFdIDEuMCAwLjUgMC4wCmF0dHIoLCJzY2FsZWQ6c2NhbGUiKQpbMV0gMS4wMDAwMDAwIDAuNzA3MTA2OCAwLjAwMDAwMDAKPiAjIyBlbmQgb2YgbW92ZWQgZnJvbSBzY2FsZS5SZAo+IAo+ICMjIHRhYnVsYXRlCj4gdGFidWxhdGUobnVtZXJpYygwKSkKWzFdIDAKPiAjIyBlbmQgb2YgbW92ZWQgZnJvbSB0YWJ1bGF0ZS5SZAo+IAo+ICMjIHRzCj4gIyBFbnN1cmUgd29ya2luZyBhcml0aG1ldGljIGZvciBgdHMnIG9iamVjdHMgOgo+IHN0b3BpZm5vdCh6ID09IHopCj4gc3RvcGlmbm90KHoteiA9PSAwKQo+IAo+IHRzKDE6NSwgc3RhcnQ9MiwgZW5kPTQpICMgdHJ1bmNhdGUKVGltZSBTZXJpZXM6ClN0YXJ0ID0gMiAKRW5kID0gNCAKRnJlcXVlbmN5ID0gMSAKWzFdIDEgMiAzCj4gdHMoMTo1LCBzdGFydD0zLCBlbmQ9MTcpIyByZXBlYXQKVGltZSBTZXJpZXM6ClN0YXJ0ID0gMyAKRW5kID0gMTcgCkZyZXF1ZW5jeSA9IDEgCiBbMV0gMSAyIDMgNCA1IDEgMiAzIDQgNSAxIDIgMyA0IDUKPiAjIyBlbmQgb2YgbW92ZWQgZnJvbSB0cy5SZAo+IAo+ICMjIyBlbmQgb2YgbW92ZWQKPiAKPiAKPiAjIyBQUiA3MTUgKFByaW50aW5nIGxpc3QgZWxlbWVudHMgdy9hdHRyaWJ1dGVzKQo+ICMjCj4gbCA8LSBsaXN0KGE9MTApCj4gYXR0cihsJGEsICJ4eCIpIDwtIDIzCj4gbAokYQpbMV0gMTAKYXR0cigsInh4IikKWzFdIDIzCgo+ICMjIENvbW1lbnRzOgo+ICMjIHNob3VsZCBwcmludCBhcwo+ICMgJGE6Cj4gIyBbMV0gMTAKPiAjIGF0dHIoJGEsICJ4eCIpOgo+ICMgWzFdIDIzCj4gCj4gIyMgT24gdGhlIG90aGVyIGhhbmQKPiBtIDwtIG1hdHJpeChjKDEsIDIsIDMsIDAsIDEwLCBOQSksIDMsIDIpCj4gbmEub21pdChtKQogICAgIFssMV0gWywyXQpbMSxdICAgIDEgICAgMApbMixdICAgIDIgICAxMAphdHRyKCwibmEuYWN0aW9uIikKWzFdIDMKYXR0cigsImNsYXNzIikKWzFdICJvbWl0Igo+ICMjIHNob3VsZCBwcmludCBhcwo+ICMgICAgICBbLDFdIFssMl0KPiAjIFsxLF0gICAgMSAgICAwCj4gIyBbMixdICAgIDIgICAxMAo+ICMgYXR0cigsIm5hLmFjdGlvbiIpCj4gIyBbMV0gMwo+ICMgYXR0cigsIm5hLmFjdGlvbiIpCj4gIyBbMV0gIm9taXQiCj4gCj4gIyMgYW5kCj4geCA8LSAxCj4gYXR0cih4LCAiZm9vIikgPC0gbGlzdChhPSJhIikKPiB4ClsxXSAxCmF0dHIoLCJmb28iKQphdHRyKCwiZm9vIikkYQpbMV0gImEiCgo+ICMjIHNob3VsZCBwcmludCBhcwo+ICMgWzFdIDEKPiAjIGF0dHIoLCJmb28iKQo+ICMgYXR0cigsImZvbyIpJGEKPiAjIFsxXSAiYSIKPiAKPiAKPiAjIyBQUiA3NDYgKHByaW50aW5nIG9mIGxpc3RzKQo+ICMjCj4gdGVzdC5saXN0IDwtIGxpc3QoQSA9IGxpc3QoZm9ybXVsYT1ZflgsIHN1YnNldD1UUlVFKSwKKyAgICAgICAgICAgICAgICAgICBCID0gbGlzdChmb3JtdWxhPVl+WCwgc3Vic2V0PVRSVUUpKQo+IAo+IHRlc3QubGlzdAokQQokQSRmb3JtdWxhClkgfiBYCgokQSRzdWJzZXQKWzFdIFRSVUUKCgokQgokQiRmb3JtdWxhClkgfiBYCgokQiRzdWJzZXQKWzFdIFRSVUUKCgo+ICMjIENvbW1lbnRzOgo+ICMjIHNob3VsZCBwcmludCBhcwo+ICMgJEEKPiAjICRBJGZvcm11bGEKPiAjIFkgfiBYCj4gIwo+ICMgJEEkc3Vic2V0Cj4gIyBbMV0gVFJVRQo+ICMKPiAjCj4gIyAkQgo+ICMgJEIkZm9ybXVsYQo+ICMgWSB+IFgKPiAjCj4gIyAkQiRzdWJzZXQKPiAjIFsxXSBUUlVFCj4gCj4gIyMgTWFyYyBGZWxkZXNtYW4gMjAwMS1GZWItMDEuICBQcmVjaXNpb24gaW4gc3VtbWFyeS5kYXRhLmZyYW1lICYgKi5tYXRyaXgKPiBzdW1tYXJ5KGF0dGVudSkKICAgICBldmVudCAgICAgICAgICAgIG1hZyAgICAgICAgICAgc3RhdGlvbiAgICAgICAgIGRpc3QgICAgICAgCiBNaW4uICAgOiAxLjAwICAgTWluLiAgIDo1LjAwMCAgIDExNyAgICA6ICA1ICAgTWluLiAgIDogIDAuNTAgIAogMXN0IFF1LjogOS4wMCAgIDFzdCBRdS46NS4zMDAgICAxMDI4ICAgOiAgNCAgIDFzdCBRdS46IDExLjMyICAKIE1lZGlhbiA6MTguMDAgICBNZWRpYW4gOjYuMTAwICAgMTEzICAgIDogIDQgICBNZWRpYW4gOiAyMy40MCAgCiBNZWFuICAgOjE0Ljc0ICAgTWVhbiAgIDo2LjA4NCAgIDExMiAgICA6ICAzICAgTWVhbiAgIDogNDUuNjAgIAogM3JkIFF1LjoyMC4wMCAgIDNyZCBRdS46Ni42MDAgICAxMzUgICAgOiAgMyAgIDNyZCBRdS46IDQ3LjU1ICAKIE1heC4gICA6MjMuMDAgICBNYXguICAgOjcuNzAwICAgKE90aGVyKToxNDcgICBNYXguICAgOjM3MC4wMCAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BJ3MgICA6IDE2ICAgICAgICAgICAgICAgICAgIAogICAgIGFjY2VsICAgICAgICAKIE1pbi4gICA6MC4wMDMwMCAgCiAxc3QgUXUuOjAuMDQ0MjUgIAogTWVkaWFuIDowLjExMzAwICAKIE1lYW4gICA6MC4xNTQyMiAgCiAzcmQgUXUuOjAuMjE5MjUgIAogTWF4LiAgIDowLjgxMDAwICAKICAgICAgICAgICAgICAgICAgCj4gc3VtbWFyeShhdHRlbnUsIGRpZ2l0cyA9IDUpCiAgICAgZXZlbnQgICAgICAgICAgICAgbWFnICAgICAgICAgICAgc3RhdGlvbiAgICAgICAgIGRpc3QgICAgICAgIAogTWluLiAgIDogMS4wMDAgICBNaW4uICAgOjUuMDAwMCAgIDExNyAgICA6ICA1ICAgTWluLiAgIDogIDAuNTAwICAKIDFzdCBRdS46IDkuMDAwICAgMXN0IFF1Ljo1LjMwMDAgICAxMDI4ICAgOiAgNCAgIDFzdCBRdS46IDExLjMyNSAgCiBNZWRpYW4gOjE4LjAwMCAgIE1lZGlhbiA6Ni4xMDAwICAgMTEzICAgIDogIDQgICBNZWRpYW4gOiAyMy40MDAgIAogTWVhbiAgIDoxNC43NDIgICBNZWFuICAgOjYuMDg0MSAgIDExMiAgICA6ICAzICAgTWVhbiAgIDogNDUuNjAzICAKIDNyZCBRdS46MjAuMDAwICAgM3JkIFF1Ljo2LjYwMDAgICAxMzUgICAgOiAgMyAgIDNyZCBRdS46IDQ3LjU1MCAgCiBNYXguICAgOjIzLjAwMCAgIE1heC4gICA6Ny43MDAwICAgKE90aGVyKToxNDcgICBNYXguICAgOjM3MC4wMDAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BJ3MgICA6IDE2ICAgICAgICAgICAgICAgICAgICAKICAgICBhY2NlbCAgICAgICAgCiBNaW4uICAgOjAuMDAzMDAgIAogMXN0IFF1LjowLjA0NDI1ICAKIE1lZGlhbiA6MC4xMTMwMCAgCiBNZWFuICAgOjAuMTU0MjIgIAogM3JkIFF1LjowLjIxOTI1ICAKIE1heC4gICA6MC44MTAwMCAgCiAgICAgICAgICAgICAgICAgIAo+IHN1bW1hcnkoZGF0YS5tYXRyaXgoYXR0ZW51KSwgZGlnaXRzID0gNSkjIHRoZSBzYW1lIGZvciBtYXRyaXgKICAgICBldmVudCAgICAgICAgICAgICBtYWcgICAgICAgICAgICBzdGF0aW9uICAgICAgICAgICAgIGRpc3QgICAgICAgIAogTWluLiAgIDogMS4wMDAgICBNaW4uICAgOjUuMDAwMCAgIE1pbi4gICA6ICAxLjAwMCAgIE1pbi4gICA6ICAwLjUwMCAgCiAxc3QgUXUuOiA5LjAwMCAgIDFzdCBRdS46NS4zMDAwICAgMXN0IFF1LjogMjQuMjUwICAgMXN0IFF1LjogMTEuMzI1ICAKIE1lZGlhbiA6MTguMDAwICAgTWVkaWFuIDo2LjEwMDAgICBNZWRpYW4gOiA1Ni41MDAgICBNZWRpYW4gOiAyMy40MDAgIAogTWVhbiAgIDoxNC43NDIgICBNZWFuICAgOjYuMDg0MSAgIE1lYW4gICA6IDU2LjkyOCAgIE1lYW4gICA6IDQ1LjYwMyAgCiAzcmQgUXUuOjIwLjAwMCAgIDNyZCBRdS46Ni42MDAwICAgM3JkIFF1LjogODYuNzUwICAgM3JkIFF1LjogNDcuNTUwICAKIE1heC4gICA6MjMuMDAwICAgTWF4LiAgIDo3LjcwMDAgICBNYXguICAgOjExNy4wMDAgICBNYXguICAgOjM3MC4wMDAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BJ3MgICA6MTYgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgYWNjZWwgICAgICAgIAogTWluLiAgIDowLjAwMzAwICAKIDFzdCBRdS46MC4wNDQyNSAgCiBNZWRpYW4gOjAuMTEzMDAgIAogTWVhbiAgIDowLjE1NDIyICAKIDNyZCBRdS46MC4yMTkyNSAgCiBNYXguICAgOjAuODEwMDAgIAogICAgICAgICAgICAgICAgICAKPiAjIyBDb21tZW50czoKPiAjIyBObyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgaW4gMS4yLjEgYW5kIGVhcmxpZXIKPiBzZXQuc2VlZCgxKQo+IHggPC0gYyhyb3VuZChydW5pZigxMCksIDIpLCAxMDAwMCkKPiBzdW1tYXJ5KHgpCiAgICAgTWluLiAgIDFzdCBRdS4gICAgTWVkaWFuICAgICAgTWVhbiAgIDNyZCBRdS4gICAgICBNYXguIAogICAgMC4wNjAgICAgIDAuMzIwICAgICAwLjYzMCAgIDkwOS41OTIgICAgIDAuOTA1IDEwMDAwLjAwMCAKPiBzdW1tYXJ5KGRhdGEuZnJhbWUoeCkpCiAgICAgICB4ICAgICAgICAgICAgCiBNaW4uICAgOiAgICAwLjA2MCAgCiAxc3QgUXUuOiAgICAwLjMyMCAgCiBNZWRpYW4gOiAgICAwLjYzMCAgCiBNZWFuICAgOiAgOTA5LjU5MiAgCiAzcmQgUXUuOiAgICAwLjkwNSAgCiBNYXguICAgOjEwMDAwLjAwMCAgCj4gIyMgQ29tbWVudHM6Cj4gIyMgQWxsIGVudHJpZXMgc2hvdyBhbGwgMyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgbm93Lgo+IAo+ICMjIENob25nIEd1IDIwMDEtRmViLTE2LiAgc3RlcCBvbiBiaW5vbWlhbHMKPiBkZXRnMSA8LQorIHN0cnVjdHVyZShsaXN0KFRlbXAgPSBzdHJ1Y3R1cmUoYygyTCwgMUwsIDJMLCAxTCwgMkwsIDFMLCAyTCwKKyAgICAgMUwsIDJMLCAxTCwgMkwsIDFMKSwgLkxhYmVsID0gYygiSGlnaCIsICJMb3ciKSwgY2xhc3MgPSAiZmFjdG9yIiksCisgICAgIE0udXNlciA9IHN0cnVjdHVyZShjKDFMLCAxTCwgMkwsIDJMLCAxTCwgMUwsIDJMLCAyTCwgMUwsCisgICAgIDFMLCAyTCwgMkwpLCAuTGFiZWwgPSBjKCJOIiwgIlkiKSwgY2xhc3MgPSAiZmFjdG9yIiksCisgICAgIFNvZnQgPSBzdHJ1Y3R1cmUoYygxTCwgMUwsIDFMLCAxTCwgMkwsIDJMLCAyTCwgMkwsIDNMLCAzTCwgM0wsIDNMKSwKKyAgICAgLkxhYmVsID0gYygiSGFyZCIsICJNZWRpdW0iLCAiU29mdCIpLCBjbGFzcyA9ICJmYWN0b3IiKSwKKyAgICAgTSA9IGMoNDIsIDMwLCA1MiwgNDMsCisgICAgIDUwLCAyMywgNTUsIDQ3LCA1MywgMjcsIDQ5LCAyOSksIFggPSBjKDY4LCA0MiwgMzcsIDI0LCA2NiwKKyAgICAgMzMsIDQ3LCAyMywgNjMsIDI5LCA1NywgMTkpKSwgLk5hbWVzID0gYygiVGVtcCIsICJNLnVzZXIiLAorICJTb2Z0IiwgIk0iLCAiWCIpLCBjbGFzcyA9ICJkYXRhLmZyYW1lIiwgcm93Lm5hbWVzID0gYygiMSIsICIzIiwKKyAiNSIsICI3IiwgIjkiLCAiMTEiLCAiMTMiLCAiMTUiLCAiMTciLCAiMTkiLCAiMjEiLCAiMjMiKSkKPiBkZXRnMS5tMCA8LSBnbG0oY2JpbmQoWCxNKX4xLGJpbm9taWFsLGRldGcxKQo+IGRldGcxLm0wCgpDYWxsOiAgZ2xtKGZvcm11bGEgPSBjYmluZChYLCBNKSB+IDEsIGZhbWlseSA9IGJpbm9taWFsLCBkYXRhID0gZGV0ZzEpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAKICAgIDAuMDE1ODcgIAoKRGVncmVlcyBvZiBGcmVlZG9tOiAxMSBUb3RhbCAoaS5lLiBOdWxsKTsgIDExIFJlc2lkdWFsCk51bGwgRGV2aWFuY2U6CSAgICAzMi44MyAKUmVzaWR1YWwgRGV2aWFuY2U6IDMyLjgzIAlBSUM6IDkyLjUyCj4gc3RlcChkZXRnMS5tMCxzY29wZT1saXN0KHVwcGVyPX5NLnVzZXIqVGVtcCpTb2Z0KSkKU3RhcnQ6ICBBSUM9OTIuNTIKY2JpbmQoWCwgTSkgfiAxCgogICAgICAgICBEZiBEZXZpYW5jZSAgICBBSUMKKyBNLnVzZXIgIDEgICAxMi4yNDQgNzMuOTQyCisgVGVtcCAgICAxICAgMjguNDY0IDkwLjE2Mgo8bm9uZT4gICAgICAgIDMyLjgyNiA5Mi41MjQKKyBTb2Z0ICAgIDIgICAzMi40MzAgOTYuMTI4CgpTdGVwOiAgQUlDPTczLjk0CmNiaW5kKFgsIE0pIH4gTS51c2VyCgogICAgICAgICBEZiBEZXZpYW5jZSAgICBBSUMKKyBUZW1wICAgIDEgICAgOC40NDQgNzIuMTQyCjxub25lPiAgICAgICAgMTIuMjQ0IDczLjk0MgorIFNvZnQgICAgMiAgIDExLjk2NyA3Ny42NjUKLSBNLnVzZXIgIDEgICAzMi44MjYgOTIuNTI0CgpTdGVwOiAgQUlDPTcyLjE0CmNiaW5kKFgsIE0pIH4gTS51c2VyICsgVGVtcAoKICAgICAgICAgICAgICBEZiBEZXZpYW5jZSAgICBBSUMKKyBNLnVzZXI6VGVtcCAgMSAgICA1LjY1NiA3MS4zNTQKPG5vbmU+ICAgICAgICAgICAgICA4LjQ0NCA3Mi4xNDIKLSBUZW1wICAgICAgICAgMSAgIDEyLjI0NCA3My45NDIKKyBTb2Z0ICAgICAgICAgMiAgICA4LjIyOCA3NS45MjYKLSBNLnVzZXIgICAgICAgMSAgIDI4LjQ2NCA5MC4xNjIKClN0ZXA6ICBBSUM9NzEuMzUKY2JpbmQoWCwgTSkgfiBNLnVzZXIgKyBUZW1wICsgTS51c2VyOlRlbXAKCiAgICAgICAgICAgICAgRGYgRGV2aWFuY2UgICAgQUlDCjxub25lPiAgICAgICAgICAgICA1LjY1NjAgNzEuMzU0Ci0gTS51c2VyOlRlbXAgIDEgICA4LjQ0NDAgNzIuMTQyCisgU29mdCAgICAgICAgIDIgICA1LjQ5NTIgNzUuMTkzCgpDYWxsOiAgZ2xtKGZvcm11bGEgPSBjYmluZChYLCBNKSB+IE0udXNlciArIFRlbXAgKyBNLnVzZXI6VGVtcCwgZmFtaWx5ID0gYmlub21pYWwsIAogICAgZGF0YSA9IGRldGcxKQoKQ29lZmZpY2llbnRzOgogICAgKEludGVyY2VwdCkgICAgICAgICAgTS51c2VyWSAgICAgICAgICBUZW1wTG93ICBNLnVzZXJZOlRlbXBMb3cgIAogICAgICAgIDAuMjYyMzYgICAgICAgICAtMC44NTE4MyAgICAgICAgICAwLjA0NDExICAgICAgICAgIDAuNDQ0MjcgIAoKRGVncmVlcyBvZiBGcmVlZG9tOiAxMSBUb3RhbCAoaS5lLiBOdWxsKTsgIDggUmVzaWR1YWwKTnVsbCBEZXZpYW5jZToJICAgIDMyLjgzIApSZXNpZHVhbCBEZXZpYW5jZTogNS42NTYgCUFJQzogNzEuMzUKPiAKPiAjIyBQUiA4MjkgKGVtcHR5IHZhbHVlcyBpbiBhbGwudmFycykKPiAjIyBUaGlzIGV4YW1wbGUgYnkgVXdlIExpZ2dlcyA8bGlnZ2VzQHN0YXRpc3Rpay51bmktZG9ydG11bmQuZGU+Cj4gCj4gdGVtcCA8LSBtYXRyaXgoMTo0LCAyKQo+IGFsbC52YXJzKHRlbXAgfiAzKSAjIE9LClsxXSAidGVtcCIKPiBhbGwudmFycyh0ZW1wWzEsIF0gfiAzKSAjIHdyb25nIGluIDEuMi4xClsxXSAidGVtcCIKPiAKPiAjIyAyMDAxLUZlYi0yMiBmcm9tIERhdmlkIFNjb3R0Lgo+ICMjIHJhbmstZGVmaWNpZW50IHJlc2lkdWFscyBpbiBhIG1hbm92YSBtb2RlbC4KPiBnb2ZYLmRmPC0KKyAgIHN0cnVjdHVyZShsaXN0KEEgPSBjKDAuNjk2NzA2NzA5MzQ3MTY1LCAwLjM2MjM1Nzc1NDQ3NjY3MywKKyAtMC4wMjkxOTk1MjIzMDEyODg4LAorIDAuNjk2NzA2NzA5MzQ3MTY1LCAwLjY5NjcwNjcwOTM0NzE2NSwgLTAuMDI5MTk5NTIyMzAxMjg4OCwgMC42OTY3MDY3MDkzNDcxNjUsCisgLTAuMDI5MTk5NTIyMzAxMjg4OCwgMC4zNjIzNTc3NTQ0NzY2NzMsIDAuNjk2NzA2NzA5MzQ3MTY1LCAtMC4wMjkxOTk1MjIzMDEyODg4LAorIDAuMzYyMzU3NzU0NDc2NjczLCAtMC40MTYxNDY4MzY1NDcxNDIsIDAuMzYyMzU3NzU0NDc2NjczLCAwLjY5NjcwNjcwOTM0NzE2NSwKKyAwLjY5NjcwNjcwOTM0NzE2NSwgMC4zNjIzNTc3NTQ0NzY2NzMsIC0wLjQxNjE0NjgzNjU0NzE0MiwgLTAuMDI5MTk5NTIyMzAxMjg4OCwKKyAtMC40MTYxNDY4MzY1NDcxNDIsIDAuNjk2NzA2NzA5MzQ3MTY1LCAtMC40MTYxNDY4MzY1NDcxNDIsIDAuMzYyMzU3NzU0NDc2NjczLAorIC0wLjAyOTE5OTUyMjMwMTI4ODgpLCBCID0gYygwLjcxNzM1NjA5MDg5OTUyMywgMC45MzIwMzkwODU5NjcyMjYsCisgMC45OTk1NzM2MDMwNDE1MDUsIDAuNzE3MzU2MDkwODk5NTIzLCAwLjcxNzM1NjA5MDg5OTUyMywgMC45OTk1NzM2MDMwNDE1MDUsCisgMC43MTczNTYwOTA4OTk1MjMsIDAuOTk5NTczNjAzMDQxNTA1LCAwLjkzMjAzOTA4NTk2NzIyNiwgMC43MTczNTYwOTA4OTk1MjMsCisgMC45OTk1NzM2MDMwNDE1MDUsIDAuOTMyMDM5MDg1OTY3MjI2LCAwLjkwOTI5NzQyNjgyNTY4MiwgMC45MzIwMzkwODU5NjcyMjYsCisgMC43MTczNTYwOTA4OTk1MjMsIDAuNzE3MzU2MDkwODk5NTIzLCAwLjkzMjAzOTA4NTk2NzIyNiwgMC45MDkyOTc0MjY4MjU2ODIsCisgMC45OTk1NzM2MDMwNDE1MDUsIDAuOTA5Mjk3NDI2ODI1NjgyLCAwLjcxNzM1NjA5MDg5OTUyMywgMC45MDkyOTc0MjY4MjU2ODIsCisgMC45MzIwMzkwODU5NjcyMjYsIDAuOTk5NTczNjAzMDQxNTA1KSwgQyA9IGMoLTAuMDI5MTk5NTIyMzAxMjg4OCwKKyAtMC43MzczOTM3MTU1NDEyNDYsIC0wLjk5ODI5NDc3NTc5NDc1MywgLTAuMDI5MTk5NTIyMzAxMjg4OCwKKyAtMC4wMjkxOTk1MjIzMDEyODg4LCAtMC45OTgyOTQ3NzU3OTQ3NTMsIC0wLjAyOTE5OTUyMjMwMTI4ODgsCisgLTAuOTk4Mjk0Nzc1Nzk0NzUzLCAtMC43MzczOTM3MTU1NDEyNDYsIC0wLjAyOTE5OTUyMjMwMTI4ODgsCisgLTAuOTk4Mjk0Nzc1Nzk0NzUzLCAtMC43MzczOTM3MTU1NDEyNDYsIC0wLjY1MzY0MzYyMDg2MzYxMiwgLTAuNzM3MzkzNzE1NTQxMjQ2LAorIC0wLjAyOTE5OTUyMjMwMTI4ODgsIC0wLjAyOTE5OTUyMjMwMTI4ODgsIC0wLjczNzM5MzcxNTU0MTI0NiwKKyAtMC42NTM2NDM2MjA4NjM2MTIsIC0wLjk5ODI5NDc3NTc5NDc1MywgLTAuNjUzNjQzNjIwODYzNjEyLAorIC0wLjAyOTE5OTUyMjMwMTI4ODgsCisgLTAuNjUzNjQzNjIwODYzNjEyLCAtMC43MzczOTM3MTU1NDEyNDYsIC0wLjk5ODI5NDc3NTc5NDc1MyksCisgICAgIEQgPSBjKDAuOTk5NTczNjAzMDQxNTA1LCAwLjY3NTQ2MzE4MDU1MTE1LCAtMC4wNTgzNzQxNDM0Mjc1ODAxLAorICAgICAwLjk5OTU3MzYwMzA0MTUwNSwgMC45OTk1NzM2MDMwNDE1MDUsIC0wLjA1ODM3NDE0MzQyNzU4MDEsCisgICAgIDAuOTk5NTczNjAzMDQxNTA1LCAtMC4wNTgzNzQxNDM0Mjc1ODAxLCAwLjY3NTQ2MzE4MDU1MTE1LAorICAgICAwLjk5OTU3MzYwMzA0MTUwNSwgLTAuMDU4Mzc0MTQzNDI3NTgwMSwgMC42NzU0NjMxODA1NTExNSwKKyAgICAgLTAuNzU2ODAyNDk1MzA3OTI4LCAwLjY3NTQ2MzE4MDU1MTE1LCAwLjk5OTU3MzYwMzA0MTUwNSwKKyAgICAgMC45OTk1NzM2MDMwNDE1MDUsIDAuNjc1NDYzMTgwNTUxMTUsIC0wLjc1NjgwMjQ5NTMwNzkyOCwKKyAgICAgLTAuMDU4Mzc0MTQzNDI3NTgwMSwgLTAuNzU2ODAyNDk1MzA3OTI4LCAwLjk5OTU3MzYwMzA0MTUwNSwKKyAgICAgLTAuNzU2ODAyNDk1MzA3OTI4LCAwLjY3NTQ2MzE4MDU1MTE1LCAtMC4wNTgzNzQxNDM0Mjc1ODAxCisgICAgICksIGdyb3VwcyA9IHN0cnVjdHVyZShjKDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIsIDIsIDIsCisgICAgIDIsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMpLCBjbGFzcyA9ICJmYWN0b3IiLCAuTGFiZWwgPSBjKCIxIiwKKyAgICAgIjIiLCAiMyIpKSksIC5OYW1lcyA9IGMoIkEiLCAiQiIsICJDIiwgIkQiLCAiZ3JvdXBzIiksIHJvdy5uYW1lcyA9IDE6MjQsCisgICAgICAgICAgICAgY2xhc3MgPSAiZGF0YS5mcmFtZSIpCj4gCj4gZ29mWC5tYW5vdmEgPC0gbWFub3ZhKGZvcm11bGEgPSBjYmluZChBLCBCLCBDLCBEKSB+IGdyb3VwcywgZGF0YSA9IGdvZlguZGYpCj4gdHJ5KHN1bW1hcnkoZ29mWC5tYW5vdmEpKQpFcnJvciBpbiBzdW1tYXJ5Lm1hbm92YShnb2ZYLm1hbm92YSkgOiByZXNpZHVhbHMgaGF2ZSByYW5rIDMgPCA0Cj4gIyMgc2hvdWxkIGZhaWwgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGByZXNpZHVhbHMgaGF2ZSByYW5rIDMgPCA0Jwo+IAo+ICMjIFByaW9yIHRvIDEuMy4wIGRpc3QgZGlkIG5vdCBoYW5kbGUgbWlzc2luZyB2YWx1ZXMsIGFuZCB0aGUKPiAjIyBpbnRlcm5hbCBDIGNvZGUgd2FzIGluY29ycmVjdGx5IHNjYWxpbmcgZm9yIG1pc3NpbmcgdmFsdWVzLgo+IHogPC0gYXMubWF0cml4KHQodHJlZXMpKQo+IHpbMSwxXSA8LSB6WzIsMl0gPC0gelszLDNdIDwtIHpbMiw0XSA8LSBOQQo+IGRpc3QoeiwgbWV0aG9kPSJldWNsaWRlYW4iKQogICAgICAgICAgR2lydGggICBIZWlnaHQKSGVpZ2h0IDM1Mi40MzY1ICAgICAgICAgClZvbHVtZSAxMjMuNTUwMyAyNjEuNTgwMgo+IGRpc3QoeiwgbWV0aG9kPSJtYXhpbXVtIikKICAgICAgIEdpcnRoIEhlaWdodApIZWlnaHQgIDcyLjcgICAgICAgClZvbHVtZSAgNTYuNCAgIDYzLjMKPiBkaXN0KHosIG1ldGhvZD0ibWFuaGF0dGFuIikKICAgICAgICAgICBHaXJ0aCAgICBIZWlnaHQKSGVpZ2h0IDE5NTQuODgyMSAgICAgICAgICAKVm9sdW1lICA1NTcuMTQ0OCAxMzkyLjM0MjkKPiBkaXN0KHosIG1ldGhvZD0iY2FuYmVycmEiKQogICAgICAgICAgR2lydGggICBIZWlnaHQKSGVpZ2h0IDIxLjY2NDc3ICAgICAgICAgClZvbHVtZSAxMC45NjIwMCAxMy42MzM2NQo+IAo+ICMjIEYuIFR1c2VsbCAyMDAxLTAzLTA3LiAgcHJpbnRpbmcga2VybmVscy4KPiBrZXJuZWwoImRhbmllbGwiLCBtPTUpCkRhbmllbGwoNSkgCmNvZWZbLTVdID0gMC4wOTA5MQpjb2VmWy00XSA9IDAuMDkwOTEKY29lZlstM10gPSAwLjA5MDkxCmNvZWZbLTJdID0gMC4wOTA5MQpjb2VmWy0xXSA9IDAuMDkwOTEKY29lZlsgMF0gPSAwLjA5MDkxCmNvZWZbIDFdID0gMC4wOTA5MQpjb2VmWyAyXSA9IDAuMDkwOTEKY29lZlsgM10gPSAwLjA5MDkxCmNvZWZbIDRdID0gMC4wOTA5MQpjb2VmWyA1XSA9IDAuMDkwOTEKPiBrZXJuZWwoIm1vZGlmaWVkLmRhbmllbGwiLCBtPTUpCm1EYW5pZWxsKDUpIApjb2VmWy01XSA9IDAuMDUKY29lZlstNF0gPSAwLjEwCmNvZWZbLTNdID0gMC4xMApjb2VmWy0yXSA9IDAuMTAKY29lZlstMV0gPSAwLjEwCmNvZWZbIDBdID0gMC4xMApjb2VmWyAxXSA9IDAuMTAKY29lZlsgMl0gPSAwLjEwCmNvZWZbIDNdID0gMC4xMApjb2VmWyA0XSA9IDAuMTAKY29lZlsgNV0gPSAwLjA1Cj4ga2VybmVsKCJkYW5pZWxsIiwgbT1jKDMsNSw3KSkKRGFuaWVsbCgzLDUsNykgCmNvZWZbLTE1XSA9IDAuMDAwODY1OApjb2VmWy0xNF0gPSAwLjAwMjU5NzQKY29lZlstMTNdID0gMC4wMDUxOTQ4CmNvZWZbLTEyXSA9IDAuMDA4NjU4MApjb2VmWy0xMV0gPSAwLjAxMjk4NzAKY29lZlstMTBdID0gMC4wMTgxODE4CmNvZWZbIC05XSA9IDAuMDI0MjQyNApjb2VmWyAtOF0gPSAwLjAzMDMwMzAKY29lZlsgLTddID0gMC4wMzYzNjM2CmNvZWZbIC02XSA9IDAuMDQyNDI0Mgpjb2VmWyAtNV0gPSAwLjA0ODQ4NDgKY29lZlsgLTRdID0gMC4wNTM2Nzk3CmNvZWZbIC0zXSA9IDAuMDU4MDA4Nwpjb2VmWyAtMl0gPSAwLjA2MTQ3MTkKY29lZlsgLTFdID0gMC4wNjQwNjkzCmNvZWZbICAwXSA9IDAuMDY0OTM1MQpjb2VmWyAgMV0gPSAwLjA2NDA2OTMKY29lZlsgIDJdID0gMC4wNjE0NzE5CmNvZWZbICAzXSA9IDAuMDU4MDA4Nwpjb2VmWyAgNF0gPSAwLjA1MzY3OTcKY29lZlsgIDVdID0gMC4wNDg0ODQ4CmNvZWZbICA2XSA9IDAuMDQyNDI0Mgpjb2VmWyAgN10gPSAwLjAzNjM2MzYKY29lZlsgIDhdID0gMC4wMzAzMDMwCmNvZWZbICA5XSA9IDAuMDI0MjQyNApjb2VmWyAxMF0gPSAwLjAxODE4MTgKY29lZlsgMTFdID0gMC4wMTI5ODcwCmNvZWZbIDEyXSA9IDAuMDA4NjU4MApjb2VmWyAxM10gPSAwLjAwNTE5NDgKY29lZlsgMTRdID0gMC4wMDI1OTc0CmNvZWZbIDE1XSA9IDAuMDAwODY1OAo+ICMjIGZpeGVkIGJ5IHBhdGNoIGZyb20gQWRyaWFuIFRyYXBsZXR0aSAyMDAxLTAzLTA4Cj4gCj4gIyMgU3RhcnQgbmV3IHllYXIgKGkuZS4gbGluZSkgYXQgSmFuOgo+ICh0dCA8LSB0cygxOjEwLCBzdGFydCA9IGMoMTkyMCw3KSwgZW5kID0gYygxOTIxLDQpLCBmcmVxID0gMTIpKQogICAgIEphbiBGZWIgTWFyIEFwciBNYXkgSnVuIEp1bCBBdWcgU2VwIE9jdCBOb3YgRGVjCjE5MjAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYKMTkyMSAgIDcgICA4ICAgOSAgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo+IGNiaW5kKHR0LCB0dCArIDEpCiAgICAgICAgIHR0IHR0ICsgMQpKdWwgMTkyMCAgMSAgICAgIDIKQXVnIDE5MjAgIDIgICAgICAzClNlcCAxOTIwICAzICAgICAgNApPY3QgMTkyMCAgNCAgICAgIDUKTm92IDE5MjAgIDUgICAgICA2CkRlYyAxOTIwICA2ICAgICAgNwpKYW4gMTkyMSAgNyAgICAgIDgKRmViIDE5MjEgIDggICAgICA5Ck1hciAxOTIxICA5ICAgICAxMApBcHIgMTkyMSAxMCAgICAgMTEKPiAKPiAKPiAjIyBQUiA4ODMgKGNvcih4LHkpIHdoZW4gaXMubnVsbCh5KSkKPiB0cnkoY292KHJub3JtKDEwKSwgTlVMTCkpCkVycm9yIGluIGNvdihybm9ybSgxMCksIE5VTEwpIDogCiAgc3VwcGx5IGJvdGggJ3gnIGFuZCAneScgb3IgYSBtYXRyaXgtbGlrZSAneCcKPiB0cnkoY29yKHJub3JtKDEwKSwgTlVMTCkpCkVycm9yIGluIGNvcihybm9ybSgxMCksIE5VTEwpIDogCiAgc3VwcGx5IGJvdGggJ3gnIGFuZCAneScgb3IgYSBtYXRyaXgtbGlrZSAneCcKPiAjIyBnYXZlIHRoZSB2YXJpYW5jZSBhbmQgMSByZXNwZWN0aXZlbHkgaW4gMS4yLjIuCj4gCj4gCj4gIyMgUFIgOTYwIChmb3JtYXQoKSBvZiBhIGNoYXJhY3RlciBtYXRyaXggY29udmVydHMgdG8gdmVjdG9yKQo+ICMjIGV4YW1wbGUgZnJvbSA8Sm9obi5QZXRlcnNAdGlwLmNzaXJvLmF1Pgo+IGEgPC0gbWF0cml4KGMoImF4eCIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiKSwgbnJvdz0yKQo+IGZvcm1hdChhKQogICAgIFssMV0gIFssMl0gIFssM10gIFssNF0gClsxLF0gImF4eCIgImMgICIgImUgICIgImcgICIKWzIsXSAiYiAgIiAiZCAgIiAiZiAgIiAiaCAgIgo+IGZvcm1hdChhLCBqdXN0aWZ5PSJyaWdodCIpCiAgICAgWywxXSAgWywyXSAgWywzXSAgWyw0XSAKWzEsXSAiYXh4IiAiICBjIiAiICBlIiAiICBnIgpbMixdICIgIGIiICIgIGQiICIgIGYiICIgIGgiCj4gIyMgbG9zdCBkaW1lbnNpb25zIGluIDEuMi4zCj4gCj4gCj4gIyMgUFIgOTYzCj4gcmVzIDwtIHN2ZChyYmluZCgxOjcpKSMjICR2IGxvc3QgZGltZW5zaW9ucyBpbiAxLjIuMwo+IGlmKHJlcyR1WzEsMV0gPCAwKSB7cmVzJHUgPC0gLXJlcyR1OyByZXMkdiA8LSAtcmVzJHZ9Cj4gcmVzCiRkClsxXSAxMS44MzIxNgoKJHUKICAgICBbLDFdClsxLF0gICAgMQoKJHYKICAgICAgICAgICBbLDFdClsxLF0gMC4wODQ1MTU0MwpbMixdIDAuMTY5MDMwODUKWzMsXSAwLjI1MzU0NjI4Cls0LF0gMC4zMzgwNjE3MApbNSxdIDAuNDIyNTc3MTMKWzYsXSAwLjUwNzA5MjU1Cls3LF0gMC41OTE2MDc5OAoKPiAKPiAKPiAjIyBNYWtlIHN1cmUgIG9uLmV4aXQoKSBrZWVwcyBiZWluZyBldmFsdWF0ZWQgaW4gdGhlIHByb3BlciBlbnYgW2Zyb20gUERdOgo+ICMjIEEgbW9yZSBjb21wbGV0ZSBleGFtcGxlOgo+IGcxIDwtIGZ1bmN0aW9uKGZpdHRlZCkgeyBvbi5leGl0KHJlbW92ZShmaXR0ZWQpKTsgcmV0dXJuKGZ1bmN0aW9uKGZvbykgZm9vKSB9Cj4gZzIgPC0gZnVuY3Rpb24oZml0dGVkKSB7IG9uLmV4aXQocmVtb3ZlKGZpdHRlZCkpOyAgICAgICAgZnVuY3Rpb24oZm9vKSBmb28gfQo+IGYgPC0gZnVuY3Rpb24oZykgeyBmaXR0ZWQgPC0gMTsgaCA8LSBnKGZpdHRlZCk7IHByaW50KGZpdHRlZCkKKyAgICAgICAgICAgICAgICAgICAgbHMoZW52aXI9ZW52aXJvbm1lbnQoaCkpIH0KPiBmKGcxKQpbMV0gMQpjaGFyYWN0ZXIoMCkKPiBmKGcyKQpbMV0gMQpjaGFyYWN0ZXIoMCkKPiAKPiBmMiA8LSBmdW5jdGlvbigpCisgeworICAgZy5mb28gPC0gZzEKKyAgIGcuYmFyIDwtIGcyCisgICBnIDwtIGZ1bmN0aW9uKHgsLi4uKSBVc2VNZXRob2QoImciKQorICAgZml0dGVkIDwtIDE7IGNsYXNzKGZpdHRlZCkgPC0gImZvbyIKKyAgIGggPC0gZyhmaXR0ZWQpOyBwcmludChmaXR0ZWQpOyBwcmludChscyhlbnZpcj1lbnZpcm9ubWVudChoKSkpCisgICBmaXR0ZWQgPC0gMTsgY2xhc3MoZml0dGVkKSA8LSAiYmFyIgorICAgaCA8LSBnKGZpdHRlZCk7IHByaW50KGZpdHRlZCk7IHByaW50KGxzKGVudmlyPWVudmlyb25tZW50KGgpKSkKKyAgIGludmlzaWJsZShOVUxMKQorIH0KPiBmMigpClsxXSAxCmF0dHIoLCJjbGFzcyIpClsxXSAiZm9vIgpjaGFyYWN0ZXIoMCkKWzFdIDEKYXR0cigsImNsYXNzIikKWzFdICJiYXIiCmNoYXJhY3RlcigwKQo+ICMjIFRoZSBmaXJzdCBjYXNlIGluIGYyKCkgaXMgYnJva2VuIGluIDEuMy4wKC1wYXRjaGVkKS4KPiAKPiAjIyBvbi5leGl0KCkgY29uc2lzdGVuY3kgY2hlY2sgZnJvbSBMdWtlOgo+IGcgPC0gZnVuY3Rpb24oKSBhcy5lbnZpcm9ubWVudCgtMSkKPiBmIDwtIGZ1bmN0aW9uKHgpIFVzZU1ldGhvZCgiZiIpCj4gZi5mb28gPC0gZnVuY3Rpb24oeCkgeyBvbi5leGl0KGUgPDwtIGcoKSk7IE5VTEwgfQo+IGYuYmFyIDwtIGZ1bmN0aW9uKHgpIHsgb24uZXhpdChlIDw8LSBnKCkpOyByZXR1cm4oTlVMTCkgfQo+IGYoc3RydWN0dXJlKDEsY2xhc3MgPSAiZm9vIikpCk5VTEwKPiBscyhlbnYgPSBlKSMgb25seSAieCIsIGkuZS4gKm5vdCogdGhlIEdsb2JhbEVudgpbMV0gIngiCj4gZihzdHJ1Y3R1cmUoMSxjbGFzcyA9ICJiYXIiKSkKTlVMTAo+IHN0b3BpZm5vdCgieCIgPT0gbHMoZW52ID0gZSkpIyBhcyBhYm92ZTsgd3JvbmdseSB3YXMgLkdsb2JhbEVudiBpbiBSIDEuMy54Cj4gCj4gCj4gIyMgc29tZSB0ZXN0cyB0aGF0IFIgc3VwcG9ydHMgbG9naWNhbCB2YXJpYWJsZXMgaW4gZm9ybXVsYWUKPiAjIyBpdCBjb2VyY2VkIHRoZW0gdG8gbnVtZXJpYyBwcmlvciB0byAxLjQuMAo+ICMjIHRoZXkgc2hvdWxkIGFwcGVhciBsaWtlIDItbGV2ZWwgZmFjdG9ycywgZm9sbG93aW5nIFMKPiAKPiBvbGRDb24gPC0gb3B0aW9ucygiY29udHJhc3RzIikKPiB5IDwtIHJub3JtKDEwKQo+IHggPC0gcmVwKGMoVFJVRSwgRkFMU0UpLCA1KQo+IG1vZGVsLm1hdHJpeCh5IH4geCkKICAgKEludGVyY2VwdCkgeFRSVUUKMSAgICAgICAgICAgIDEgICAgIDEKMiAgICAgICAgICAgIDEgICAgIDAKMyAgICAgICAgICAgIDEgICAgIDEKNCAgICAgICAgICAgIDEgICAgIDAKNSAgICAgICAgICAgIDEgICAgIDEKNiAgICAgICAgICAgIDEgICAgIDAKNyAgICAgICAgICAgIDEgICAgIDEKOCAgICAgICAgICAgIDEgICAgIDAKOSAgICAgICAgICAgIDEgICAgIDEKMTAgICAgICAgICAgIDEgICAgIDAKYXR0cigsImFzc2lnbiIpClsxXSAwIDEKYXR0cigsImNvbnRyYXN0cyIpCmF0dHIoLCJjb250cmFzdHMiKSR4ClsxXSAiY29udHIudHJlYXRtZW50IgoKPiBsbSh5IH4geCkKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geCkKCkNvZWZmaWNpZW50czoKKEludGVyY2VwdCkgICAgICAgIHhUUlVFICAKICAgLTAuMDUyOTMgICAgIC0wLjIwMDE4ICAKCj4gREYgPC0gZGF0YS5mcmFtZSh4LCB5KQo+IGxtKHkgfiB4LCBkYXRhPURGKQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiB4LCBkYXRhID0gREYpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICB4VFJVRSAgCiAgIC0wLjA1MjkzICAgICAtMC4yMDAxOCAgCgo+IG9wdGlvbnMoY29udHJhc3RzPWMoImNvbnRyLmhlbG1lcnQiLCAiY29udHIucG9seSIpKQo+IG1vZGVsLm1hdHJpeCh5IH4geCkKICAgKEludGVyY2VwdCkgeDEKMSAgICAgICAgICAgIDEgIDEKMiAgICAgICAgICAgIDEgLTEKMyAgICAgICAgICAgIDEgIDEKNCAgICAgICAgICAgIDEgLTEKNSAgICAgICAgICAgIDEgIDEKNiAgICAgICAgICAgIDEgLTEKNyAgICAgICAgICAgIDEgIDEKOCAgICAgICAgICAgIDEgLTEKOSAgICAgICAgICAgIDEgIDEKMTAgICAgICAgICAgIDEgLTEKYXR0cigsImFzc2lnbiIpClsxXSAwIDEKYXR0cigsImNvbnRyYXN0cyIpCmF0dHIoLCJjb250cmFzdHMiKSR4ClsxXSAiY29udHIuaGVsbWVydCIKCj4gbG0oeSB+IHgsIGRhdGE9REYpCgpDYWxsOgpsbShmb3JtdWxhID0geSB+IHgsIGRhdGEgPSBERikKCkNvZWZmaWNpZW50czoKKEludGVyY2VwdCkgICAgICAgICAgIHgxICAKICAgIC0wLjE1MzAgICAgICAtMC4xMDAxICAKCj4geiA8LSAxOjEwCj4gbG0oeSB+IHgqeikKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geCAqIHopCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICAgICB4MSAgICAgICAgICAgIHogICAgICAgICB4MTp6ICAKICAtMC4wODgwODkgICAgLTAuNTA4MTcwICAgIC0wLjAwNTEwMiAgICAgMC4wNzM3MzMgIAoKPiBsbSh5IH4geCp6IC0gMSkKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geCAqIHogLSAxKQoKQ29lZmZpY2llbnRzOgogICB4RkFMU0UgICAgICB4VFJVRSAgICAgICAgICB6ICAgICAgIHgxOnogIAogMC40MjAwODEgIC0wLjU5NjI1OSAgLTAuMDA1MTAyICAgMC4wNzM3MzMgIAoKPiBvcHRpb25zKG9sZENvbikKPiAKPiAjIyBkaWZmaW52LCBBZHJpYW4gVHJhcGxldHRpLCAyMDAxLTA4LTI3Cj4geCA8LSB0cygxOjEwKQo+IGRpZmZpbnYoZGlmZih4KSx4aT14WzFdKQpUaW1lIFNlcmllczoKU3RhcnQgPSAxIApFbmQgPSAxMCAKRnJlcXVlbmN5ID0gMSAKIFsxXSAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMAo+IGRpZmZpbnYoZGlmZih4LGxhZz0xLGRpZmZlcmVuY2VzPTIpLGxhZz0xLGRpZmZlcmVuY2VzPTIseGk9eFsxOjJdKQpUaW1lIFNlcmllczoKU3RhcnQgPSAxIApFbmQgPSAxMCAKRnJlcXVlbmN5ID0gMSAKIFsxXSAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMAo+ICMjIGxhc3QgaGFkIHdyb25nIHN0YXJ0IGFuZCBlbmQKPiAKPiAjIyBQUiMxMDcyICAoUmVhZGluZyBJbmYgYW5kIE5hTiB2YWx1ZXMpCj4gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoTmFOKSkKWzFdIE5hTgo+IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKEluZikpClsxXSBJbmYKPiAjIyB3ZXJlIE5BIG9uIFdpbmRvd3MgYXQgbGVhc3QgdW5kZXIgMS4zLjAuCj4gCj4gIyMgUFIjMTA5MiAocm93c3VtIGRpbW5hbWVzKQo+IHJvd3N1bShtYXRyaXgoMToxMiwgMyw0KSwgYygiWSIsIlgiLCJZIikpCiAgWywxXSBbLDJdIFssM10gWyw0XQpYICAgIDIgICAgNSAgICA4ICAgMTEKWSAgICA0ICAgMTAgICAxNiAgIDIyCj4gIyMgcm93bmFtZXMgd2VyZSAxLDIgaW4gPD0gMS4zLjEuCj4gCj4gIyMgUFIjMTExNSAoc2F2aW5nIHN0cmluZ3Mgd2l0aCBhc2NpaT1UUlVFKQo+IHggPC0geSA8LSB1bmxpc3QoYXMubGlzdCgKKyAgICAgcGFyc2UodGV4dD1wYXN0ZSgiXCJcXCIsIGFzLmNoYXJhY3Rlcihhcy5vY3Rtb2RlKDE6MjU1KSksICJcIiIsc2VwPSIiKSkpKQo+IHNhdmUoeCwgYXNjaWk9VFJVRSwgZmlsZT0oZm4gPC0gdGVtcGZpbGUoKSkpCj4gbG9hZChmbikKPiBhbGwoeD09eSkKWzFdIFRSVUUKPiB1bmxpbmsoZm4pCj4gIyMgMS4zLjEgaGFkIHRyb3VibGUgd2l0aCBcCj4gCj4gCj4gIyMgU29tZSB0ZXN0cyBvZiBzaW5rKCkgYW5kIGNvbm5lY3Rpb25zKCkKPiAjIyBjYXB0dXJlIGFsbCB0aGUgb3V0cHV0IHRvIGEgZmlsZS4KPiB6eiA8LSBmaWxlKCJhbGwuUm91dCIsIG9wZW49Ind0IikKPiBzaW5rKHp6KQo+IHNpbmsoenosIHR5cGU9Im1lc3NhZ2UiKQo+IHRyeShsb2coImEiKSkKPiAjIyBiYWNrIHRvIHRoZSBjb25zb2xlCj4gc2luayh0eXBlPSJtZXNzYWdlIikKPiBzaW5rKCkKPiB0cnkobG9nKCJhIikpCkVycm9yIGluIGxvZygiYSIpIDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gbWF0aGVtYXRpY2FsIGZ1bmN0aW9uCj4gCj4gIyMgY2FwdHVyZSBhbGwgdGhlIG91dHB1dCB0byBhIGZpbGUuCj4genogPC0gZmlsZSgiYWxsLlJvdXQiLCBvcGVuPSJ3dCIpCj4gc2luayh6eikKPiBzaW5rKHp6LCB0eXBlPSJtZXNzYWdlIikKPiB0cnkobG9nKCJhIikpCj4gCj4gIyMgYmFpbCBvdXQKPiBjbG9zZUFsbENvbm5lY3Rpb25zKCkKPiAoZm9vIDwtIHNob3dDb25uZWN0aW9ucygpKQogICAgIGRlc2NyaXB0aW9uIGNsYXNzIG1vZGUgdGV4dCBpc29wZW4gY2FuIHJlYWQgY2FuIHdyaXRlCj4gc3RvcGlmbm90KG5yb3coZm9vKSA9PSAwKQo+IHRyeShsb2coImEiKSkKRXJyb3IgaW4gbG9nKCJhIikgOiBub24tbnVtZXJpYyBhcmd1bWVudCB0byBtYXRoZW1hdGljYWwgZnVuY3Rpb24KPiB1bmxpbmsoImFsbC5Sb3V0IikKPiAjIyBtYW55IG9mIHRoZXNlIHdlcmUgdW50ZXN0ZWQgYmVmb3JlIDEuNC4wLgo+IAo+IAo+ICMjIHRlc3QgbWVhbigpIHdvcmtzIG9uIGxvZ2ljYWwgYnV0IG5vdCBmYWN0b3IKPiB4IDwtIGMoVFJVRSwgRkFMU0UsIFRSVUUsIFRSVUUpCj4gbWVhbih4KQpbMV0gMC43NQo+IG1lYW4oYXMuZmFjdG9yKHgpKQpbMV0gTkEKV2FybmluZyBtZXNzYWdlOgpJbiBtZWFuLmRlZmF1bHQoYXMuZmFjdG9yKHgpKSA6CiAgYXJndW1lbnQgaXMgbm90IG51bWVyaWMgb3IgbG9naWNhbDogcmV0dXJuaW5nIE5BCj4gIyMgbGFzdCBoYWQgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2UgaW4gMS4zLjEuCj4gCj4gCj4gIyMgS3VydCBIb3JuaWsgMjAwMS1Ob3YtMTMKPiB6IDwtIHRhYmxlKHggPSAxOjIsIHkgPSAxOjIpCj4geiAtIDEKICAgeQp4ICAgIDEgIDIKICAxICAwIC0xCiAgMiAtMSAgMAo+IHVuY2xhc3MoeiAtIDEpCiAgIHkKeCAgICAxICAyCiAgMSAgMCAtMQogIDIgLTEgIDAKPiAjIyBsb3N0IG9iamVjdCBiaXQgcHJpb3IgdG8gMS40LjAsIHNvIHByaW50ZWQgY2xhc3MgYXR0cmlidXRlLgo+IAo+IAo+ICMjIFBSIzEyMjYgIChwcmVkaWN0Lm1sbSBpZ25vcmVkIG5ld2RhdGEpCj4gY3RsIDwtIGMoNC4xNyw1LjU4LDUuMTgsNi4xMSw0LjUwLDQuNjEsNS4xNyw0LjUzLDUuMzMsNS4xNCkKPiB0cnQgPC0gYyg0LjgxLDQuMTcsNC40MSwzLjU5LDUuODcsMy44Myw2LjAzLDQuODksNC4zMiw0LjY5KQo+IGdyb3VwIDwtIGdsKDIsMTAsMjAsIGxhYmVscyA9IGMoIkN0bCIsIlRydCIpKQo+IHdlaWdodCA8LSBjKGN0bCwgdHJ0KQo+IGRhdGEgPC0gZGF0YS5mcmFtZSh3ZWlnaHQsIGdyb3VwKQo+IGZpdCA8LSBsbShjYmluZCh3PXdlaWdodCwgdzI9d2VpZ2h0XjIpIH4gZ3JvdXAsIGRhdGE9ZGF0YSkKPiBwcmVkaWN0KGZpdCwgbmV3ZGF0YT1kYXRhWzE6MiwgXSkKICAgICAgdyAgICAgICB3MgoxIDUuMDMyIDI1LjYyNzAyCjIgNS4wMzIgMjUuNjI3MDIKPiAjIyB3YXMgMjAgcm93cyBpbiBSIDw9IDEuNC4wCj4gCj4gCj4gIyMgQ2hvbmcgR3UgMjAwMi1GZWItODogYC4nIG5vdCBleHBhbmRlZCBpbiBkcm9wMQo+IGxhYiA8LSBkaW1uYW1lcyhIYWlyRXllQ29sb3IpCj4gSGFpckV5ZSA8LSBjYmluZChleHBhbmQuZ3JpZChIYWlyPWxhYiRIYWlyLCBFeWU9bGFiJEV5ZSwgU2V4PWxhYiRTZXgsCisgCQkJICAgICBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSksCisgCQkgRnIgPSBhcy52ZWN0b3IoSGFpckV5ZUNvbG9yKSkKPiBIYWlyRXllLmZpdCA8LSBnbG0oRnIgfiAuIF4yLCBwb2lzc29uLCBIYWlyRXllKQo+IGRyb3AxKEhhaXJFeWUuZml0KQpTaW5nbGUgdGVybSBkZWxldGlvbnMKCk1vZGVsOgpGciB+IChIYWlyICsgRXllICsgU2V4KV4yCiAgICAgICAgIERmIERldmlhbmNlICAgIEFJQwo8bm9uZT4gICAgICAgICA2Ljc2MSAxOTEuNjQKSGFpcjpFeWUgIDkgIDE1Ni42NzggMzIzLjU2CkhhaXI6U2V4ICAzICAgMTguMzI3IDE5Ny4yMQpFeWU6U2V4ICAgMyAgIDExLjc2NCAxOTAuNjQKPiAjIyBicm9rZW4gYXJvdW5kIDEuMi4xIGl0IHNlZW1zLgo+IAo+IAo+ICMjIFBSIzEzMjkgIChzdWJzY3JpcHRpbmcgbWF0cml4IGxpc3RzKQo+IG0gPC0gbGlzdChhMT0xOjMsIGEyPTQ6NiwgYTM9cGksIGE0PWMoImEiLCJiIiwiYyIpKQo+IGRpbShtKSA8LSBjKDIsMikKPiBtCiAgICAgWywxXSAgICAgIFssMl0gICAgICAgClsxLF0gSW50ZWdlciwzIDMuMTQxNTkzICAgClsyLF0gSW50ZWdlciwzIENoYXJhY3RlciwzCj4gbVssMl0KW1sxXV0KWzFdIDMuMTQxNTkzCgpbWzJdXQpbMV0gImEiICJiIiAiYyIKCj4gbVsyLDJdCltbMV1dClsxXSAiYSIgImIiICJjIgoKPiAjIyAxLjQuMSByZXR1cm5lZCBudWxsIGNvbXBvbmVudHM6IHRoZSBjYXNlIHdhcyBtaXNzaW5nIGZyb20gYSBzd2l0Y2guCj4gCj4gbSA8LSBsaXN0KGExPTE6MywgYTI9NDo2LCBhMz1waSwgYTQ9YygiYSIsImIiLCJjIikpCj4gbWF0cml4KG0sIDIsIDIpCiAgICAgWywxXSAgICAgIFssMl0gICAgICAgClsxLF0gSW50ZWdlciwzIDMuMTQxNTkzICAgClsyLF0gSW50ZWdlciwzIENoYXJhY3RlciwzCj4gIyMgMS40LjEgZ2F2ZSBgVW5pbXBsZW1lbnRlZCBmZWF0dXJlIGluIGNvcHlWZWN0b3InCj4gCj4geCA8LSB2ZWN0b3IoImxpc3QiLDYpCj4gZGltKHgpIDwtIGMoMiwzKQo+IHhbMSwyXSA8LSBsaXN0KGxldHRlcnNbMTA6MTFdKQo+IHgKICAgICBbLDFdIFssMl0gICAgICAgIFssM10KWzEsXSBOVUxMIENoYXJhY3RlciwyIE5VTEwKWzIsXSBOVUxMIE5VTEwgICAgICAgIE5VTEwKPiAjIyAxLjQuMSBnYXZlIGBpbmNvbXBhdGlibGUgdHlwZXMgaW4gc3Vic2V0IGFzc2lnbm1lbnQnCj4gCj4gCj4gIyMgcHJpbnRpbmcgb2YgbWF0cml4IGxpc3RzCj4gbSA8LSBsaXN0KGFzLmludGVnZXIoMSksIHBpLCAzKzVpLCAidGVzdGl0IiwgVFJVRSwgZmFjdG9yKCJmb28iKSkKPiBkaW0obSkgPC0gYygxLCA2KQo+IG0KICAgICBbLDFdIFssMl0gICAgIFssM10gWyw0XSAgICAgWyw1XSBbLDZdICAgIApbMSxdIDEgICAgMy4xNDE1OTMgMys1aSAidGVzdGl0IiBUUlVFIGZhY3RvciwxCj4gIyMgcHJpb3IgdG8gMS41LjAgaGFkIHF1b3RlcyBmb3IgMkQgY2FzZSAoYnV0IG5vdCBrRCwgayA+IDIpLAo+ICMjIGdhdmUgIm51bWVyaWMsMSIgZXRjLCAoZXZlbiAibnVtZXJpYywxIiBmb3IgaW50ZWdlcnMgYW5kIGZhY3RvcnMpCj4gCj4gCj4gIyMgZW5zdXJlIFJORyBpcyB1bmFsdGVyZWQuCj4gZm9yKHR5cGUgaW4gYygiV2ljaG1hbm4tSGlsbCIsICJNYXJzYWdsaWEtTXVsdGljYXJyeSIsICJTdXBlci1EdXBlciIsCisgICAgICAgICAgICAgICAiTWVyc2VubmUtVHdpc3RlciIsICJLbnV0aC1UQU9DUCIsICJLbnV0aC1UQU9DUC0yMDAyIikpCisgeworICAgICBzZXQuc2VlZCgxMjMsIHR5cGUpCisgICAgIHByaW50KFJOR2tpbmQoKSkKKyAgICAgcnVuaWYoMTAwKTsgcHJpbnQocnVuaWYoNCkpCisgICAgIHNldC5zZWVkKDEwMDAsIHR5cGUpCisgICAgIHJ1bmlmKDEwMCk7IHByaW50KHJ1bmlmKDQpKQorICAgICBzZXQuc2VlZCg3NywgdHlwZSkKKyAgICAgcnVuaWYoMTAwKTsgcHJpbnQocnVuaWYoNCkpCisgfQpbMV0gIldpY2htYW5uLUhpbGwiICJJbnZlcnNpb24iICAgICAiUmVqZWN0aW9uIiAgICAKWzFdIDAuODMwODg0MSAwLjQ2NDAyMjEgMC45NDYwMDgyIDAuODc2NDY0NApbMV0gMC4xMjkwOTg3NiAwLjA3Mjk0ODUxIDAuNDU1OTQ1NjAgMC42ODg4NDkxMQpbMV0gMC40MDYyNDUwIDAuNzE4ODQzMiAwLjYyNDE3MzggMC4yNTExNjExClsxXSAiTWFyc2FnbGlhLU11bHRpY2FycnkiICJJbnZlcnNpb24iICAgICAgICAgICAgIlJlamVjdGlvbiIgICAgICAgICAgIApbMV0gMC4zNDc5NzA1IDAuOTQ2OTM1MSAwLjI0ODkyMDcgMC43MzI5MjUxClsxXSAwLjUwNDE1MTIgMC4zNjE3ODczIDAuMTQ2OTE4NCAwLjM3OTgxMTkKWzFdIDAuMTQzODgxMjggMC4wNDE5NjI5NCAwLjM2MjE0MDE1IDAuODYwNTM1NzUKWzFdICJTdXBlci1EdXBlciIgIkludmVyc2lvbiIgICAiUmVqZWN0aW9uIiAgClsxXSAwLjI3MjI1MTAgMC45MjMwMjQwIDAuMzk3MTc0MyAwLjgyODQ0NzQKWzFdIDAuNTcwNjI0MSAwLjE4MDYwMjMgMC45NjMzODYwIDAuODQzNDQ0NApbMV0gMC4wOTM1NjU4NSAwLjQxMDgxMTI0IDAuMzg2MzU2MjcgMC43Mjk5MzM5NgpbMV0gIk1lcnNlbm5lLVR3aXN0ZXIiICJJbnZlcnNpb24iICAgICAgICAiUmVqZWN0aW9uIiAgICAgICAKWzFdIDAuNTk5OTg5MCAwLjMzMjgyMzUgMC40ODg2MTMwIDAuOTU0NDczOApbMV0gMC41OTkzNjc5IDAuNDUxNjgxOCAwLjEzNjgyNTQgMC43MjYxNzg4ClsxXSAwLjA5NTk0OTYxIDAuMzEyMzU2NTEgMC44MTI0NDMzNSAwLjcyMzMwODQ2ClsxXSAiS251dGgtVEFPQ1AiICJJbnZlcnNpb24iICAgIlJlamVjdGlvbiIgIApbMV0gMC45NDQ1NTAyIDAuMzM2NjI5NyAwLjYyOTY4ODEgMC41OTE0MTYxClsxXSAwLjkyMTM5NTQgMC41NDY4MTM4IDAuODgxNzEwMCAwLjQ0NDIyMzcKWzFdIDAuODAxNjk2MiAwLjkyMjYwODAgMC4xNDczNDg0IDAuODgyNzcwNwpbMV0gIktudXRoLVRBT0NQLTIwMDIiICJJbnZlcnNpb24iICAgICAgICAiUmVqZWN0aW9uIiAgICAgICAKWzFdIDAuOTMwMzYzNCAwLjI4MTIyMzkgMC4xMDg1ODA2IDAuODA1MzIyOApbMV0gMC4yOTE2NjI3IDAuOTA4NTAxNyAwLjc5NTg5NjUgMC4xOTgwNjU1ClsxXSAwLjA1MjQ3NTc1IDAuMjgyOTA4NjcgMC4yMDkzMDMyNCAwLjE2Nzk0ODg3Cj4gUk5Ha2luZChub3JtYWwua2luZCA9ICJLaW5kZXJtYW4tUmFtYWdlIikKPiBzZXQuc2VlZCgxMjMpCj4gUk5Ha2luZCgpClsxXSAiS251dGgtVEFPQ1AtMjAwMiIgIktpbmRlcm1hbi1SYW1hZ2UiICJSZWplY3Rpb24iICAgICAgIAo+IHJub3JtKDQpClsxXSAtMS45Njk5MDkwIC0yLjI0MjkzNDAgIDAuNTMzOTMyMSAgMC4yMDk3MTUzCj4gUk5Ha2luZChub3JtYWwua2luZCA9ICJBaHJlbnMtRGlldGVyIikKPiBzZXQuc2VlZCgxMjMpCj4gUk5Ha2luZCgpClsxXSAiS251dGgtVEFPQ1AtMjAwMiIgIkFocmVucy1EaWV0ZXIiICAgICJSZWplY3Rpb24iICAgICAgIAo+IHJub3JtKDQpClsxXSAgMC4wNjI2NzIyOSAgMC4xMjQyMTU2OCAtMS44NjY1MzQ5OSAtMC4xNDUzNTkyMQo+IFJOR2tpbmQobm9ybWFsLmtpbmQgPSAiQm94LU11bGxlciIpCj4gc2V0LnNlZWQoMTIzKQo+IFJOR2tpbmQoKQpbMV0gIktudXRoLVRBT0NQLTIwMDIiICJCb3gtTXVsbGVyIiAgICAgICAiUmVqZWN0aW9uIiAgICAgICAKPiBybm9ybSg0KQpbMV0gIDIuMjYxNjA5OTAgIDAuNTkwMTAzMDMgIDAuMzAxNzYwNDUgLTAuMDEzNDYxMzkKPiBzZXQuc2VlZCgxMjMpCj4gcnVuaWYoNCkKWzFdIDAuMDQwNjIxMzAgMC4wNjUxMTgyNSAwLjk5MjkwNDg4IDAuOTU1NDA0NjcKPiBzZXQuc2VlZCgxMjMsICJkZWZhdWx0IikKPiBzZXQuc2VlZCgxMjMsICJNYXJzYWdsaWEtTXVsdGljYXJyeSIpICMjIENhcmVmdWwsIG5vdCB0aGUgZGVmYXVsdCBhbnltb3JlCj4gcnVuaWYoNCkKWzFdIDAuMTIwMDQyNyAwLjE5OTE2MDAgMC43MjkyODIxIDAuODExNTkyMgo+ICMjIGxhc3Qgc2V0LnNlZWQgZmFpbGVkIDwgMS41LjAuCj4gCj4gCj4gIyMgbWVyZ2luZywgZ2dyb3RoZW5kaWVja0B5aWZhbi5uZXQsIDIwMDItMDMtMTYKPiBkLmRmIDwtIGRhdGEuZnJhbWUoeCA9IDE6MywgeSA9IGMoIkEiLCJEIiwiRSIpLCB6ID0gYyg2LDksMTApKQo+IG1lcmdlKGQuZGZbMSxdLCBkLmRmKQogIHggeSB6CjEgMSBBIDYKPiAjIyAxLjQuMSBnb3QgY29uZnVzZWQgYnkgaW5jb25zaXN0ZW5jaWVzIGluIGFzLmNoYXJhY3Rlcgo+IAo+IAo+ICMjIFBSIzEzOTQgKGxldmVsczwtLmZhY3RvcikKPiBmIDwtIGZhY3RvcihjKCJhIiwiYiIpKQo+IGxldmVscyhmKSA8LSBsaXN0KEM9IkMiLCBBPSJhIiwgQj0iYiIpCj4gZgpbMV0gQSBCCkxldmVsczogQyBBIEIKPiAjIyB3YXMgIFsxXSBDIEE7IExldmVsczogIEMgQSAgaW4gMS40LjEKPiAKPiAKPiAjIyBOQSBsZXZlbHMgaW4gZmFjdG9ycwo+ICh4IDwtIGZhY3RvcihjKCJhIiwgIk5BIiwgImIiKSwgZXhjbHVkZT1OVUxMKSkKWzFdIGEgIE5BIGIgCkxldmVsczogTkEgYSBiCj4gIyMgMS40LjEgaGFkIHdyb25nIG9yZGVyIGZvciBsZXZlbHMKPiBpcy5uYSh4KVszXSA8LSBUUlVFCj4geApbMV0gYSAgICBOQSAgIDxOQT4KTGV2ZWxzOiBOQSBhIGIKPiAjIyBtaXNzaW5nIGVudHJ5IHByaW50cyBhcyA8TkE+Cj4gCj4gCj4gIyMgcHJpbnRpbmcvZm9ybWF0dGluZyBOQSBzdHJpbmdzCj4gKHggPC0gYygiYSIsICJOQSIsIE5BLCAiYiIpKQpbMV0gImEiICAiTkEiIE5BICAgImIiIAo+IHByaW50KHgsIHF1b3RlID0gRkFMU0UpClsxXSBhICAgIE5BICAgPE5BPiBiICAgCj4gcGFzdGUoeCkKWzFdICJhIiAgIk5BIiAiTkEiICJiIiAKPiBmb3JtYXQoeCkKWzFdICJhICIgIk5BIiAiTkEiICJiICIKPiBmb3JtYXQoeCwganVzdGlmeSA9ICJyaWdodCIpClsxXSAiIGEiICJOQSIgIk5BIiAiIGIiCj4gZm9ybWF0KHgsIGp1c3RpZnkgPSAibm9uZSIpClsxXSAiYSIgICJOQSIgIk5BIiAiYiIgCj4gIyMgbm90IGlkZWFsLgo+IAo+IAo+ICMjIHByaW50LnRzIHByb2JsZW1zICBnZ3JvdGhlbmRpZWNrQHlpZmFuLm5ldCBvbiBSLWhlbHAsIDIwMDItMDQtMDEKPiB4IDwtIDE6MjAKPiB0dDEgPC0gdHMoeCxzdGFydD1jKDE5NjAsMiksIGZyZXE9MTIpCj4gdHQyIDwtIHRzKDEwK3gsc3RhcnQ9YygxOTYwLDIpLCBmcmVxPTEyKQo+IGNiaW5kKHR0MSwgdHQyKQogICAgICAgICB0dDEgdHQyCkZlYiAxOTYwICAgMSAgMTEKTWFyIDE5NjAgICAyICAxMgpBcHIgMTk2MCAgIDMgIDEzCk1heSAxOTYwICAgNCAgMTQKSnVuIDE5NjAgICA1ICAxNQpKdWwgMTk2MCAgIDYgIDE2CkF1ZyAxOTYwICAgNyAgMTcKU2VwIDE5NjAgICA4ICAxOApPY3QgMTk2MCAgIDkgIDE5Ck5vdiAxOTYwICAxMCAgMjAKRGVjIDE5NjAgIDExICAyMQpKYW4gMTk2MSAgMTIgIDIyCkZlYiAxOTYxICAxMyAgMjMKTWFyIDE5NjEgIDE0ICAyNApBcHIgMTk2MSAgMTUgIDI1Ck1heSAxOTYxICAxNiAgMjYKSnVuIDE5NjEgIDE3ICAyNwpKdWwgMTk2MSAgMTggIDI4CkF1ZyAxOTYxICAxOSAgMjkKU2VwIDE5NjEgIDIwICAzMAo+ICMjIDEuNC4xIGhhZCBgSmFuIDE5NjEnIGFzIGBOQSAxOTYxJwo+ICMjIC4uLmFuZCAxLjkuMSBoYWQgaXQgYXMgYEphbiAxOTYwJyEhCj4gCj4gIyMgZ2xtIGJvdW5kYXJ5IGJ1Z3MgKHJlbGF0ZWQgdG8gUFIjMTMzMSkKPiB4IDwtIGMoMC4zNSwgMC42NCwgMC4xMiwgMS42NiwgMS41MiwgMC4yMywgLTEuOTksIDAuNDIsIDEuODYsIC0wLjAyLAorICAgICAgICAtMS42NCwgLTAuNDYsIC0wLjEsIDEuMjUsIDAuMzcsIDAuMzEsIDEuMTEsIDEuNjUsIDAuMzMsIDAuODksCisgICAgICAgIC0wLjI1LCAtMC44NywgLTAuMjIsIDAuNzEsIC0yLjI2LCAwLjc3LCAtMC4wNSwgMC4zMiwgLTAuNjQsIDAuMzksCisgICAgICAgIDAuMTksIC0xLjYyLCAwLjM3LCAwLjAyLCAwLjk3LCAtMi42MiwgMC4xNSwgMS41NSwgLTEuNDEsIC0yLjM1LAorICAgICAgICAtMC40MywgMC41NywgLTAuNjYsIC0wLjA4LCAwLjAyLCAwLjI0LCAtMC4zMywgLTAuMDMsIC0xLjEzLCAwLjMyLAorICAgICAgICAxLjU1LCAyLjEzLCAtMC4xLCAtMC4zMiwgLTAuNjcsIDEuNDQsIDAuMDQsIC0xLjEsIC0wLjk1LCAtMC4xOSwKKyAgICAgICAgLTAuNjgsIC0wLjQzLCAtMC44NCwgMC42OSwgLTAuNjUsIDAuNzEsIDAuMTksIDAuNDUsIDAuNDUsIC0xLjE5LAorICAgICAgICAxLjMsIDAuMTQsIC0wLjM2LCAtMC41LCAtMC40NywgLTEuMzEsIC0xLjAyLCAxLjE3LCAxLjUxLCAtMC4zMywKKyAgICAgICAgLTAuMDEsIC0wLjU5LCAtMC4yOCwgLTAuMTgsIC0xLjA3LCAwLjY2LCAtMC43MSwgMS44OCwgLTAuMTQsCisgICAgICAgIC0wLjE5LCAwLjg0LCAwLjQ0LCAxLjMzLCAtMC4yLCAtMC40NSwgMS40NiwgMSwgLTEuMDIsIDAuNjgsIDAuODQpCj4geSA8LSBjKDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsCisgICAgICAgIDEsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgICAgIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDEsCisgICAgICAgIDEsIDAsIDAsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDApCj4gdHJ5KGdsbSh5IH4geCwgZmFtaWx5ID0gcG9pc3NvbihpZGVudGl0eSkpKQpFcnJvciA6IG5vIHZhbGlkIHNldCBvZiBjb2VmZmljaWVudHMgaGFzIGJlZW4gZm91bmQ6IHBsZWFzZSBzdXBwbHkgc3RhcnRpbmcgdmFsdWVzCkluIGFkZGl0aW9uOiBXYXJuaW5nIG1lc3NhZ2U6CkluIGxvZyh5L211KSA6IE5hTnMgcHJvZHVjZWQKPiAjIyBmYWlsZWQgYmVjYXVzZSBzdGFydCA9IE5VTEwgaW4gMS40LjEKPiAjIyBub3cgZ2l2ZXMgdXNlZnVsIGVycm9yIG1lc3NhZ2UKPiBnbG0oeSB+IHgsIGZhbWlseSA9IHBvaXNzb24oaWRlbnRpdHkpLCBzdGFydCA9IGMoMSwwKSkKCkNhbGw6ICBnbG0oZm9ybXVsYSA9IHkgfiB4LCBmYW1pbHkgPSBwb2lzc29uKGlkZW50aXR5KSwgc3RhcnQgPSBjKDEsIAogICAgMCkpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICAgICAgeCAgCiAgICAgMC41MTE0ICAgICAgIDAuMTY5MCAgCgpEZWdyZWVzIG9mIEZyZWVkb206IDk5IFRvdGFsIChpLmUuIE51bGwpOyAgOTggUmVzaWR1YWwKTnVsbCBEZXZpYW5jZToJICAgIDY4LjAxIApSZXNpZHVhbCBEZXZpYW5jZTogNjAuNjYgCUFJQzogMTY4LjcKV2FybmluZyBtZXNzYWdlczoKMTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcyAKMjogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcyAKPiAjIyBzdGVwIHJlZHVjdGlvbiBmYWlsZWQgaW4gMS40LjEKPiBzZXQuc2VlZCgxMjMpCj4geSA8LSBycG9pcygxMDAsIHBtYXgoMyp4LCAwKSkKPiBnbG0oeSB+IHgsIGZhbWlseSA9IHBvaXNzb24oaWRlbnRpdHkpLCBzdGFydCA9IGMoMSwwKSkKCkNhbGw6ICBnbG0oZm9ybXVsYSA9IHkgfiB4LCBmYW1pbHkgPSBwb2lzc29uKGlkZW50aXR5KSwgc3RhcnQgPSBjKDEsIAogICAgMCkpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICAgICAgeCAgCiAgICAgMS4xNTYxICAgICAgIDAuNDQxMyAgCgpEZWdyZWVzIG9mIEZyZWVkb206IDk5IFRvdGFsIChpLmUuIE51bGwpOyAgOTggUmVzaWR1YWwKTnVsbCBEZXZpYW5jZToJICAgIDMxNy4yIApSZXNpZHVhbCBEZXZpYW5jZTogMjI4LjUgCUFJQzogMzQ0LjcKVGhlcmUgd2VyZSAyNyB3YXJuaW5ncyAodXNlIHdhcm5pbmdzKCkgdG8gc2VlIHRoZW0pCj4gd2FybmluZ3MoKQpXYXJuaW5nIG1lc3NhZ2VzOgoxOiBzdGVwIHNpemUgdHJ1bmNhdGVkOiBvdXQgb2YgYm91bmRzCjI6IHN0ZXAgc2l6ZSB0cnVuY2F0ZWQ6IG91dCBvZiBib3VuZHMKMzogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwo0OiBzdGVwIHNpemUgdHJ1bmNhdGVkOiBvdXQgb2YgYm91bmRzCjU6IHN0ZXAgc2l6ZSB0cnVuY2F0ZWQ6IG91dCBvZiBib3VuZHMKNjogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwo3OiBzdGVwIHNpemUgdHJ1bmNhdGVkOiBvdXQgb2YgYm91bmRzCjg6IHN0ZXAgc2l6ZSB0cnVuY2F0ZWQ6IG91dCBvZiBib3VuZHMKOTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxMDogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxMTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxMjogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxMzogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxNDogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxNTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxNjogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxNzogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxODogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxOTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyMDogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyMTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyMjogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyMzogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyNDogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyNTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyNjogZ2xtLmZpdDogYWxnb3JpdGhtIGRpZCBub3QgY29udmVyZ2UKMjc6IGdsbS5maXQ6IGFsZ29yaXRobSBzdG9wcGVkIGF0IGJvdW5kYXJ5IHZhbHVlCj4gCj4gCj4gIyMgZXh0ZW5kaW5nIGNoYXIgYXJycmF5cwo+IHggPC0geSA8LSBMRVRURVJTWzE6Ml0KPiB4WzVdIDwtICJDIgo+IGxlbmd0aCh5KSA8LSA1Cj4geApbMV0gIkEiICJCIiBOQSAgTkEgICJDIgo+IHkKWzFdICJBIiAiQiIgTkEgIE5BICBOQSAKPiAjIyB4IHdhcyBmaWxsZWQgd2l0aCAiIiwgeSB3aXRoIE5BIGluIDEuNS4wCj4gCj4gCj4gIyMgZm9ybXVsYSB3aXRoIG5vIGludGVyY2VwdCwgMjAwMi0wNy0yMgo+IG9sZGNvbiA8LSBvcHRpb25zKGNvbnRyYXN0cyA9IGMoImNvbnRyLmhlbG1lcnQiLCAiY29udHIucG9seSIpKQo+IFUgPC0gZ2woMywgNiwgMTgsIGxhYmVscz1sZXR0ZXJzWzE6M10pCj4gViA8LSBnbCgzLCAyLCAxOCwgbGFiZWxzPWxldHRlcnNbMTozXSkKPiBBIDwtIHJlcChjKDAsIDEpLCA5KQo+IEIgPC0gcmVwKGMoMSwgMCksIDkpCj4gc2V0LnNlZWQoMSk7IHkgPC0gcm5vcm0oMTgpCj4gdGVybXMoeSB+IEE6VSArIEE6ViAtIDEpCnkgfiBBOlUgKyBBOlYgLSAxCmF0dHIoLCJ2YXJpYWJsZXMiKQpsaXN0KHksIEEsIFUsIFYpCmF0dHIoLCJmYWN0b3JzIikKICBBOlUgQTpWCnkgICAwICAgMApBICAgMiAgIDIKVSAgIDIgICAwClYgICAwICAgMQphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gIkE6VSIgIkE6ViIKYXR0cigsIm9yZGVyIikKWzFdIDIgMgphdHRyKCwiaW50ZXJjZXB0IikKWzFdIDAKYXR0cigsInJlc3BvbnNlIikKWzFdIDEKYXR0cigsIi5FbnZpcm9ubWVudCIpCjxlbnZpcm9ubWVudDogUl9HbG9iYWxFbnY+Cj4gbG0oeSB+IEE6VSArIEE6ViAtIDEpJGNvZWZmaWNpZW50cyAgIyAxLjUuMSB1c2VkIGR1bW1pZXMgY29kaW5nIGZvciBWCiAgICAgICBBOlVhICAgICAgICBBOlViICAgICAgICBBOlVjICAgICAgICBBOlYxICAgICAgICBBOlYyIAogMC4yNTMwMzg4NCAtMC4yMTg3NTQ5OSAtMC43MTcwODUyOCAtMC42MTQ2NzE5MyAtMC4wOTAzMDQzNiAKPiBsbSh5IH4gKEEgKyBCKSA6IChVICsgVikgLSAxKSAjIDEuNS4xIHVzZWQgZHVtbWllcyBjb2RpbmcgZm9yIEE6ViBidXQgbm90IEI6VgoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiAoQSArIEIpOihVICsgVikgLSAxKQoKQ29lZmZpY2llbnRzOgogICBBOlVhICAgICBBOlViICAgICBBOlVjICAgICBBOlYxICAgICBBOlYyICAgICBCOlVhICAgICBCOlViICAgICBCOlVjICAKIDAuMjUzMCAgLTAuMjE4OCAgLTAuNzE3MSAgLTAuNjE0NyAgLTAuMDkwMyAgIDEuNzQyOCAgIDAuMDYxMyAgIDAuNzY0OSAgCiAgIEI6VjEgICAgIEI6VjIgIAotMC40NDIwICAgMC41Mzg4ICAKCj4gb3B0aW9ucyhvbGRjb24pCj4gIyMgMS41LjEgbWlzY29tcHV0ZWQgdGhlIGZpcnN0IGZhY3RvciBpbiB0aGUgZm9ybXVsYS4KPiAKPiAKPiAjIyBxdWFudGlsZSBleHRyZW1lcywgTU0gMTMgQXByIDIwMDAgYW5kIFBSIzE4NTIKPiAocXEgPC0gc2FwcGx5KDA6NSwgZnVuY3Rpb24oaykgeworICAgICB4IDwtIGMocmVwKC1JbmYsaysxKSwgMDprLCByZXAoSW5mLCBrKSkKKyAgICAgc2FwcGx5KDE6OSwgZnVuY3Rpb24odHlwKQorICAgICAgICAgICAgcXVhbnRpbGUoeCwgcHI9KDI6MTApLzEwLCB0eXBlPXR5cCkpCisgfSwgc2ltcGxpZnk9ImFycmF5IikpCiwgLCAxCgogICAgIFssMV0gWywyXSBbLDNdIFssNF0gWyw1XSBbLDZdIFssN10gWyw4XSBbLDldCjIwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYKMzAlICAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZgo0MCUgIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mCjUwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYKNjAlICAgICAwICAgIDAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZgo3MCUgICAgIDAgICAgMCAtSW5mIC1JbmYgLUluZiAgICAwIC1JbmYgLUluZiAtSW5mCjgwJSAgICAgMCAgICAwICAgIDAgLUluZiAgICAwICAgIDAgLUluZiAgICAwICAgIDAKOTAlICAgICAwICAgIDAgICAgMCAtSW5mICAgIDAgICAgMCAtSW5mICAgIDAgICAgMAoxMDAlICAgIDAgICAgMCAgICAwICAgIDAgICAgMCAgICAwICAgIDAgICAgMCAgICAwCgosICwgMgoKICAgICBbLDFdIFssMl0gWywzXSBbLDRdIFssNV0gWyw2XSBbLDddICAgICAgWyw4XSAgWyw5XQoyMCUgIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgICAgICAtSW5mICAtSW5mCjMwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAgICAgIC1JbmYgIC1JbmYKNDAlICAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mICAgICAgLUluZiAgLUluZgo1MCUgICAgIDAgIDAuMCAtSW5mIC1JbmYgIDAuMCAgMC4wICAwLjAgMC4wMDAwMDAwIDAuMDAwCjYwJSAgICAgMCAgMC41ICAgIDAgIDAuMCAgMC41ICAwLjYgIDAuNCAwLjUzMzMzMzMgMC41MjUKNzAlICAgICAxICAxLjAgICAgMSAgMC41ICAxLjAgIEluZiAgMC44ICAgICAgIEluZiAgIEluZgo4MCUgICAgIDEgIEluZiAgICAxICAxLjAgIEluZiAgSW5mICBJbmYgICAgICAgSW5mICAgSW5mCjkwJSAgIEluZiAgSW5mICAgIDEgIEluZiAgSW5mICBJbmYgIEluZiAgICAgICBJbmYgICBJbmYKMTAwJSAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICAgICAgIEluZiAgIEluZgoKLCAsIDMKCiAgICAgWywxXSBbLDJdIFssM10gWyw0XSBbLDVdIFssNl0gWyw3XSAgICAgWyw4XSAgWyw5XQoyMCUgIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgICAgIC1JbmYgIC1JbmYKMzAlICAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mICAgICAtSW5mICAtSW5mCjQwJSAgICAgMCAgMC4wIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAgICAgLUluZiAgLUluZgo1MCUgICAgIDAgIDAuNSAgICAwICAwLjAgIDAuNSAgMC41ICAwLjUgMC41MDAwMDAgMC41MDAKNjAlICAgICAxICAxLjAgICAgMSAgMC44ICAxLjMgIDEuNCAgMS4yIDEuMzMzMzMzIDEuMzI1CjcwJSAgICAgMiAgMi4wICAgIDIgIDEuNiAgSW5mICBJbmYgIDEuOSAgICAgIEluZiAgIEluZgo4MCUgICBJbmYgIEluZiAgICAyICBJbmYgIEluZiAgSW5mICBJbmYgICAgICBJbmYgICBJbmYKOTAlICAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICAgICAgSW5mICAgSW5mCjEwMCUgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgIEluZiAgIEluZgoKLCAsIDQKCiAgICAgWywxXSBbLDJdIFssM10gWyw0XSBbLDVdIFssNl0gWyw3XSAgICAgWyw4XSAgWyw5XQoyMCUgIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgICAgIC1JbmYgIC1JbmYKMzAlICAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mICAgICAtSW5mICAtSW5mCjQwJSAgICAgMCAgICAwIC1JbmYgLUluZiAtSW5mIC1JbmYgICAgMCAgICAgLUluZiAgLUluZgo1MCUgICAgIDEgICAgMSAgICAxICAwLjUgIDEuMCAgMS4wICAgIDEgMS4wMDAwMDAgMS4wMDAKNjAlICAgICAyICAgIDIgICAgMiAgMS42ICAyLjEgIDIuMiAgICAyIDIuMTMzMzMzIDIuMTI1CjcwJSAgICAgMyAgICAzICAgIDMgIDIuNyAgSW5mICBJbmYgICAgMyAgICAgIEluZiAgIEluZgo4MCUgICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgICAgICBJbmYgICBJbmYKOTAlICAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICAgICAgSW5mICAgSW5mCjEwMCUgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgIEluZiAgIEluZgoKLCAsIDUKCiAgICAgWywxXSBbLDJdIFssM10gWyw0XSBbLDVdIFssNl0gWyw3XSAgICAgICBbLDhdICBbLDldCjIwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAgICAgICAtSW5mICAtSW5mCjMwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAgICAgICAtSW5mICAtSW5mCjQwJSAgICAgMCAgMC4wICAgIDAgLUluZiAgMC4xICAwLjAgIDAuMiAwLjA2NjY2NjY3IDAuMDc1CjUwJSAgICAgMSAgMS41ICAgIDEgIDEuMCAgMS41ICAxLjUgIDEuNSAxLjUwMDAwMDAwIDEuNTAwCjYwJSAgICAgMyAgMy4wICAgIDIgIDIuNCAgMi45ICAzLjAgIDIuOCAyLjkzMzMzMzMzIDIuOTI1CjcwJSAgICAgNCAgNC4wICAgIDQgIDMuOCAgSW5mICBJbmYgIEluZiAgICAgICAgSW5mICAgSW5mCjgwJSAgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgICAgSW5mICAgSW5mCjkwJSAgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgICAgSW5mICAgSW5mCjEwMCUgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgICAgSW5mICAgSW5mCgosICwgNgoKICAgICBbLDFdIFssMl0gWywzXSBbLDRdIFssNV0gWyw2XSBbLDddICAgICAgWyw4XSAgWyw5XQoyMCUgIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgICAgICAtSW5mICAtSW5mCjMwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAgICAgIC1JbmYgIC1JbmYKNDAlICAgICAwICAgIDAgICAgMCAtSW5mICAwLjMgIDAuMiAgMC40IDAuMjY2NjY2NyAwLjI3NQo1MCUgICAgIDIgICAgMiAgICAxICAxLjUgIDIuMCAgMi4wICAyLjAgMi4wMDAwMDAwIDIuMDAwCjYwJSAgICAgNCAgICA0ICAgIDMgIDMuMiAgMy43ICAzLjggIDMuNiAzLjczMzMzMzMgMy43MjUKNzAlICAgICA1ICAgIDUgICAgNSAgNC45ICBJbmYgIEluZiAgSW5mICAgICAgIEluZiAgIEluZgo4MCUgICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgICAgICAgSW5mICAgSW5mCjkwJSAgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgICBJbmYgICBJbmYKMTAwJSAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICAgICAgIEluZiAgIEluZgoKPiB4IDwtIGMoLUluZiwgLUluZiwgSW5mLCBJbmYpCj4gbWVkaWFuKHgpClsxXSBOYU4KPiBxdWFudGlsZSh4KQogIDAlICAyNSUgIDUwJSAgNzUlIDEwMCUgCi1JbmYgLUluZiAgTmFOICBJbmYgIEluZiAKPiAjIyAxLjUuMSBoYWQgLUluZiBub3QgTmFOIGluIHNldmVyYWwgcGxhY2VzCj4gCj4gCj4gIyMgTkFzIGluIG1hdHJpeCBkaW1uYW1lcwo+IHogPC0gbWF0cml4KDE6OSwgMywgMykKPiBkaW1uYW1lcyh6KSA8LSBsaXN0KGMoIngiLCAieSIsIE5BKSwgYygxLCBOQSwgMykpCj4gegogICAgIDEgPE5BPiAzCnggICAgMSAgICA0IDcKeSAgICAyICAgIDUgOAo8TkE+IDMgICAgNiA5Cj4gIyMgTkFzIGluIGRpbW5hbWVzIG1pc2FsaWduZWQgd2hlbiBwcmludGluZyBpbiAxLjUuMQo+IAo+IAo+ICMjIHdlaWdodGVkIGFvdiAoUFIjMTkzMCkKPiByIDwtIGMoMTAsMjMsMjMsMjYsMTcsNSw1Myw1NSwzMiw0NiwxMCw4LDEwLDgsMjMsMCwzLDIyLDE1LDMyLDMpCj4gbiA8LSBjKDM5LDYyLDgxLDUxLDM5LDYsNzQsNzIsNTEsNzksMTMsMTYsMzAsMjgsNDUsNCwxMiw0MSwzMCw1MSw3KQo+IHRydCA8LSBmYWN0b3IocmVwKDE6NCxjKDUsNiw1LDUpKSkKPiBZIDwtIHIvbgo+IHogPC0gYW92KFkgfiB0cnQsIHdlaWdodHM9bikKPiAjIyAxLjUuMSBnYXZlIHVud2VpZ2h0ZWQgUlNTCj4gCj4gCj4gIyMgcmJpbmQgKFBSIzIyNjYpCj4gdGVzdCA8LSBhcy5kYXRhLmZyYW1lKG1hdHJpeCgxOjI1LCA1LCA1KSkKPiB0ZXN0MSA8LSBtYXRyaXgoLSgxOjEwKSwgMiwgNSkKPiByYmluZCh0ZXN0LCB0ZXN0MSkKICBWMSBWMiBWMyBWNCAgVjUKMSAgMSAgNiAxMSAxNiAgMjEKMiAgMiAgNyAxMiAxNyAgMjIKMyAgMyAgOCAxMyAxOCAgMjMKNCAgNCAgOSAxNCAxOSAgMjQKNSAgNSAxMCAxNSAyMCAgMjUKNiAtMSAtMyAtNSAtNyAgLTkKNyAtMiAtNCAtNiAtOCAtMTAKPiByYmluZCh0ZXN0MSwgdGVzdCkKICBWMSBWMiBWMyBWNCAgVjUKMSAtMSAtMyAtNSAtNyAgLTkKMiAtMiAtNCAtNiAtOCAtMTAKMyAgMSAgNiAxMSAxNiAgMjEKNCAgMiAgNyAxMiAxNyAgMjIKNSAgMyAgOCAxMyAxOCAgMjMKNiAgNCAgOSAxNCAxOSAgMjQKNyAgNSAxMCAxNSAyMCAgMjUKPiAjIyAxLjYuMSB0cmVhdGVkIG1hdHJpeCBhcyBhIHZlY3Rvci4KPiAKPiAKPiAjIyBlc2NhcGVzIGluIG5vbi1xdW90ZWQgcHJpbnRpbmcKPiB4IDwtICJcXGFiY1xcIgo+IG5hbWVzKHgpIDwtIDEKPiB4CiAgICAgICAgMSAKIlxcYWJjXFwiIAo+IHByaW50KHgsIHF1b3RlPUZBTFNFKQogICAgICAxIApcXGFiY1xcIAo+ICMjIDEuNi4yIGhhZCBsYWJlbCBtaXNhbGlnbmVkCj4gCj4gCj4gIyMgc3VtbWFyeSBvbiBkYXRhIGZyYW1lcyBjb250YWluaW5nIGRhdGEgZnJhbWVzIChQUiMxODkxKQo+IHggPC0gZGF0YS5mcmFtZSgxOjEwKQo+IHgkeiA8LSBkYXRhLmZyYW1lKHg9MToxMCx5eXk9MTE6MjApCj4gc3VtbWFyeSh4KQogICAgIFgxLjEwICAgICAgICAgICAgIHoueCAgICAgICAgICAgICB6Lnl5eSAgICAgCiBNaW4uICAgOiAxLjAwICAgTWluLiAgIDogMS4wMCAgICBNaW4uICAgOjExLjAwICAKIDFzdCBRdS46IDMuMjUgICAxc3QgUXUuOiAzLjI1ICAgIDFzdCBRdS46MTMuMjUgIAogTWVkaWFuIDogNS41MCAgIE1lZGlhbiA6IDUuNTAgICAgTWVkaWFuIDoxNS41MCAgCiBNZWFuICAgOiA1LjUwICAgTWVhbiAgIDogNS41MCAgICBNZWFuICAgOjE1LjUwICAKIDNyZCBRdS46IDcuNzUgICAzcmQgUXUuOiA3Ljc1ICAgIDNyZCBRdS46MTcuNzUgIAogTWF4LiAgIDoxMC4wMCAgIE1heC4gICA6MTAuMDAgICAgTWF4LiAgIDoyMC4wMCAgCj4gIyMgMS42LjIgaGFkIE5VTEwgbGFiZWxzIG9uIG91dHB1dCB3aXRoIHogY29sdW1ucyBzdGFja2VkLgo+IAo+IAo+ICMjIHJlLW9yZGVyaW5ncyBpbiB0ZXJtcy5mb3JtdWxhIChQUiMyMjA2KQo+IGZvcm0gPC0gZm9ybXVsYSh5IH4gYSArIGI6YyArIGQgKyBlICsgZTpkKQo+ICh0dCA8LSB0ZXJtcyhmb3JtKSkKeSB+IGEgKyBiOmMgKyBkICsgZSArIGU6ZAphdHRyKCwidmFyaWFibGVzIikKbGlzdCh5LCBhLCBiLCBjLCBkLCBlKQphdHRyKCwiZmFjdG9ycyIpCiAgYSBkIGUgYjpjIGQ6ZQp5IDAgMCAwICAgMCAgIDAKYSAxIDAgMCAgIDAgICAwCmIgMCAwIDAgICAyICAgMApjIDAgMCAwICAgMiAgIDAKZCAwIDEgMCAgIDAgICAxCmUgMCAwIDEgICAwICAgMQphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gImEiICAgImQiICAgImUiICAgImI6YyIgImQ6ZSIKYXR0cigsIm9yZGVyIikKWzFdIDEgMSAxIDIgMgphdHRyKCwiaW50ZXJjZXB0IikKWzFdIDEKYXR0cigsInJlc3BvbnNlIikKWzFdIDEKYXR0cigsIi5FbnZpcm9ubWVudCIpCjxlbnZpcm9ubWVudDogUl9HbG9iYWxFbnY+Cj4gKHR0MiA8LSB0ZXJtcyhmb3JtdWxhKHR0KSkpCnkgfiBhICsgYjpjICsgZCArIGUgKyBlOmQKYXR0cigsInZhcmlhYmxlcyIpCmxpc3QoeSwgYSwgYiwgYywgZCwgZSkKYXR0cigsImZhY3RvcnMiKQogIGEgZCBlIGI6YyBkOmUKeSAwIDAgMCAgIDAgICAwCmEgMSAwIDAgICAwICAgMApiIDAgMCAwICAgMiAgIDAKYyAwIDAgMCAgIDIgICAwCmQgMCAxIDAgICAwICAgMQplIDAgMCAxICAgMCAgIDEKYXR0cigsInRlcm0ubGFiZWxzIikKWzFdICJhIiAgICJkIiAgICJlIiAgICJiOmMiICJkOmUiCmF0dHIoLCJvcmRlciIpClsxXSAxIDEgMSAyIDIKYXR0cigsImludGVyY2VwdCIpClsxXSAxCmF0dHIoLCJyZXNwb25zZSIpClsxXSAxCmF0dHIoLCIuRW52aXJvbm1lbnQiKQo8ZW52aXJvbm1lbnQ6IFJfR2xvYmFsRW52Pgo+IHN0b3BpZm5vdChpZGVudGljYWwodHQsIHR0MikpCj4gdGVybXMoZGVsZXRlLnJlc3BvbnNlKHR0KSkKfmEgKyBiOmMgKyBkICsgZSArIGU6ZAphdHRyKCwidmFyaWFibGVzIikKbGlzdChhLCBiLCBjLCBkLCBlKQphdHRyKCwiZmFjdG9ycyIpCiAgYSBkIGUgYjpjIGQ6ZQphIDEgMCAwICAgMCAgIDAKYiAwIDAgMCAgIDIgICAwCmMgMCAwIDAgICAyICAgMApkIDAgMSAwICAgMCAgIDEKZSAwIDAgMSAgIDAgICAxCmF0dHIoLCJ0ZXJtLmxhYmVscyIpClsxXSAiYSIgICAiZCIgICAiZSIgICAiYjpjIiAiZDplIgphdHRyKCwib3JkZXIiKQpbMV0gMSAxIDEgMiAyCmF0dHIoLCJpbnRlcmNlcHQiKQpbMV0gMQphdHRyKCwicmVzcG9uc2UiKQpbMV0gMAphdHRyKCwiLkVudmlyb25tZW50IikKPGVudmlyb25tZW50OiBSX0dsb2JhbEVudj4KPiAjIyBib3RoIHR0IGFuZCB0dDIgcmUtb3JkZXJlZCB0aGUgZm9ybXVsYSA8IDEuNy4wCj4gIyMgbm93IHRyeSB3aXRoIGEgZG90Cj4gdGVybXMoYnJlYWtzIH4gLiwgZGF0YSA9IHdhcnBicmVha3MpCmJyZWFrcyB+IHdvb2wgKyB0ZW5zaW9uCmF0dHIoLCJ2YXJpYWJsZXMiKQpsaXN0KGJyZWFrcywgd29vbCwgdGVuc2lvbikKYXR0cigsImZhY3RvcnMiKQogICAgICAgIHdvb2wgdGVuc2lvbgpicmVha3MgICAgIDAgICAgICAgMAp3b29sICAgICAgIDEgICAgICAgMAp0ZW5zaW9uICAgIDAgICAgICAgMQphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gIndvb2wiICAgICJ0ZW5zaW9uIgphdHRyKCwib3JkZXIiKQpbMV0gMSAxCmF0dHIoLCJpbnRlcmNlcHQiKQpbMV0gMQphdHRyKCwicmVzcG9uc2UiKQpbMV0gMQphdHRyKCwiLkVudmlyb25tZW50IikKPGVudmlyb25tZW50OiBSX0dsb2JhbEVudj4KPiB0ZXJtcyhicmVha3MgfiAuIC0gdGVuc2lvbiwgZGF0YSA9IHdhcnBicmVha3MpCmJyZWFrcyB+ICh3b29sICsgdGVuc2lvbikgLSB0ZW5zaW9uCmF0dHIoLCJ2YXJpYWJsZXMiKQpsaXN0KGJyZWFrcywgd29vbCwgdGVuc2lvbikKYXR0cigsImZhY3RvcnMiKQogICAgICAgIHdvb2wKYnJlYWtzICAgICAwCndvb2wgICAgICAgMQp0ZW5zaW9uICAgIDAKYXR0cigsInRlcm0ubGFiZWxzIikKWzFdICJ3b29sIgphdHRyKCwib3JkZXIiKQpbMV0gMQphdHRyKCwiaW50ZXJjZXB0IikKWzFdIDEKYXR0cigsInJlc3BvbnNlIikKWzFdIDEKYXR0cigsIi5FbnZpcm9ubWVudCIpCjxlbnZpcm9ubWVudDogUl9HbG9iYWxFbnY+Cj4gdGVybXMoYnJlYWtzIH4gLiAtIHRlbnNpb24sIGRhdGEgPSB3YXJwYnJlYWtzLCBzaW1wbGlmeSA9IFRSVUUpCmJyZWFrcyB+IHdvb2wKYXR0cigsInZhcmlhYmxlcyIpCmxpc3QoYnJlYWtzLCB3b29sLCB0ZW5zaW9uKQphdHRyKCwiZmFjdG9ycyIpCiAgICAgICAgd29vbApicmVha3MgICAgIDAKd29vbCAgICAgICAxCnRlbnNpb24gICAgMAphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gIndvb2wiCmF0dHIoLCJvcmRlciIpClsxXSAxCmF0dHIoLCJpbnRlcmNlcHQiKQpbMV0gMQphdHRyKCwicmVzcG9uc2UiKQpbMV0gMQphdHRyKCwiLkVudmlyb25tZW50IikKPGVudmlyb25tZW50OiBSX0dsb2JhbEVudj4KPiB0ZXJtcyhicmVha3MgfiAuIF4yLCBkYXRhID0gd2FycGJyZWFrcykKYnJlYWtzIH4gKHdvb2wgKyB0ZW5zaW9uKV4yCmF0dHIoLCJ2YXJpYWJsZXMiKQpsaXN0KGJyZWFrcywgd29vbCwgdGVuc2lvbikKYXR0cigsImZhY3RvcnMiKQogICAgICAgIHdvb2wgdGVuc2lvbiB3b29sOnRlbnNpb24KYnJlYWtzICAgICAwICAgICAgIDAgICAgICAgICAgICAwCndvb2wgICAgICAgMSAgICAgICAwICAgICAgICAgICAgMQp0ZW5zaW9uICAgIDAgICAgICAgMSAgICAgICAgICAgIDEKYXR0cigsInRlcm0ubGFiZWxzIikKWzFdICJ3b29sIiAgICAgICAgICJ0ZW5zaW9uIiAgICAgICJ3b29sOnRlbnNpb24iCmF0dHIoLCJvcmRlciIpClsxXSAxIDEgMgphdHRyKCwiaW50ZXJjZXB0IikKWzFdIDEKYXR0cigsInJlc3BvbnNlIikKWzFdIDEKYXR0cigsIi5FbnZpcm9ubWVudCIpCjxlbnZpcm9ubWVudDogUl9HbG9iYWxFbnY+Cj4gdGVybXMoYnJlYWtzIH4gLiBeMiwgZGF0YSA9IHdhcnBicmVha3MsIHNpbXBsaWZ5ID0gVFJVRSkKYnJlYWtzIH4gd29vbCArIHRlbnNpb24gKyB3b29sOnRlbnNpb24KYXR0cigsInZhcmlhYmxlcyIpCmxpc3QoYnJlYWtzLCB3b29sLCB0ZW5zaW9uKQphdHRyKCwiZmFjdG9ycyIpCiAgICAgICAgd29vbCB0ZW5zaW9uIHdvb2w6dGVuc2lvbgpicmVha3MgICAgIDAgICAgICAgMCAgICAgICAgICAgIDAKd29vbCAgICAgICAxICAgICAgIDAgICAgICAgICAgICAxCnRlbnNpb24gICAgMCAgICAgICAxICAgICAgICAgICAgMQphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gIndvb2wiICAgICAgICAgInRlbnNpb24iICAgICAgIndvb2w6dGVuc2lvbiIKYXR0cigsIm9yZGVyIikKWzFdIDEgMSAyCmF0dHIoLCJpbnRlcmNlcHQiKQpbMV0gMQphdHRyKCwicmVzcG9uc2UiKQpbMV0gMQphdHRyKCwiLkVudmlyb25tZW50IikKPGVudmlyb25tZW50OiBSX0dsb2JhbEVudj4KPiAjIyAxLjYuMiBleHBhbmRlZCB0aGVzZSBmb3JtdWxhZSBvdXQgYXMgaW4gc2ltcGxpZnkgPSBUUlVFCj4gCj4gCj4gIyMgcHJpbnRpbmcgYXR0cmlidXRlcyAoUFIjMjUwNikKPiAoeCA8LSBzdHJ1Y3R1cmUoMTo0LCBvdGhlcj1hcy5mYWN0b3IoTEVUVEVSU1sxOjNdKSkpClsxXSAxIDIgMyA0CmF0dHIoLCJvdGhlciIpClsxXSBBIEIgQwpMZXZlbHM6IEEgQiBDCj4gIyMgPCAxLjcuMCBwcmludGVkIHRoZSBjb2RlcyBvZiB0aGUgZmFjdG9yIGF0dHJpYnV0ZQo+IAo+IAo+ICMjIGFkZCBsb2dpY2FsIG1hdHJpeCByZXBsYWNlbWVudCBpbmRleGluZyBmb3IgZGF0YSBmcmFtZXMKPiBURU1QIDwtIGRhdGEuZnJhbWUoVkFSMT1jKDEsMiwzLDQsNSksIFZBUjI9Yyg1LDQsMywyLDEpLCBWQVIzPWMoMSwxLDEsMSxOQSkpCj4gVEVNUFssYygxLDMpXVtURU1QWyxjKDEsMyldPT0xICYgIWlzLm5hKFRFTVBbLGMoMSwzKV0pXSA8IC0xMApbMV0gRkFMU0UgRkFMU0UgRkFMU0UgRkFMU0UgRkFMU0UKPiBURU1QCiAgVkFSMSBWQVIyIFZBUjMKMSAgICAxICAgIDUgICAgMQoyICAgIDIgICAgNCAgICAxCjMgICAgMyAgICAzICAgIDEKNCAgICA0ICAgIDIgICAgMQo1ICAgIDUgICAgMSAgIE5BCj4gIyMKPiAKPiAjIyBtb3ZlZCBmcm9tIHJlZy1wbG90LlIgYXMgZXhhY3Qgb3V0cHV0IGRlcGVuZHMgb24gcm91bmRpbmcgZXJyb3IKPiAjIyBQUiAzOTAgKGF4aXMgZm9yIHNtYWxsIHJhbmdlcykKPiAKPiByZWxyYW5nZSA8LSBmdW5jdGlvbih4KSB7CisgICAgICMjIFRoZSByZWxhdGl2ZSByYW5nZSBpbiBFUFMgdW5pdHMKKyAgICAgciA8LSByYW5nZSh4KQorICAgICBkaWZmKHIpL21heChhYnMocikpLy5NYWNoaW5lJGRvdWJsZS5lcHMKKyB9Cj4gCj4geCA8LSBjKDAuMTIzNDU2Nzg5MTIzNDU2NzgsCisgICAgICAgIDAuMTIzNDU2Nzg5MTIzNDU2NzksCisgICAgICAgIDAuMTIzNDU2Nzg5MTIzNDU2NzYpCj4gIyByZWxyYW5nZSh4KSAjIyAxLjAxMjUsIGJ1dCBkZXBlbmRzIG9uIHN0cnRvZAo+IHBsb3QoeCkgIyBgZXh0cmEgaG9yaXpvbnRhbCcgOyAgKy0gb2sgb24gU29sYXJpczsgbGFiZWwgb2ZmIG9uIExpbnV4Cj4gCj4geSA8LSBjKDAuOTk5OTU2MzI1NTM2MzM4Mzk3MzQxOCwKKyAgICAgICAgMC45OTk5NTYzMjU1MzYzMzg5NTI0NTMzLAorICAgICAgICAwLjk5OTk1NjMyNTUzNjMzODI4NjMxOTQpCj4gIyMgVGhlIHJlbGF0aXZlIHJhbmdlIG51bWJlcjoKPiAjIHJlbHJhbmdlKHkpICMjIDMuMDAwMTMxLCBidXQgZGVwZW5kcyBvbiBzdHJ0b2QKPiBwbG90KHkpIyBvbmNlIGdhdmUgaW5maW5pdGUgbG9vcCBvbiBTb2xhcmlzIFtUTF07ICB5LWF4aXMgdG9vIGxvbmcKPiAKPiAjIyBDb21tZW50czogVGhlIHdob2xlIGlzc3VlIHdhcyBmaW5hbGx5IGRlZmVycmVkIHRvIG1haW4vZ3JhcGhpY3MuYyBsLjE5NDQKPiAjIyAgICBlcnJvcigicmVsYXRpdmUgcmFuZ2Ugb2YgdmFsdWVzIGlzIHRvbyBzbWFsbCB0byBjb21wdXRlIGFjY3VyYXRlbHkiKTsKPiAjIyB3aGljaCBpcyBub3Qgb2theS4KPiAKPiBzZXQuc2VlZCgxMDEpCj4gcGFyKG1mcm93ID0gYygzLDMpKQo+IGZvcihqLmZhYyBpbiAxZS0xMiogYygxMCwgMSwgLjcsIC4zLCAuMiwgLjEsIC4wNSwgLjAzLCAuMDEpKSB7CisgIyMgICAgICAgICAgID09PT0KKyAgICAgI3NldC5zZWVkKDEwMSkgIyBvciBkb24ndAorICAgICB4IDwtIHBpICsgaml0dGVyKG51bWVyaWMoMTAxKSwgZiA9IGouZmFjKQorICAgICBycnR4dCA8LSBwYXN0ZSgicmVsLnJhbmdlID0iLCBmb3JtYXRDKHJlbHJhbmdlKHgpLCBkaWcgPSA0KSwiKiBFUFMiKQorICAgICBjYXQoImouZiA9ICIsIGZvcm1hdChqLmZhYyksIiA7ICAiLCBycnR4dCwiXG4iLHNlcD0iIikKKyAgICAgcGxvdCh4LCB0eXBlID0gImwiLCBtYWluID0gcnJ0eHQpCisgICAgIGNhdCgicGFyKFwidXNyXCIpWzM6NF06IiwgZm9ybWF0QyhwYXIoInVzciIpWzM6NF0sIHdpZCA9IDEwKSwiXG4iLAorICAgICAgICAgInBhcihcInlheHBcIikgOiAgICIsIGZvcm1hdEMocGFyKCJ5YXhwIiksIHdpZCA9IDEwKSwiXG5cbiIsIHNlcD0iIikKKyB9CmouZiA9IDFlLTExIDsgIHJlbC5yYW5nZSA9IDU1My45ICogRVBTCnBhcigidXNyIilbMzo0XTogICAgIDMuMTQyICAgICAzLjE0MgpwYXIoInlheHAiKSA6ICAgICAgICAzLjE0MiAgICAgMy4xNDIgICAgICAgICAzCgpqLmYgPSAxZS0xMiA7ICByZWwucmFuZ2UgPSA1Ni4wMiAqIEVQUwpwYXIoInVzciIpWzM6NF06ICAgICAzLjE0MiAgICAgMy4xNDIKcGFyKCJ5YXhwIikgOiAgICAgICAgMy4xNDIgICAgIDMuMTQyICAgICAgICAgMQoKai5mID0gN2UtMTMgOyAgcmVsLnJhbmdlID0gMzkuNDcgKiBFUFMKcGFyKCJ1c3IiKVszOjRdOiAgICAgMy4xNDIgICAgIDMuMTQyCnBhcigieWF4cCIpIDogICAgICAgIDMuMTQyICAgICAzLjE0MiAgICAgICAgIDEKCmouZiA9IDNlLTEzIDsgIHJlbC5yYW5nZSA9IDE2LjU1ICogRVBTCnBhcigidXNyIilbMzo0XTogICAgIDMuMTQyICAgICAzLjE0MgpwYXIoInlheHAiKSA6ICAgICAgICAzLjE0MiAgICAgMy4xNDIgICAgICAgICAxCgpqLmYgPSAyZS0xMyA7ICByZWwucmFuZ2UgPSAxMS40NiAqIEVQUwpwYXIoInVzciIpWzM6NF06ICAgICAzLjEwOCAgICAgMy4xNzYKcGFyKCJ5YXhwIikgOiAgICAgICAgIDMuMTEgICAgICAzLjE3ICAgICAgICAgNgoKai5mID0gMWUtMTMgOyAgcmVsLnJhbmdlID0gNS4wOTMgKiBFUFMKcGFyKCJ1c3IiKVszOjRdOiAgICAgMy4xMDggICAgIDMuMTc2CnBhcigieWF4cCIpIDogICAgICAgICAzLjExICAgICAgMy4xNyAgICAgICAgIDYKCmouZiA9IDVlLTE0IDsgIHJlbC5yYW5nZSA9IDIuNTQ2ICogRVBTCnBhcigidXNyIilbMzo0XTogICAgIDMuMTA4ICAgICAzLjE3NgpwYXIoInlheHAiKSA6ICAgICAgICAgMy4xMSAgICAgIDMuMTcgICAgICAgICA2CgpqLmYgPSAzZS0xNCA7ICByZWwucmFuZ2UgPSAxLjI3MyAqIEVQUwpwYXIoInVzciIpWzM6NF06ICAgICAzLjEwOCAgICAgMy4xNzYKcGFyKCJ5YXhwIikgOiAgICAgICAgIDMuMTEgICAgICAzLjE3ICAgICAgICAgNgoKai5mID0gMWUtMTQgOyAgcmVsLnJhbmdlID0gICAgIDAgKiBFUFMKcGFyKCJ1c3IiKVszOjRdOiAgICAgMS43ODQgICAgIDQuNDk5CnBhcigieWF4cCIpIDogICAgICAgICAgICAyICAgICAgICAgNCAgICAgICAgIDQKCldhcm5pbmcgbWVzc2FnZXM6CjE6IEluIHBsb3Qud2luZG93KC4uLikgOgogIHJlbGF0aXZlIHJhbmdlIG9mIHZhbHVlcyAoICA0MyAqIEVQUykgaXMgc21hbGwgKGF4aXMgMikKMjogSW4gcGxvdC53aW5kb3coLi4uKSA6CiAgcmVsYXRpdmUgcmFuZ2Ugb2YgdmFsdWVzICggIDM2ICogRVBTKSBpcyBzbWFsbCAoYXhpcyAyKQozOiBJbiBwbG90LndpbmRvdyguLi4pIDoKICByZWxhdGl2ZSByYW5nZSBvZiB2YWx1ZXMgKCAgIDAgKiBFUFMpIGlzIHNtYWxsIChheGlzIDIpCj4gcGFyKG1mcm93ID0gYygxLDEpKQo+ICMjIFRoZSB3YXJuaW5ncyBmcm9tIGluc2lkZSBHU2NhbGUoKSB3aWxsIGRpZmZlciBpbiB0aGVpciAgcmVscmFuZ2UoKSAuLi4KPiAjIyA+PiBkbyBzbG9wcHkgdGVzdGluZwo+ICMjIDIwMDMtMDItMDMgaG9wZWZ1bGx5IG5vIG1vcmUuICBCRFIKPiAjIyBlbmQgb2YgUFIgMzkwCj4gCj4gCj4gIyMgc2NvcGluZyBydWxlcyBjYWxsaW5nIHN0ZXAgaW5zaWRlIGEgZnVuY3Rpb24KPiAiY2VtZW50IiA8LQorICAgICBzdHJ1Y3R1cmUobGlzdCh4MSA9IGMoNywgMSwgMTEsIDExLCA3LCAxMSwgMywgMSwgMiwgMjEsIDEsIDExLCAxMCksCisgICAgICAgICAgICAgICAgICAgIHgyID0gYygyNiwgMjksIDU2LCAzMSwgNTIsIDU1LCA3MSwgMzEsIDU0LCA0NywgNDAsIDY2LCA2OCksCisgICAgICAgICAgICAgICAgICAgIHgzID0gYyg2LCAxNSwgOCwgOCwgNiwgOSwgMTcsIDIyLCAxOCwgNCwgMjMsIDksIDgpLAorICAgICAgICAgICAgICAgICAgICB4NCA9IGMoNjAsIDUyLCAyMCwgNDcsIDMzLCAyMiwgNiwgNDQsIDIyLCAyNiwgMzQsIDEyLCAxMiksCisgICAgICAgICAgICAgICAgICAgIHkgPSBjKDc4LjUsIDc0LjMsIDEwNC4zLCA4Ny42LCA5NS45LCAxMDkuMiwgMTAyLjcsIDcyLjUsCisgICAgICAgICAgICAgICAgICAgIDkzLjEsIDExNS45LCA4My44LCAxMTMuMywgMTA5LjQpKSwKKyAgICAgICAgICAgICAgIC5OYW1lcyA9IGMoIngxIiwgIngyIiwgIngzIiwgIng0IiwgInkiKSwgY2xhc3MgPSAiZGF0YS5mcmFtZSIsCisgICAgICAgICAgICAgICByb3cubmFtZXMgPSAxOjEzKQo+IHRlc3RzdGVwIDwtIGZ1bmN0aW9uKGZvcm11bGEsIGRhdGEpCisgeworICAgICBkMiA8LSBkYXRhCisgICAgIGZpdCA8LSBsbShmb3JtdWxhLCBkYXRhPWQyKQorICAgICBzdGVwKGZpdCkKKyB9Cj4gdGVzdHN0ZXAoZm9ybXVsYSh5IH4gLiksIGNlbWVudCkKU3RhcnQ6ICBBSUM9MjYuOTQKeSB+IHgxICsgeDIgKyB4MyArIHg0CgogICAgICAgRGYgU3VtIG9mIFNxICAgIFJTUyAgICBBSUMKLSB4MyAgICAxICAgIDAuMTA5MSA0Ny45NzMgMjQuOTc0Ci0geDQgICAgMSAgICAwLjI0NzAgNDguMTExIDI1LjAxMQotIHgyICAgIDEgICAgMi45NzI1IDUwLjgzNiAyNS43MjgKPG5vbmU+ICAgICAgICAgICAgICA0Ny44NjQgMjYuOTQ0Ci0geDEgICAgMSAgIDI1Ljk1MDkgNzMuODE1IDMwLjU3NgoKU3RlcDogIEFJQz0yNC45Nwp5IH4geDEgKyB4MiArIHg0CgogICAgICAgRGYgU3VtIG9mIFNxICAgIFJTUyAgICBBSUMKPG5vbmU+ICAgICAgICAgICAgICAgNDcuOTcgMjQuOTc0Ci0geDQgICAgMSAgICAgIDkuOTMgIDU3LjkwIDI1LjQyMAotIHgyICAgIDEgICAgIDI2Ljc5ICA3NC43NiAyOC43NDIKLSB4MSAgICAxICAgIDgyMC45MSA4NjguODggNjAuNjI5CgpDYWxsOgpsbShmb3JtdWxhID0geSB+IHgxICsgeDIgKyB4NCwgZGF0YSA9IGQyKQoKQ29lZmZpY2llbnRzOgooSW50ZXJjZXB0KSAgICAgICAgICAgeDEgICAgICAgICAgIHgyICAgICAgICAgICB4NCAgCiAgICA3MS42NDgzICAgICAgIDEuNDUxOSAgICAgICAwLjQxNjEgICAgICAtMC4yMzY1ICAKCj4gIyMgZmFpbGVkIGluIDEuNi4yCj4gCj4gc3RyKGFycmF5KDEpKSMgbm90IGEgc2NhbGFyCiBudW0gWzEoMWQpXSAxCj4gCj4gCj4gIyMgbmEucHJpbnQ9IiIgc2hvdWxkbid0IGFwcGx5IHRvIChkaW0pbmFtZXMhCj4gKHRmIDwtIHRhYmxlKGZmIDwtIGZhY3RvcihjKDE6MixOQSwyKSwgZXhjbHVkZT1OVUxMKSkpCgogICAxICAgIDIgPE5BPiAKICAgMSAgICAyICAgIDEgCj4gaWRlbnRpY2FsKGxldmVscyhmZiksIGRpbW5hbWVzKHRmKVtbMV1dKQpbMV0gVFJVRQo+IHN0cihsZXZlbHMoZmYpKQogY2hyIFsxOjNdICIxIiAiMiIgTkEKPiAjIyBub3QgcXVpdGUgb2sgcHJldmlvdXMgdG8gMS43LjAKPiAKPiAKPiAjIyBQUiMzMDU4ICBwcmludGluZyB3aXRoIG5hLnByaW50IGFuZCByaWdodD1UUlVFCj4gYSA8LSBtYXRyaXgoIGMoTkEsICJhIiwgImIiLCAiMTAiLAorICAgICAgICAgICAgICAgIE5BLCBOQSwgICJkIiwgIjEyIiwKKyAgICAgICAgICAgICAgICBOQSwgTkEsICBOQSwgICIxNCIpLAorICAgICAgICAgICAgIGJ5cm93PVQsIG5jb2w9NCApCj4gcHJpbnQoYSwgcmlnaHQ9VFJVRSwgbmEucHJpbnQ9IiAiKQogICAgIFssMV0gWywyXSBbLDNdIFssNF0KWzEsXSAgICAgICAiYSIgICJiIiAiMTAiClsyLF0gICAgICAgICAgICAiZCIgIjEyIgpbMyxdICAgICAgICAgICAgICAgICIxNCIKPiBwcmludChhLCByaWdodD1UUlVFLCBuYS5wcmludD0iLS0tLSIpCiAgICAgWywxXSBbLDJdIFssM10gWyw0XQpbMSxdIC0tLS0gICJhIiAgImIiICIxMCIKWzIsXSAtLS0tIC0tLS0gICJkIiAiMTIiClszLF0gLS0tLSAtLS0tIC0tLS0gIjE0Igo+ICMjIG1pc2FsaWduZWQgaW4gMS43LjAKPiAKPiAKPiAjIyBhc3NpZ25pbmcgZmFjdG9ycyB0byBkaW1uYW1lcwo+IEEgPC0gbWF0cml4KDE6NCwgMikKPiBhYSA8LSBmYWN0b3IobGV0dGVyc1sxOjJdKQo+IGRpbW5hbWVzKEEpIDwtIGxpc3QoYWEsIE5VTEwpCj4gQQogIFssMV0gWywyXQphICAgIDEgICAgMwpiICAgIDIgICAgNAo+IGRpbW5hbWVzKEEpCltbMV1dClsxXSAiYSIgImIiCgpbWzJdXQpOVUxMCgo+ICMjIDEuNy4wIGdhdmUgaW50ZXJuYWwgY29kZXMgYXMgZGlzcGxheSBhbmQgZGltbmFtZXMoKQo+ICMjIDEuNy4xYmV0YSBnYXZlIE5BcyB2aWEgZGltbmFtZXMoKQo+ICMjIDEuOC4wIGNvbnZlcnRzIGZhY3RvcnMgdG8gY2hhcmFjdGVyCj4gCj4gCj4gIyMgd2lzaGxpc3QgUFIjMjc3NjogYWxpYXNlZCBjb2VmcyBpbiBsbS9nbG0KPiBzZXQuc2VlZCgxMjMpCj4geDIgPC0geDEgPC0gMToxMAo+IHgzIDwtIDAuMSooMToxMCleMgo+IHkgPC0geDEgKyBybm9ybSgxMCkKPiAoZml0IDwtIGxtKHkgfiB4MSArIHgyICsgeDMpKQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiB4MSArIHgyICsgeDMpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICAgICB4MSAgICAgICAgICAgeDIgICAgICAgICAgIHgzICAKICAgICAxLjQ3MTkgICAgICAgMC41ODY3ICAgICAgICAgICBOQSAgICAgICAwLjI1ODcgIAoKPiBzdW1tYXJ5KGZpdCwgY29yID0gVFJVRSkKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geDEgKyB4MiArIHgzKQoKUmVzaWR1YWxzOgogICAgTWluICAgICAgMVEgIE1lZGlhbiAgICAgIDNRICAgICBNYXggCi0xLjA1NzIgLTAuNDgzNiAgMC4wNzk5ICAwLjQ0MjQgIDEuMjY5OSAKCkNvZWZmaWNpZW50czogKDEgbm90IGRlZmluZWQgYmVjYXVzZSBvZiBzaW5ndWxhcml0aWVzKQogICAgICAgICAgICBFc3RpbWF0ZSBTdGQuIEVycm9yIHQgdmFsdWUgUHIoPnx0fCkKKEludGVyY2VwdCkgICAxLjQ3MTkgICAgIDAuOTQ4NCAgIDEuNTUyICAgIDAuMTY1CngxICAgICAgICAgICAgMC41ODY3ICAgICAwLjM5NjEgICAxLjQ4MSAgICAwLjE4Mgp4MiAgICAgICAgICAgICAgICBOQSAgICAgICAgIE5BICAgICAgTkEgICAgICAgTkEKeDMgICAgICAgICAgICAwLjI1ODcgICAgIDAuMzUwOSAgIDAuNzM3ICAgIDAuNDg1CgpSZXNpZHVhbCBzdGFuZGFyZCBlcnJvcjogMC44MDYzIG9uIDcgZGVncmVlcyBvZiBmcmVlZG9tCk11bHRpcGxlIFItc3F1YXJlZDogIDAuOTMyNiwJQWRqdXN0ZWQgUi1zcXVhcmVkOiAgMC45MTM0IApGLXN0YXRpc3RpYzogNDguNDMgb24gMiBhbmQgNyBERiwgIHAtdmFsdWU6IDcuOTQ2ZS0wNQoKQ29ycmVsYXRpb24gb2YgQ29lZmZpY2llbnRzOgogICAoSW50ZXJjZXB0KSB4MSAgIAp4MSAtMC45MSAgICAgICAgICAgIAp4MyAgMC44MSAgICAgICAtMC45NwoKPiAoZml0IDwtIGdsbSh5IH4geDEgKyB4MiArIHgzKSkKCkNhbGw6ICBnbG0oZm9ybXVsYSA9IHkgfiB4MSArIHgyICsgeDMpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICAgICB4MSAgICAgICAgICAgeDIgICAgICAgICAgIHgzICAKICAgICAxLjQ3MTkgICAgICAgMC41ODY3ICAgICAgICAgICBOQSAgICAgICAwLjI1ODcgIAoKRGVncmVlcyBvZiBGcmVlZG9tOiA5IFRvdGFsIChpLmUuIE51bGwpOyAgNyBSZXNpZHVhbApOdWxsIERldmlhbmNlOgkgICAgNjcuNTMgClJlc2lkdWFsIERldmlhbmNlOiA0LjU1MSAJQUlDOiAyOC41MQo+IHN1bW1hcnkoZml0LCBjb3IgPSBUUlVFKQoKQ2FsbDoKZ2xtKGZvcm11bGEgPSB5IH4geDEgKyB4MiArIHgzKQoKRGV2aWFuY2UgUmVzaWR1YWxzOiAKICAgIE1pbiAgICAgICAxUSAgIE1lZGlhbiAgICAgICAzUSAgICAgIE1heCAgCi0xLjA1NzIgIC0wLjQ4MzYgICAwLjA3OTkgICAwLjQ0MjQgICAxLjI2OTkgIAoKQ29lZmZpY2llbnRzOiAoMSBub3QgZGVmaW5lZCBiZWNhdXNlIG9mIHNpbmd1bGFyaXRpZXMpCiAgICAgICAgICAgIEVzdGltYXRlIFN0ZC4gRXJyb3IgdCB2YWx1ZSBQcig+fHR8KQooSW50ZXJjZXB0KSAgIDEuNDcxOSAgICAgMC45NDg0ICAgMS41NTIgICAgMC4xNjUKeDEgICAgICAgICAgICAwLjU4NjcgICAgIDAuMzk2MSAgIDEuNDgxICAgIDAuMTgyCngyICAgICAgICAgICAgICAgIE5BICAgICAgICAgTkEgICAgICBOQSAgICAgICBOQQp4MyAgICAgICAgICAgIDAuMjU4NyAgICAgMC4zNTA5ICAgMC43MzcgICAgMC40ODUKCihEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgZ2F1c3NpYW4gZmFtaWx5IHRha2VuIHRvIGJlIDAuNjUwMTc1MykKCiAgICBOdWxsIGRldmlhbmNlOiA2Ny41MzE2ICBvbiA5ICBkZWdyZWVzIG9mIGZyZWVkb20KUmVzaWR1YWwgZGV2aWFuY2U6ICA0LjU1MTIgIG9uIDcgIGRlZ3JlZXMgb2YgZnJlZWRvbQpBSUM6IDI4LjUwNwoKTnVtYmVyIG9mIEZpc2hlciBTY29yaW5nIGl0ZXJhdGlvbnM6IDIKCkNvcnJlbGF0aW9uIG9mIENvZWZmaWNpZW50czoKICAgKEludGVyY2VwdCkgeDEgICAKeDEgLTAuOTEgICAgICAgICAgICAKeDMgIDAuODEgICAgICAgLTAuOTcKCj4gIyMgb21pdHRlZCBzaWxlbnRseSBpbiBzdW1tYXJ5LmdsbSA8IDEuOC4wCj4gCj4gCj4gIyMgbGlzdC1saWtlIGluZGV4aW5nIG9mIGRhdGEgZnJhbWVzIHdpdGggZHJvcCBzcGVjaWZpZWQKPiB3b21lblsiaGVpZ2h0Il0KICAgaGVpZ2h0CjEgICAgICA1OAoyICAgICAgNTkKMyAgICAgIDYwCjQgICAgICA2MQo1ICAgICAgNjIKNiAgICAgIDYzCjcgICAgICA2NAo4ICAgICAgNjUKOSAgICAgIDY2CjEwICAgICA2NwoxMSAgICAgNjgKMTIgICAgIDY5CjEzICAgICA3MAoxNCAgICAgNzEKMTUgICAgIDcyCj4gd29tZW5bImhlaWdodCIsIGRyb3AgPSBGQUxTRV0gICMgc2FtZSB3aXRoIGEgd2FybmluZwogICBoZWlnaHQKMSAgICAgIDU4CjIgICAgICA1OQozICAgICAgNjAKNCAgICAgIDYxCjUgICAgICA2Mgo2ICAgICAgNjMKNyAgICAgIDY0CjggICAgICA2NQo5ICAgICAgNjYKMTAgICAgIDY3CjExICAgICA2OAoxMiAgICAgNjkKMTMgICAgIDcwCjE0ICAgICA3MQoxNSAgICAgNzIKV2FybmluZyBtZXNzYWdlOgpJbiBgWy5kYXRhLmZyYW1lYCh3b21lbiwgImhlaWdodCIsIGRyb3AgPSBGQUxTRSkgOgogICdkcm9wJyBhcmd1bWVudCB3aWxsIGJlIGlnbm9yZWQKPiB3b21lblsiaGVpZ2h0IiwgZHJvcCA9IFRSVUVdICAgIyBkaXR0bwogICBoZWlnaHQKMSAgICAgIDU4CjIgICAgICA1OQozICAgICAgNjAKNCAgICAgIDYxCjUgICAgICA2Mgo2ICAgICAgNjMKNyAgICAgIDY0CjggICAgICA2NQo5ICAgICAgNjYKMTAgICAgIDY3CjExICAgICA2OAoxMiAgICAgNjkKMTMgICAgIDcwCjE0ICAgICA3MQoxNSAgICAgNzIKV2FybmluZyBtZXNzYWdlOgpJbiBgWy5kYXRhLmZyYW1lYCh3b21lbiwgImhlaWdodCIsIGRyb3AgPSBUUlVFKSA6CiAgJ2Ryb3AnIGFyZ3VtZW50IHdpbGwgYmUgaWdub3JlZAo+IHdvbWVuWywiaGVpZ2h0IiwgZHJvcCA9IEZBTFNFXSAjIG5vIHdhcm5pbmcKICAgaGVpZ2h0CjEgICAgICA1OAoyICAgICAgNTkKMyAgICAgIDYwCjQgICAgICA2MQo1ICAgICAgNjIKNiAgICAgIDYzCjcgICAgICA2NAo4ICAgICAgNjUKOSAgICAgIDY2CjEwICAgICA2NwoxMSAgICAgNjgKMTIgICAgIDY5CjEzICAgICA3MAoxNCAgICAgNzEKMTUgICAgIDcyCj4gd29tZW5bLCJoZWlnaHQiLCBkcm9wID0gVFJVRV0gICMgYSB2ZWN0b3IKIFsxXSA1OCA1OSA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA2OCA2OSA3MCA3MSA3Mgo+ICMjIHNlY29uZCBhbmQgdGhpcmQgd2VyZSBpbnRlcnByZXRlZCBhcyB3b21lblsiaGVpZ2h0IiwgLCBkcm9wXSBpbiAxLjcueAo+IAo+IAo+ICMjIG1ha2UubmFtZXMKPiBtYWtlLm5hbWVzKCIiKQpbMV0gIlgiCj4gbWFrZS5uYW1lcygiLmFhIikKWzFdICIuYWEiCj4gIyMgd2FzICJYLmFhIiBpbiAxLjcuMQo+IG1ha2UubmFtZXMoIi4yIikKWzFdICJYLjIiCj4gbWFrZS5uYW1lcygiLjJhIikgIyBub3QgdmFsaWQgaW4gUgpbMV0gIlguMmEiCj4gbWFrZS5uYW1lcyhhcy5jaGFyYWN0ZXIoTkEpKQpbMV0gIk5BLiIKPiAjIwo+IAo+IAo+ICMjIHN0cmFuZ2UgbmFtZXMgaW4gZGF0YSBmcmFtZXMKPiBhcy5kYXRhLmZyYW1lKGxpc3Qocm93Lm5hbWVzPTE3KSkgICMgMCByb3dzIGluIDEuNy4xCiAgcm93Lm5hbWVzCjEgICAgICAgIDE3Cj4gYWEgPC0gZGF0YS5mcmFtZShhYT0xOjMpCj4gYWFbWyJyb3cubmFtZXMiXV0gPC0gNDo2Cj4gYWEgIyBmaW5lIGluIDEuNy4xCiAgYWEgcm93Lm5hbWVzCjEgIDEgICAgICAgICA0CjIgIDIgICAgICAgICA1CjMgIDMgICAgICAgICA2Cj4gQSA8LSBtYXRyaXgoNDo5LCAzLCAyKQo+IGNvbG5hbWVzKEEpIDwtIGxldHRlcnNbMToyXQo+IGFhW1sicm93Lm5hbWVzIl1dIDwtIEEKPiBhYQogIGFhIHJvdy5uYW1lcy5hIHJvdy5uYW1lcy5iCjEgIDEgICAgICAgICAgIDQgICAgICAgICAgIDcKMiAgMiAgICAgICAgICAgNSAgICAgICAgICAgOAozICAzICAgICAgICAgICA2ICAgICAgICAgICA5Cj4gIyMgd3JvbmcgcHJpbnRlZCBuYW1lcyBpbiAxLjcuMQo+IAo+ICMjIGFzc2lnbmluZyB0byBOVUxMCj4gYSA8LSBOVUxMCj4gYVtbImEiXV0gPC0gMQo+IGEKYSAKMSAKPiBhIDwtIE5VTEwKPiBhW1siYSJdXSA8LSAic29tZXRoaW5nIgo+IGEKICAgICAgICAgIGEgCiJzb21ldGhpbmciIAo+IGEgPC0gTlVMTAo+IGFbWyJhIl1dIDwtIDE6Mwo+IGEKJGEKWzFdIDEgMiAzCgo+ICMjIExhc3Qgd2FzIGFuIGVycm9yIGluIDEuNy4xCj4gCj4gCj4gIyMgZXhhbXBsZXMgb2YgMC1yYW5rIG1vZGVscywgc29tZSBlbXB0eSwgc29tZSByYW5rLWRlZmljaWVudAo+IHkgPC0gcm5vcm0oMTApCj4geCA8LSByZXAoMCwgMTApCj4gKGZpdCA8LSBsbSh5IH4gMCkpCgpDYWxsOgpsbShmb3JtdWxhID0geSB+IDApCgpObyBjb2VmZmljaWVudHMKCj4gc3VtbWFyeShmaXQpCgpDYWxsOgpsbShmb3JtdWxhID0geSB+IDApCgpSZXNpZHVhbHM6CiAgICAgTWluICAgICAgIDFRICAgTWVkaWFuICAgICAgIDNRICAgICAgTWF4IAotMS4zNjkxOSAtMC4yMTA3MyAgMC4wMDg0MCAgMC4wODQzNyAgMC41NTI5MiAKCk5vIENvZWZmaWNpZW50cwoKUmVzaWR1YWwgc3RhbmRhcmQgZXJyb3I6IDAuNTIzNSBvbiAxMCBkZWdyZWVzIG9mIGZyZWVkb20KCj4gYW5vdmEoZml0KQpBbmFseXNpcyBvZiBWYXJpYW5jZSBUYWJsZQoKUmVzcG9uc2U6IHkKICAgICAgICAgIERmIFN1bSBTcSBNZWFuIFNxIEYgdmFsdWUgUHIoPkYpClJlc2lkdWFscyAxMCAyLjc0MDQgMC4yNzQwNCAgICAgICAgICAgICAgIAo+IHByZWRpY3QoZml0KQogMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAKIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgCj4gcHJlZGljdChmaXQsIGRhdGEuZnJhbWUoeD14KSwgc2U9VFJVRSkKJGZpdAogMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAKIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgCgokc2UuZml0CiBbMV0gMCAwIDAgMCAwIDAgMCAwIDAgMAoKJGRmClsxXSAxMAoKJHJlc2lkdWFsLnNjYWxlClsxXSAwLjUyMzQ4NDMKCj4gcHJlZGljdChmaXQsIHR5cGU9InRlcm1zIiwgc2U9VFJVRSkKJGZpdAogICAgIAogWzEsXQogWzIsXQogWzMsXQogWzQsXQogWzUsXQogWzYsXQogWzcsXQogWzgsXQogWzksXQpbMTAsXQphdHRyKCwiY29uc3RhbnQiKQpbMV0gMAoKJHNlLmZpdAogICAgIAogWzEsXQogWzIsXQogWzMsXQogWzQsXQogWzUsXQogWzYsXQogWzcsXQogWzgsXQogWzksXQpbMTAsXQoKJGRmClsxXSAxMAoKJHJlc2lkdWFsLnNjYWxlClsxXSAwLjUyMzQ4NDMKCj4gdmFyaWFibGUubmFtZXMoZml0KSAjc2hvdWxkIGJlIGVtcHR5CmNoYXJhY3RlcigwKQo+IG1vZGVsLm1hdHJpeChmaXQpCiAgCjEgCjIgCjMgCjQgCjUgCjYgCjcgCjggCjkgCjEwCmF0dHIoLCJhc3NpZ24iKQppbnRlZ2VyKDApCj4gCj4gKGZpdCA8LSBsbSh5IH4geCArIDApKQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiB4ICsgMCkKCkNvZWZmaWNpZW50czoKIHggIApOQSAgCgo+IHN1bW1hcnkoZml0KQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiB4ICsgMCkKClJlc2lkdWFsczoKICAgICBNaW4gICAgICAgMVEgICBNZWRpYW4gICAgICAgM1EgICAgICBNYXggCi0xLjM2OTE5IC0wLjIxMDczICAwLjAwODQwICAwLjA4NDM3ICAwLjU1MjkyIAoKQ29lZmZpY2llbnRzOiAoMSBub3QgZGVmaW5lZCBiZWNhdXNlIG9mIHNpbmd1bGFyaXRpZXMpCiAgRXN0aW1hdGUgU3RkLiBFcnJvciB0IHZhbHVlIFByKD58dHwpCnggICAgICAgTkEgICAgICAgICBOQSAgICAgIE5BICAgICAgIE5BCgpSZXNpZHVhbCBzdGFuZGFyZCBlcnJvcjogMC41MjM1IG9uIDEwIGRlZ3JlZXMgb2YgZnJlZWRvbQoKPiBhbm92YShmaXQpCkFuYWx5c2lzIG9mIFZhcmlhbmNlIFRhYmxlCgpSZXNwb25zZTogeQogICAgICAgICAgRGYgU3VtIFNxIE1lYW4gU3EgRiB2YWx1ZSBQcig+RikKUmVzaWR1YWxzIDEwIDIuNzQwNCAwLjI3NDA0ICAgICAgICAgICAgICAgCj4gcHJlZGljdChmaXQpCiAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIAogMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAKPiBwcmVkaWN0KGZpdCwgZGF0YS5mcmFtZSh4PXgpLCBzZT1UUlVFKQokZml0CiAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIAogMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAKCiRzZS5maXQKIFsxXSAwIDAgMCAwIDAgMCAwIDAgMCAwCgokZGYKWzFdIDEwCgokcmVzaWR1YWwuc2NhbGUKWzFdIDAuNTIzNDg0MwoKV2FybmluZyBtZXNzYWdlOgpJbiBwcmVkaWN0LmxtKGZpdCwgZGF0YS5mcmFtZSh4ID0geCksIHNlID0gVFJVRSkgOgogIHByZWRpY3Rpb24gZnJvbSBhIHJhbmstZGVmaWNpZW50IGZpdCBtYXkgYmUgbWlzbGVhZGluZwo+IHByZWRpY3QoZml0LCB0eXBlPSJ0ZXJtcyIsIHNlPVRSVUUpCiRmaXQKICAgeAoxICAwCjIgIDAKMyAgMAo0ICAwCjUgIDAKNiAgMAo3ICAwCjggIDAKOSAgMAoxMCAwCmF0dHIoLCJjb25zdGFudCIpClsxXSAwCgokc2UuZml0CiAgIHgKMSAgMAoyICAwCjMgIDAKNCAgMAo1ICAwCjYgIDAKNyAgMAo4ICAwCjkgIDAKMTAgMAoKJGRmClsxXSAxMAoKJHJlc2lkdWFsLnNjYWxlClsxXSAwLjUyMzQ4NDMKCj4gdmFyaWFibGUubmFtZXMoZml0KSAjc2hvdWxkIGJlIGVtcHR5CmNoYXJhY3RlcigwKQo+IG1vZGVsLm1hdHJpeChmaXQpCiAgIHgKMSAgMAoyICAwCjMgIDAKNCAgMAo1ICAwCjYgIDAKNyAgMAo4ICAwCjkgIDAKMTAgMAphdHRyKCwiYXNzaWduIikKWzFdIDEKPiAKPiAoZml0IDwtIGdsbSh5IH4gMCkpCgpDYWxsOiAgZ2xtKGZvcm11bGEgPSB5IH4gMCkKCk5vIGNvZWZmaWNpZW50cwoKCkRlZ3JlZXMgb2YgRnJlZWRvbTogMTAgVG90YWwgKGkuZS4gTnVsbCk7ICAxMCBSZXNpZHVhbApOdWxsIERldmlhbmNlOgkgICAgMi43NCAKUmVzaWR1YWwgRGV2aWFuY2U6IDIuNzQgCUFJQzogMTcuNDMKPiBzdW1tYXJ5KGZpdCkKCkNhbGw6CmdsbShmb3JtdWxhID0geSB+IDApCgpEZXZpYW5jZSBSZXNpZHVhbHM6IAogICAgIE1pbiAgICAgICAgMVEgICAgTWVkaWFuICAgICAgICAzUSAgICAgICBNYXggIAotMS4zNjkxOSAgLTAuMjEwNzMgICAwLjAwODQwICAgMC4wODQzNyAgIDAuNTUyOTIgIAoKTm8gQ29lZmZpY2llbnRzCgooRGlzcGVyc2lvbiBwYXJhbWV0ZXIgZm9yIGdhdXNzaWFuIGZhbWlseSB0YWtlbiB0byBiZSAwLjI3NDAzNTgpCgogICAgTnVsbCBkZXZpYW5jZTogMi43NDA0ICBvbiAxMCAgZGVncmVlcyBvZiBmcmVlZG9tClJlc2lkdWFsIGRldmlhbmNlOiAyLjc0MDQgIG9uIDEwICBkZWdyZWVzIG9mIGZyZWVkb20KQUlDOiAxNy40MzQKCk51bWJlciBvZiBGaXNoZXIgU2NvcmluZyBpdGVyYXRpb25zOiAwCgo+IGFub3ZhKGZpdCkKQW5hbHlzaXMgb2YgRGV2aWFuY2UgVGFibGUKCk1vZGVsOiBnYXVzc2lhbiwgbGluazogaWRlbnRpdHkKClJlc3BvbnNlOiB5CgpUZXJtcyBhZGRlZCBzZXF1ZW50aWFsbHkgKGZpcnN0IHRvIGxhc3QpCgoKICAgICBEZiBEZXZpYW5jZSBSZXNpZC4gRGYgUmVzaWQuIERldgpOVUxMICAgICAgICAgICAgICAgICAgICAxMCAgICAgMi43NDA0Cj4gcHJlZGljdChmaXQpCiAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIAogMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAKPiBwcmVkaWN0KGZpdCwgZGF0YS5mcmFtZSh4PXgpLCBzZT1UUlVFKQokZml0CiAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIAogMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAKCiRzZS5maXQKIFsxXSAwIDAgMCAwIDAgMCAwIDAgMCAwCgokcmVzaWR1YWwuc2NhbGUKWzFdIDAuNTIzNDg0MwoKPiBwcmVkaWN0KGZpdCwgdHlwZT0idGVybXMiLCBzZT1UUlVFKQokZml0CiAgICAgCiBbMSxdCiBbMixdCiBbMyxdCiBbNCxdCiBbNSxdCiBbNixdCiBbNyxdCiBbOCxdCiBbOSxdClsxMCxdCmF0dHIoLCJjb25zdGFudCIpClsxXSAwCgokc2UuZml0CiAgICAgCiBbMSxdCiBbMixdCiBbMyxdCiBbNCxdCiBbNSxdCiBbNixdCiBbNyxdCiBbOCxdCiBbOSxdClsxMCxdCgokcmVzaWR1YWwuc2NhbGUKWzFdIDAuNTIzNDg0MwoKPiAKPiAoZml0IDwtIGdsbSh5IH4geCArIDApKQoKQ2FsbDogIGdsbShmb3JtdWxhID0geSB+IHggKyAwKQoKQ29lZmZpY2llbnRzOgogeCAgCk5BICAKCkRlZ3JlZXMgb2YgRnJlZWRvbTogMTAgVG90YWwgKGkuZS4gTnVsbCk7ICAxMCBSZXNpZHVhbApOdWxsIERldmlhbmNlOgkgICAgMi43NCAKUmVzaWR1YWwgRGV2aWFuY2U6IDIuNzQgCUFJQzogMTcuNDMKPiBzdW1tYXJ5KGZpdCkKCkNhbGw6CmdsbShmb3JtdWxhID0geSB+IHggKyAwKQoKRGV2aWFuY2UgUmVzaWR1YWxzOiAKICAgICBNaW4gICAgICAgIDFRICAgIE1lZGlhbiAgICAgICAgM1EgICAgICAgTWF4ICAKLTEuMzY5MTkgIC0wLjIxMDczICAgMC4wMDg0MCAgIDAuMDg0MzcgICAwLjU1MjkyICAKCkNvZWZmaWNpZW50czogKDEgbm90IGRlZmluZWQgYmVjYXVzZSBvZiBzaW5ndWxhcml0aWVzKQogIEVzdGltYXRlIFN0ZC4gRXJyb3IgdCB2YWx1ZSBQcig+fHR8KQp4ICAgICAgIE5BICAgICAgICAgTkEgICAgICBOQSAgICAgICBOQQoKKERpc3BlcnNpb24gcGFyYW1ldGVyIGZvciBnYXVzc2lhbiBmYW1pbHkgdGFrZW4gdG8gYmUgMC4yNzQwMzU4KQoKICAgIE51bGwgZGV2aWFuY2U6IDIuNzQwNCAgb24gMTAgIGRlZ3JlZXMgb2YgZnJlZWRvbQpSZXNpZHVhbCBkZXZpYW5jZTogMi43NDA0ICBvbiAxMCAgZGVncmVlcyBvZiBmcmVlZG9tCkFJQzogMTcuNDM0CgpOdW1iZXIgb2YgRmlzaGVyIFNjb3JpbmcgaXRlcmF0aW9uczogMgoKPiBhbm92YShmaXQpCkFuYWx5c2lzIG9mIERldmlhbmNlIFRhYmxlCgpNb2RlbDogZ2F1c3NpYW4sIGxpbms6IGlkZW50aXR5CgpSZXNwb25zZTogeQoKVGVybXMgYWRkZWQgc2VxdWVudGlhbGx5IChmaXJzdCB0byBsYXN0KQoKCiAgICAgRGYgRGV2aWFuY2UgUmVzaWQuIERmIFJlc2lkLiBEZXYKTlVMTCAgICAgICAgICAgICAgICAgICAgMTAgICAgIDIuNzQwNAp4ICAgICAwICAgICAgICAwICAgICAgICAxMCAgICAgMi43NDA0Cj4gcHJlZGljdChmaXQpCiAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIAogMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAKPiBwcmVkaWN0KGZpdCwgZGF0YS5mcmFtZSh4PXgpLCBzZT1UUlVFKQokZml0CiAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIAogMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAKCiRzZS5maXQKIFsxXSAwIDAgMCAwIDAgMCAwIDAgMCAwCgokcmVzaWR1YWwuc2NhbGUKWzFdIDAuNTIzNDg0MwoKV2FybmluZyBtZXNzYWdlOgpJbiBwcmVkaWN0LmxtKG9iamVjdCwgbmV3ZGF0YSwgc2UuZml0LCBzY2FsZSA9IHJlc2lkdWFsLnNjYWxlLCB0eXBlID0gaWYgKHR5cGUgPT0gIDoKICBwcmVkaWN0aW9uIGZyb20gYSByYW5rLWRlZmljaWVudCBmaXQgbWF5IGJlIG1pc2xlYWRpbmcKPiBwcmVkaWN0KGZpdCwgdHlwZT0idGVybXMiLCBzZT1UUlVFKQokZml0CiAgIHgKMSAgMAoyICAwCjMgIDAKNCAgMAo1ICAwCjYgIDAKNyAgMAo4ICAwCjkgIDAKMTAgMAphdHRyKCwiY29uc3RhbnQiKQpbMV0gMAoKJHNlLmZpdAogICB4CjEgIDAKMiAgMAozICAwCjQgIDAKNSAgMAo2ICAwCjcgIDAKOCAgMAo5ICAwCjEwIDAKCiRyZXNpZHVhbC5zY2FsZQpbMV0gMC41MjM0ODQzCgo+ICMjIExvdHMgb2YgcHJvYmxlbXMgaW4gMS43LngKPiAKPiAKPiAjIyBsbS5pbmZsdWVuY2Ugb24gZGVmaWNpZW50IGxtIG1vZGVscwo+IGRhdCA8LSBkYXRhLmZyYW1lKHk9cm5vcm0oMTApLCB4MT0xOjEwLCB4Mj0xOjEwLCB4MyA9IDAsIHd0PWMoMCxyZXAoMSwgOSkpLAorICAgICAgICAgICAgICAgICAgIHJvdy5uYW1lcz1sZXR0ZXJzWzE6MTBdKQo+IGRhdFszLCAxXSA8LSBkYXRbNCwgMl0gPC0gTkEKPiBsbS5pbmZsdWVuY2UobG0oeSB+IHgxICsgeDIsIGRhdGE9ZGF0LCB3ZWlnaHRzPXd0LCBuYS5hY3Rpb249bmEub21pdCkpCiRoYXQKICAgICAgICBiICAgICAgICAgZSAgICAgICAgIGYgICAgICAgICBnICAgICAgICAgaCAgICAgICAgIGkgICAgICAgICBqIAowLjY1NDYwNTMgMC4yMTA1MjYzIDAuMTU0NjA1MyAwLjE0NDczNjggMC4xODA5MjExIDAuMjYzMTU3OSAwLjM5MTQ0NzQgCgokY29lZmZpY2llbnRzCiAgKEludGVyY2VwdCkgICAgICAgICAgIHgxCmIgIDEuMzkxMzg3ODQgLTAuMTczMjY3MTY1CmUgLTAuNzA5MzA5NzIgIDAuMDY4NjQyODc3CmYgIDAuMTIwMzk4MDkgLTAuMDA3ODE4MDU4CmcgIDAuMDE5NzE1OTUgIDAuMDAxMzE0Mzk3CmggIDAuMDMyNzI2MzcgLTAuMDE3MzI1NzI2CmkgLTAuMzY5Mjk1MjYgIDAuMDkyMzIzODE0CmogIDAuMzM4NjEzMTEgLTAuMDcwMTYzMDc2Cgokc2lnbWEKICAgICAgICBiICAgICAgICAgZSAgICAgICAgIGYgICAgICAgICBnICAgICAgICAgaCAgICAgICAgIGkgICAgICAgICBqIAowLjk2NDE0NDEgMC43NDM0NTk4IDEuMDQ5NjcyNyAxLjA2ODE5MDggMS4wMzg5NTg2IDAuNzYzMzc0OCAxLjAwOTMxODcgCgokd3QucmVzCiAgICAgICAgIGIgICAgICAgICAgZSAgICAgICAgICBmICAgICAgICAgIGcgICAgICAgICAgaCAgICAgICAgICBpICAgICAgICAgIGogCiAwLjU1MTMwNDYgLTEuMzcyODU3NSAgMC40MDE4NDgyICAwLjE3MDg3MTYgLTAuNDc5MzQ1MSAgMS4yOTI1MzM0IC0wLjU2NDM1NTIgCgo+IGxtLmluZmx1ZW5jZShsbSh5IH4geDEgKyB4MiwgZGF0YT1kYXQsIHdlaWdodHM9d3QsIG5hLmFjdGlvbj1uYS5leGNsdWRlKSkKJGhhdAogICAgICAgIGIgICAgICAgICBlICAgICAgICAgYyAgICAgICAgIGQgICAgICAgICBmICAgICAgICAgZyAgICAgICAgIGggICAgICAgICBpIAowLjY1NDYwNTMgMC4yMTA1MjYzIDAuMDAwMDAwMCAwLjAwMDAwMDAgMC4xNTQ2MDUzIDAuMTQ0NzM2OCAwLjE4MDkyMTEgMC4yNjMxNTc5IAogICAgICAgIGogCjAuMzkxNDQ3NCAKCiRjb2VmZmljaWVudHMKICAoSW50ZXJjZXB0KSAgICAgICAgICAgeDEKYiAgMS4zOTEzODc4NCAtMC4xNzMyNjcxNjUKZSAtMC43MDkzMDk3MiAgMC4wNjg2NDI4NzcKYyAgMC4wMDAwMDAwMCAgMC4wMDAwMDAwMDAKZCAgMC4wMDAwMDAwMCAgMC4wMDAwMDAwMDAKZiAgMC4xMjAzOTgwOSAtMC4wMDc4MTgwNTgKZyAgMC4wMTk3MTU5NSAgMC4wMDEzMTQzOTcKaCAgMC4wMzI3MjYzNyAtMC4wMTczMjU3MjYKaSAtMC4zNjkyOTUyNiAgMC4wOTIzMjM4MTQKaiAgMC4zMzg2MTMxMSAtMC4wNzAxNjMwNzYKCiRzaWdtYQogICAgICAgIGIgICAgICAgICBlICAgICAgICAgYyAgICAgICAgIGQgICAgICAgICBmICAgICAgICAgZyAgICAgICAgIGggICAgICAgICBpIAowLjk2NDE0NDEgMC43NDM0NTk4IDAuOTU4OTg1NCAwLjk1ODk4NTQgMS4wNDk2NzI3IDEuMDY4MTkwOCAxLjAzODk1ODYgMC43NjMzNzQ4IAogICAgICAgIGogCjEuMDA5MzE4NyAKCiR3dC5yZXMKICAgICAgICAgYiAgICAgICAgICBlICAgICAgICAgIGMgICAgICAgICAgZCAgICAgICAgICBmICAgICAgICAgIGcgICAgICAgICAgaCAKIDAuNTUxMzA0NiAtMS4zNzI4NTc1ICAgICAgICAgTkEgICAgICAgICBOQSAgMC40MDE4NDgyICAwLjE3MDg3MTYgLTAuNDc5MzQ1MSAKICAgICAgICAgaSAgICAgICAgICBqIAogMS4yOTI1MzM0IC0wLjU2NDM1NTIgCgo+IGxtLmluZmx1ZW5jZShsbSh5IH4gMCwgZGF0YT1kYXQsIHdlaWdodHM9d3QsIG5hLmFjdGlvbj1uYS5vbWl0KSkKJGhhdApiIGQgZSBmIGcgaCBpIGogCjAgMCAwIDAgMCAwIDAgMCAKCiRjb2VmZmljaWVudHMKIApiCmQKZQpmCmcKaAppCmoKCiRzaWdtYQogICAgICAgIGIgICAgICAgICBkICAgICAgICAgZSAgICAgICAgIGYgICAgICAgICBnICAgICAgICAgaCAgICAgICAgIGkgICAgICAgICBqIAowLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IAoKJHd0LnJlcwogICAgICAgICBiICAgICAgICAgIGQgICAgICAgICAgZSAgICAgICAgICBmICAgICAgICAgIGcgICAgICAgICAgaCAgICAgICAgICBpIAogMC4zNjA0NTQ3ICAwLjExNDY4MTIgLTEuMTQyNjc1MyAgMC43NzIzNzQ0ICAwLjY4MTc0MTkgIDAuMTcxODY5MyAgMi4wODQwOTE4IAogICAgICAgICBqIAogMC4zNjc1NDczIAoKPiBsbS5pbmZsdWVuY2UobG0oeSB+IDAsIGRhdGE9ZGF0LCB3ZWlnaHRzPXd0LCBuYS5hY3Rpb249bmEuZXhjbHVkZSkpCiRoYXQKYiBkIGMgZSBmIGcgaCBpIGogCjAgMCAwIDAgMCAwIDAgMCAwIAoKJGNvZWZmaWNpZW50cwogCmIKZApjCmUKZgpnCmgKaQpqCgokc2lnbWEKICAgICAgICBiICAgICAgICAgZCAgICAgICAgIGMgICAgICAgICBlICAgICAgICAgZiAgICAgICAgIGcgICAgICAgICBoICAgICAgICAgaSAKMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAKICAgICAgICBqIAowLjkzNjYyODkgCgokd3QucmVzCiAgICAgICAgIGIgICAgICAgICAgZCAgICAgICAgICBjICAgICAgICAgIGUgICAgICAgICAgZiAgICAgICAgICBnICAgICAgICAgIGggCiAwLjM2MDQ1NDcgIDAuMTE0NjgxMiAgICAgICAgIE5BIC0xLjE0MjY3NTMgIDAuNzcyMzc0NCAgMC42ODE3NDE5ICAwLjE3MTg2OTMgCiAgICAgICAgIGkgICAgICAgICAgaiAKIDIuMDg0MDkxOCAgMC4zNjc1NDczIAoKPiBsbS5pbmZsdWVuY2UobG0oeSB+IDAgKyB4MywgZGF0YT1kYXQsIHdlaWdodHM9d3QsIG5hLmFjdGlvbj1uYS5vbWl0KSkKJGhhdApiIGQgZSBmIGcgaCBpIGogCjAgMCAwIDAgMCAwIDAgMCAKCiRjb2VmZmljaWVudHMKIApiCmQKZQpmCmcKaAppCmoKCiRzaWdtYQogICAgICAgIGIgICAgICAgICBkICAgICAgICAgZSAgICAgICAgIGYgICAgICAgICBnICAgICAgICAgaCAgICAgICAgIGkgICAgICAgICBqIAowLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IAoKJHd0LnJlcwogICAgICAgICBiICAgICAgICAgIGQgICAgICAgICAgZSAgICAgICAgICBmICAgICAgICAgIGcgICAgICAgICAgaCAgICAgICAgICBpIAogMC4zNjA0NTQ3ICAwLjExNDY4MTIgLTEuMTQyNjc1MyAgMC43NzIzNzQ0ICAwLjY4MTc0MTkgIDAuMTcxODY5MyAgMi4wODQwOTE4IAogICAgICAgICBqIAogMC4zNjc1NDczIAoKPiBsbS5pbmZsdWVuY2UobG0oeSB+IDAgKyB4MywgZGF0YT1kYXQsIHdlaWdodHM9d3QsIG5hLmFjdGlvbj1uYS5leGNsdWRlKSkKJGhhdApiIGQgYyBlIGYgZyBoIGkgaiAKMCAwIDAgMCAwIDAgMCAwIDAgCgokY29lZmZpY2llbnRzCiAKYgpkCmMKZQpmCmcKaAppCmoKCiRzaWdtYQogICAgICAgIGIgICAgICAgICBkICAgICAgICAgYyAgICAgICAgIGUgICAgICAgICBmICAgICAgICAgZyAgICAgICAgIGggICAgICAgICBpIAowLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IAogICAgICAgIGogCjAuOTM2NjI4OSAKCiR3dC5yZXMKICAgICAgICAgYiAgICAgICAgICBkICAgICAgICAgIGMgICAgICAgICAgZSAgICAgICAgICBmICAgICAgICAgIGcgICAgICAgICAgaCAKIDAuMzYwNDU0NyAgMC4xMTQ2ODEyICAgICAgICAgTkEgLTEuMTQyNjc1MyAgMC43NzIzNzQ0ICAwLjY4MTc0MTkgIDAuMTcxODY5MyAKICAgICAgICAgaSAgICAgICAgICBqIAogMi4wODQwOTE4ICAwLjM2NzU0NzMgCgo+IGxtLmluZmx1ZW5jZShsbSh5IH4gMCwgZGF0YT1kYXQsIG5hLmFjdGlvbj1uYS5leGNsdWRlKSkKJGhhdAphIGIgYyBkIGUgZiBnIGggaSBqIAowIDAgMCAwIDAgMCAwIDAgMCAwIAoKJGNvZWZmaWNpZW50cwogCmEKYgpjCmQKZQpmCmcKaAppCmoKCiRzaWdtYQogICAgICAgIGEgICAgICAgICBiICAgICAgICAgYyAgICAgICAgIGQgICAgICAgICBlICAgICAgICAgZiAgICAgICAgIGcgICAgICAgICBoIAowLjg4NjA5MTYgMC44ODYwOTE2IDAuODg2MDkxNiAwLjg4NjA5MTYgMC44ODYwOTE2IDAuODg2MDkxNiAwLjg4NjA5MTYgMC44ODYwOTE2IAogICAgICAgIGkgICAgICAgICBqIAowLjg4NjA5MTYgMC44ODYwOTE2IAoKJHd0LnJlcwogICAgICAgICBhICAgICAgICAgIGIgICAgICAgICAgYyAgICAgICAgICBkICAgICAgICAgIGUgICAgICAgICAgZiAgICAgICAgICBnIAogMC4yMTk2MjgwICAwLjM2MDQ1NDcgICAgICAgICBOQSAgMC4xMTQ2ODEyIC0xLjE0MjY3NTMgIDAuNzcyMzc0NCAgMC42ODE3NDE5IAogICAgICAgICBoICAgICAgICAgIGkgICAgICAgICAgaiAKIDAuMTcxODY5MyAgMi4wODQwOTE4ICAwLjM2NzU0NzMgCgo+ICMjIGxhc3QgdGhyZWUgbWlzYmVoYXZlZCBpbiAxLjcueCwgbm9uZSBoYWQgcHJvcGVyIG5hbWVzLgo+IAo+IAo+ICMjIGxlbmd0aCBvZiByZXN1bHRzIGluIEFSTUFhY2Ygd2hlbiBsYWcubWF4IGlzIHVzZWQKPiBBUk1BYWNmKGFyPWMoMS4zLC0wLjYsIC0wLjIsIDAuMSksbGFnLm1heD0xKSAjIHdhcyA0IGluIDEuNy4xCiAgICAgICAgMCAgICAgICAgIDEgCjEuMDAwMDAwMCAwLjc2NDQwNDYgCj4gQVJNQWFjZihhcj1jKDEuMywtMC42LCAtMC4yLCAwLjEpLGxhZy5tYXg9MikKICAgICAgICAwICAgICAgICAgMSAgICAgICAgIDIgCjEuMDAwMDAwMCAwLjc2NDQwNDYgMC4yNjc2MDU2IAo+IEFSTUFhY2YoYXI9YygxLjMsLTAuNiwgLTAuMiwgMC4xKSxsYWcubWF4PTMpCiAgICAgICAgIDAgICAgICAgICAgMSAgICAgICAgICAyICAgICAgICAgIDMgCiAxLjAwMDAwMDAgIDAuNzY0NDA0NiAgMC4yNjc2MDU2IC0wLjIzNDMxNTAgCj4gQVJNQWFjZihhcj1jKDEuMywtMC42LCAtMC4yLCAwLjEpLGxhZy5tYXg9NCkKICAgICAgICAgMCAgICAgICAgICAxICAgICAgICAgIDIgICAgICAgICAgMyAgICAgICAgICA0IAogMS4wMDAwMDAwICAwLjc2NDQwNDYgIDAuMjY3NjA1NiAtMC4yMzQzMTUwIC0wLjUxODA1MzggCj4gQVJNQWFjZihhcj1jKDEuMywtMC42LCAtMC4yLCAwLjEpLGxhZy5tYXg9NSkgIyBmYWlsZWQgaW4gMS43LjEKICAgICAgICAgMCAgICAgICAgICAxICAgICAgICAgIDIgICAgICAgICAgMyAgICAgICAgICA0ICAgICAgICAgIDUgCiAxLjAwMDAwMDAgIDAuNzY0NDA0NiAgMC4yNjc2MDU2IC0wLjIzNDMxNTAgLTAuNTE4MDUzOCAtMC41MDk5NjE2IAo+IEFSTUFhY2YoYXI9YygxLjMsLTAuNiwgLTAuMiwgMC4xKSxsYWcubWF4PTYpCiAgICAgICAgIDAgICAgICAgICAgMSAgICAgICAgICAyICAgICAgICAgIDMgICAgICAgICAgNCAgICAgICAgICA1ICAgICAgICAgIDYgCiAxLjAwMDAwMDAgIDAuNzY0NDA0NiAgMC4yNjc2MDU2IC0wLjIzNDMxNTAgLTAuNTE4MDUzOCAtMC41MDk5NjE2IC0wLjI3ODQ5NDIgCj4gQVJNQWFjZihhcj1jKDEuMywtMC42LCAtMC4yLCAwLjEpLGxhZy5tYXg9MTApCiAgICAgICAgIDAgICAgICAgICAgMSAgICAgICAgICAyICAgICAgICAgIDMgICAgICAgICAgNCAgICAgICAgICA1ICAgICAgICAgIDYgCiAxLjAwMDAwMDAgIDAuNzY0NDA0NiAgMC4yNjc2MDU2IC0wLjIzNDMxNTAgLTAuNTE4MDUzOCAtMC41MDk5NjE2IC0wLjI3ODQ5NDIgCiAgICAgICAgIDcgICAgICAgICAgOCAgICAgICAgICA5ICAgICAgICAgMTAgCiAwLjAyNDExMzcgIDAuMjQ4NjMxMyAgMC4zMTM0NTUxICAwLjIyNTY0MDggCj4gIyMKPiAKPiAKPiAjIyBJbmRleGluZyBub24tZXhpc3RlbnQgY29sdW1ucyBpbiBhIGRhdGEgZnJhbWUKPiB4IDwtIGRhdGEuZnJhbWUoYSA9IDEsIGIgPSAyKQo+IHRyeSh4W2MoImEiLCAiYyIpXSkKRXJyb3IgaW4gYFsuZGF0YS5mcmFtZWAoeCwgYygiYSIsICJjIikpIDogdW5kZWZpbmVkIGNvbHVtbnMgc2VsZWN0ZWQKPiB0cnkoeFssIGMoImEiLCAiYyIpXSkKRXJyb3IgaW4gYFsuZGF0YS5mcmFtZWAoeCwgLCBjKCJhIiwgImMiKSkgOiB1bmRlZmluZWQgY29sdW1ucyBzZWxlY3RlZAo+IHRyeSh4WzEsIGMoImEiLCAiYyIpXSkKRXJyb3IgaW4gYFsuZGF0YS5mcmFtZWAoeCwgMSwgYygiYSIsICJjIikpIDogdW5kZWZpbmVkIGNvbHVtbnMgc2VsZWN0ZWQKPiAjIyBTZWNvbmQgc3VjY2VlZGVkLCB0aGlyZCBnYXZlIHVuaWZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGluIDEuNy54Lgo+IAo+IAo+ICMjIG1ldGhvZHMoY2xhc3MgPSApIHdpdGggbmFtZXNwYWNlcywgLlByaW1pdGl2ZXMgZXRjIChtYW55IG1pc3NpbmcgaW4gMS43LngpOgo+IG1ldGgyZ2VuIDwtIGZ1bmN0aW9uKGNsKQorICAgICBub3F1b3RlKHN1YihwYXN0ZSgiXFwuIixjbCwiJCIsc2VwPSIiKSwiIiwgYyguUzNtZXRob2RzKGNsYXNzID0gY2wpKSkpCj4gbWV0aDJnZW4oImRhdGEuZnJhbWUiKQogWzFdICQ8LSAgICAgICAgICAgTWF0aCAgICAgICAgICBPcHMgICAgICAgICAgIFN1bW1hcnkgICAgICAgWyAgICAgICAgICAgIAogWzZdIFs8LSAgICAgICAgICAgW1sgICAgICAgICAgICBbWzwtICAgICAgICAgIGFnZ3JlZ2F0ZSAgICAgYW55RHVwbGljYXRlZApbMTFdIGFzLmRhdGEuZnJhbWUgYXMubGlzdCAgICAgICBhcy5tYXRyaXggICAgIGJ5ICAgICAgICAgICAgY2JpbmQgICAgICAgIApbMTZdIGRpbSAgICAgICAgICAgZGltbmFtZXMgICAgICBkaW1uYW1lczwtICAgIGRyb3BsZXZlbHMgICAgZHVwbGljYXRlZCAgIApbMjFdIGVkaXQgICAgICAgICAgZm9ybWF0ICAgICAgICBmb3JtdWxhICAgICAgIGhlYWQgICAgICAgICAgaXMubmEgICAgICAgIApbMjZdIG1lcmdlICAgICAgICAgbmEuZXhjbHVkZSAgICBuYS5vbWl0ICAgICAgIHBsb3QgICAgICAgICAgcHJpbnQgICAgICAgIApbMzFdIHByb21wdCAgICAgICAgcmJpbmQgICAgICAgICByb3cubmFtZXMgICAgIHJvdy5uYW1lczwtICAgcm93c3VtICAgICAgIApbMzZdIHNwbGl0ICAgICAgICAgc3BsaXQ8LSAgICAgICBzdGFjayAgICAgICAgIHN0ciAgICAgICAgICAgc3Vic2V0ICAgICAgIApbNDFdIHN1bW1hcnkgICAgICAgdCAgICAgICAgICAgICB0YWlsICAgICAgICAgIHRyYW5zZm9ybSAgICAgdHlwZS5jb252ZXJ0IApbNDZdIHVuaXF1ZSAgICAgICAgdW5zdGFjayAgICAgICB3aXRoaW4gICAgICAgCj4gbWV0aDJnZW4oImRlbmRyb2dyYW0iKQogWzFdIFtbICAgICAgICAgICAgYXMuZGVuZHJvZ3JhbSBhcy5oY2x1c3QgICAgIGNvcGhlbmV0aWMgICAgY3V0ICAgICAgICAgIAogWzZdIGxhYmVscyAgICAgICAgbWVyZ2UgICAgICAgICBub2JzICAgICAgICAgIHBsb3QgICAgICAgICAgcHJpbnQgICAgICAgIApbMTFdIHJlb3JkZXIgICAgICAgcmV2ICAgICAgICAgICBzdHIgICAgICAgICAgCj4gIyMgLS0+IHRoZSBvdXRwdXQgbWF5IG5lZWQgc29tZXdoYXQgZnJlcXVlbnQgdXBkYXRpbmcuLgo+IAo+IAo+ICMjIHN1YnNldHRpbmcgYSAxRCBhcnJheSBsb3N0IHRoZSBkaW1lbnNpb25zCj4geCA8LSBhcnJheSgxOjUsIGRpbT1jKDUpKQo+IGRpbSh4KQpbMV0gNQo+IGRpbSh4WywgZHJvcD1UUlVFXSkKWzFdIDUKPiBkaW0oeFsyOjNdKQpbMV0gMgo+IGRpbSh4WzJdKQpOVUxMCj4gZGltKHhbMiwgZHJvcD1GQUxTRV0pClsxXSAxCj4gZGltbmFtZXMoeCkgPC0gbGlzdChzb21lPWxldHRlcnNbMTo1XSkKPiB4W10Kc29tZQphIGIgYyBkIGUgCjEgMiAzIDQgNSAKPiB4WzI6M10Kc29tZQpiIGMgCjIgMyAKPiB4WzJdCmIgCjIgCj4geFsyLCBkcm9wPUZBTFNFXQpzb21lCmIgCjIgCj4gIyMgYm90aCBkaW0gYW5kIGRpbW5hbWVzIGxvc3QgaW4gMS44LjAKPiAKPiAKPiAjIyBwcmludC5kaXN0KCkgZGlkbid0IHNob3cgTkEncyBwcmlvciB0byAxLjguMQo+IHggPC0gY2JpbmQoYygxLE5BLDIsMyksIGMoTkEsMixOQSwxKSkKPiAoZCA8LSBkaXN0KHgpKQogICAgICAgICAxICAgICAgICAyICAgICAgICAzCjIgICAgICAgTkEgICAgICAgICAgICAgICAgICAKMyAxLjQxNDIxNCAgICAgICBOQSAgICAgICAgIAo0IDIuODI4NDI3IDEuNDE0MjE0IDEuNDE0MjE0Cj4gcHJpbnQoZCwgZGlhZyA9IFRSVUUpCiAgICAgICAgIDEgICAgICAgIDIgICAgICAgIDMgICAgICAgIDQKMSAwLjAwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIAoyICAgICAgIE5BIDAuMDAwMDAwICAgICAgICAgICAgICAgICAgCjMgMS40MTQyMTQgICAgICAgTkEgMC4wMDAwMDAgICAgICAgICAKNCAyLjgyODQyNyAxLjQxNDIxNCAxLjQxNDIxNCAwLjAwMDAwMAo+ICMjCj4gCj4gCj4gIyMgb2Zmc2V0cyBpbiBtb2RlbCB0ZXJtcyB3aGVyZSBzb21ldGltZXMgbm90IGRlbGV0ZWQgY29ycmVjdGx5Cj4gYXR0cmlidXRlcyh0ZXJtcyh+IGEgKyBiICsgYTpiICsgb2Zmc2V0KGMpKSlbYygib2Zmc2V0IiwgInRlcm0ubGFiZWxzIildCiRvZmZzZXQKWzFdIDMKCiR0ZXJtLmxhYmVscwpbMV0gImEiICAgImIiICAgImE6YiIKCj4gYXR0cmlidXRlcyh0ZXJtcyh5IH4gYSArIGIgKyBhOmIgKyBvZmZzZXQoYykpKVtjKCJvZmZzZXQiLCAidGVybS5sYWJlbHMiKV0KJG9mZnNldApbMV0gNAoKJHRlcm0ubGFiZWxzClsxXSAiYSIgICAiYiIgICAiYTpiIgoKPiBhdHRyaWJ1dGVzKHRlcm1zKH4gb2Zmc2V0KGMpICsgYSArIGIgKyBhOmIpKVtjKCJvZmZzZXQiLCAidGVybS5sYWJlbHMiKV0KJG9mZnNldApbMV0gMQoKJHRlcm0ubGFiZWxzClsxXSAiYSIgICAiYiIgICAiYTpiIgoKPiBhdHRyaWJ1dGVzKHRlcm1zKHkgfiBvZmZzZXQoYykgKyBhICsgYiArIGE6YikpW2MoIm9mZnNldCIsICJ0ZXJtLmxhYmVscyIpXQokb2Zmc2V0ClsxXSAyCgokdGVybS5sYWJlbHMKWzFdICJhIiAgICJiIiAgICJhOmIiCgo+ICMjIGVycm9ycyBwcmlvciB0byAxLjguMQo+IAo+IAo+ICMjIDAtbGV2ZWwgZmFjdG9ycyBnYXZlIG5vbnNlbnNpY2FsIGFuc3dlcnMgaW4gbW9kZWwubWF0cml4Cj4gbSA8LSBtb2RlbC5mcmFtZSh+eCwgZGF0YS5mcmFtZSh4PU5BKSwgbmEuYWN0aW9uPW5hLnBhc3MpCj4gbW9kZWwubWF0cml4KH54LCBtKQogIChJbnRlcmNlcHQpIHhUUlVFCjEgICAgICAgICAgIDEgICAgTkEKYXR0cigsImFzc2lnbiIpClsxXSAwIDEKYXR0cigsImNvbnRyYXN0cyIpCmF0dHIoLCJjb250cmFzdHMiKSR4ClsxXSAiY29udHIudHJlYXRtZW50IgoKPiBsbS5maXQgPC0gbG0oeSB+IHgsIGRhdGEuZnJhbWUoeD0xOjEwLCB5PTE6MTApKQo+IHRyeShwcmVkaWN0KGxtLmZpdCwgZGF0YS5mcmFtZSh4PU5BKSkpCkVycm9yIDogdmFyaWFibGUgJ3gnIHdhcyBmaXR0ZWQgd2l0aCB0eXBlICJudW1lcmljIiBidXQgdHlwZSAibG9naWNhbCIgd2FzIHN1cHBsaWVkCj4gIyMgd3JvbmcgYW5zd2VycyBpbiAxLjguMCwgcmVmdXNlZCB0byBydW4gaW4gMS44LjEKPiAKPiAKPiAKPiAjIyBmYWlsdXJlIHRvIHByaW50IGRhdGEgZnJhbWUgY29udGFpbmluZyBhcnJheXMKPiAjIyByYWlzZWQgYnkgSm9obiBGb3ggb24gUi1kZXZlbCBvbiAyMDA0LTAxLTA4Cj4geTEgPC0gYXJyYXkoMToxMCwgZGltPTEwKQo+IHkyIDwtIGFycmF5KDE6MzAsIGRpbT1jKDEwLDMpLCBkaW1uYW1lcz1saXN0KE5VTEwsIGxldHRlcnNbMTozXSkpCj4geTMgPC0gYXJyYXkoMTo0MCwgZGltPWMoMTAsMiwyKSwKKyAgICAgICAgICAgICBkaW1uYW1lcz1saXN0KE5VTEwsIGxldHRlcnNbMToyXSwgTlVMTCkpCj4gZGF0YS5mcmFtZSh5PXkxKQogICAgeQoxICAgMQoyICAgMgozICAgMwo0ICAgNAo1ICAgNQo2ICAgNgo3ICAgNwo4ICAgOAo5ICAgOQoxMCAxMAo+IGRhdGEuZnJhbWUoeT15MikKICAgeS5hIHkuYiB5LmMKMSAgICAxICAxMSAgMjEKMiAgICAyICAxMiAgMjIKMyAgICAzICAxMyAgMjMKNCAgICA0ICAxNCAgMjQKNSAgICA1ICAxNSAgMjUKNiAgICA2ICAxNiAgMjYKNyAgICA3ICAxNyAgMjcKOCAgICA4ICAxOCAgMjgKOSAgICA5ICAxOSAgMjkKMTAgIDEwICAyMCAgMzAKPiBkYXRhLmZyYW1lKHk9eTMpCiAgIHkuYS4xIHkuYi4xIHkuYS4yIHkuYi4yCjEgICAgICAxICAgIDExICAgIDIxICAgIDMxCjIgICAgICAyICAgIDEyICAgIDIyICAgIDMyCjMgICAgICAzICAgIDEzICAgIDIzICAgIDMzCjQgICAgICA0ICAgIDE0ICAgIDI0ICAgIDM0CjUgICAgICA1ICAgIDE1ICAgIDI1ICAgIDM1CjYgICAgICA2ICAgIDE2ICAgIDI2ICAgIDM2CjcgICAgICA3ICAgIDE3ICAgIDI3ICAgIDM3CjggICAgICA4ICAgIDE4ICAgIDI4ICAgIDM4CjkgICAgICA5ICAgIDE5ICAgIDI5ICAgIDM5CjEwICAgIDEwICAgIDIwICAgIDMwICAgIDQwCj4gCj4gYXMuZGF0YS5mcmFtZSh5MSkKICAgeTEKMSAgIDEKMiAgIDIKMyAgIDMKNCAgIDQKNSAgIDUKNiAgIDYKNyAgIDcKOCAgIDgKOSAgIDkKMTAgMTAKPiBhcy5kYXRhLmZyYW1lKHkyKQogICAgYSAgYiAgYwoxICAgMSAxMSAyMQoyICAgMiAxMiAyMgozICAgMyAxMyAyMwo0ICAgNCAxNCAyNAo1ICAgNSAxNSAyNQo2ICAgNiAxNiAyNgo3ICAgNyAxNyAyNwo4ICAgOCAxOCAyOAo5ICAgOSAxOSAyOQoxMCAxMCAyMCAzMAo+IGFzLmRhdGEuZnJhbWUoeTMpCiAgIGEuMSBiLjEgYS4yIGIuMgoxICAgIDEgIDExICAyMSAgMzEKMiAgICAyICAxMiAgMjIgIDMyCjMgICAgMyAgMTMgIDIzICAzMwo0ICAgIDQgIDE0ICAyNCAgMzQKNSAgICA1ICAxNSAgMjUgIDM1CjYgICAgNiAgMTYgIDI2ICAzNgo3ICAgIDcgIDE3ICAyNyAgMzcKOCAgICA4ICAxOCAgMjggIDM4CjkgICAgOSAgMTkgIDI5ICAzOQoxMCAgMTAgIDIwICAzMCAgNDAKPiAKPiBYIDwtIGRhdGEuZnJhbWUoeD0xOjEwKQo+IFgkeSA8LSB5MQo+IFgKICAgIHggIHkKMSAgIDEgIDEKMiAgIDIgIDIKMyAgIDMgIDMKNCAgIDQgIDQKNSAgIDUgIDUKNiAgIDYgIDYKNyAgIDcgIDcKOCAgIDggIDgKOSAgIDkgIDkKMTAgMTAgMTAKPiBzYXBwbHkoWCwgZGltKQokeApOVUxMCgokeQpbMV0gMTAKCj4gCj4gWCR5IDwtIHkyCj4gWAogICAgeCB5LmEgeS5iIHkuYwoxICAgMSAgIDEgIDExICAyMQoyICAgMiAgIDIgIDEyICAyMgozICAgMyAgIDMgIDEzICAyMwo0ICAgNCAgIDQgIDE0ICAyNAo1ICAgNSAgIDUgIDE1ICAyNQo2ICAgNiAgIDYgIDE2ICAyNgo3ICAgNyAgIDcgIDE3ICAyNwo4ICAgOCAgIDggIDE4ICAyOAo5ICAgOSAgIDkgIDE5ICAyOQoxMCAxMCAgMTAgIDIwICAzMAo+IHNhcHBseShYLCBkaW0pCiR4Ck5VTEwKCiR5ClsxXSAxMCAgMwoKPiAKPiBYJHkgPC0geTMKPiBYCiAgICB4IHkuYS4xIHkuYi4xIHkuYS4yIHkuYi4yCjEgICAxICAgICAxICAgIDExICAgIDIxICAgIDMxCjIgICAyICAgICAyICAgIDEyICAgIDIyICAgIDMyCjMgICAzICAgICAzICAgIDEzICAgIDIzICAgIDMzCjQgICA0ICAgICA0ICAgIDE0ICAgIDI0ICAgIDM0CjUgICA1ICAgICA1ICAgIDE1ICAgIDI1ICAgIDM1CjYgICA2ICAgICA2ICAgIDE2ICAgIDI2ICAgIDM2CjcgICA3ICAgICA3ICAgIDE3ICAgIDI3ICAgIDM3CjggICA4ICAgICA4ICAgIDE4ICAgIDI4ICAgIDM4CjkgICA5ICAgICA5ICAgIDE5ICAgIDI5ICAgIDM5CjEwIDEwICAgIDEwICAgIDIwICAgIDMwICAgIDQwCj4gc2FwcGx5KFgsIGRpbSkKJHgKTlVMTAoKJHkKWzFdIDEwICAyICAyCgo+ICMjIFRoZSBsYXN0IG9uZSBmYWlscyBpbiBTLgo+IAo+ICMjIHRlc3Qgb2YgdXNlciBob29rcwo+IGZvcihpZCBpbiBjKCJBIiwgIkIiKSkgeworICAgICBldmFsKHN1YnN0aXR1dGUoCisgICAgIHsKKyBzZXRIb29rKHBhY2thZ2VFdmVudCgic3RhdHM0IiwgIm9uTG9hZCIpLAorICAgICAgICAgZnVuY3Rpb24ocGtnbmFtZSwgLi4uKSBjYXQoIm9uTG9hZCIsIHNRdW90ZShwa2duYW1lKSwgaWQsICJcbiIpKTsKKyBzZXRIb29rKHBhY2thZ2VFdmVudCgic3RhdHM0IiwgImF0dGFjaCIpLAorICAgICAgICAgZnVuY3Rpb24ocGtnbmFtZSwgLi4uKSBjYXQoImF0dGFjaCIsIHNRdW90ZShwa2duYW1lKSwgaWQsICJcbiIpKTsKKyBzZXRIb29rKHBhY2thZ2VFdmVudCgic3RhdHM0IiwgImRldGFjaCIpLAorICAgICAgICAgZnVuY3Rpb24ocGtnbmFtZSwgLi4uKSBjYXQoImRldGFjaCIsIHNRdW90ZShwa2duYW1lKSwgaWQsICJcbiIpKTsKKyBzZXRIb29rKHBhY2thZ2VFdmVudCgic3RhdHM0IiwgIm9uVW5sb2FkIiksCisgICAgICAgICBmdW5jdGlvbihwa2duYW1lLCAuLi4pIGNhdCgib25VbmxvYWQiLCBzUXVvdGUocGtnbmFtZSksIGlkLCAiXG4iKSkKKyAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgIGxpc3QoaWQ9aWQpKSkKKyB9Cj4gbG9hZE5hbWVzcGFjZSgic3RhdHM0IikKb25Mb2FkICdzdGF0czQnIEEgCm9uTG9hZCAnc3RhdHM0JyBCIAo8ZW52aXJvbm1lbnQ6IG5hbWVzcGFjZTpzdGF0czQ+Cj4gbGlicmFyeSgic3RhdHM0IikKYXR0YWNoICdzdGF0czQnIEEgCmF0dGFjaCAnc3RhdHM0JyBCIAo+IGRldGFjaCgicGFja2FnZTpzdGF0czQiKQpkZXRhY2ggJ3N0YXRzNCcgQiAKZGV0YWNoICdzdGF0czQnIEEgCj4gdW5sb2FkTmFtZXNwYWNlKCJzdGF0czQiKQpvblVubG9hZCAnc3RhdHM0JyBCIApvblVubG9hZCAnc3RhdHM0JyBBIAo+ICMjIEp1c3QgdGVzdHMKPiAKPiAKPiAjIyByZXAoMC1sZW5ndGgtdmVjdG9yLCBsZW5ndGgub3V0ID4gMCkKPiByZXAoaW50ZWdlcigwKSwgbGVuZ3RoLm91dD0wKQppbnRlZ2VyKDApCj4gcmVwKGludGVnZXIoMCksIGxlbmd0aC5vdXQ9MTApCiBbMV0gTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEKPiB0eXBlb2YoLkxhc3QudmFsdWUpClsxXSAiaW50ZWdlciIKPiByZXAobG9naWNhbCgwKSwgbGVuZ3RoLm91dD0wKQpsb2dpY2FsKDApCj4gcmVwKGxvZ2ljYWwoMCksIGxlbmd0aC5vdXQ9MTApCiBbMV0gTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEKPiB0eXBlb2YoLkxhc3QudmFsdWUpClsxXSAibG9naWNhbCIKPiByZXAobnVtZXJpYygwKSwgbGVuZ3RoLm91dD0wKQpudW1lcmljKDApCj4gcmVwKG51bWVyaWMoMCksIGxlbmd0aC5vdXQ9MTApCiBbMV0gTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEKPiB0eXBlb2YoLkxhc3QudmFsdWUpClsxXSAiZG91YmxlIgo+IHJlcChjaGFyYWN0ZXIoMCksIGxlbmd0aC5vdXQ9MCkKY2hhcmFjdGVyKDApCj4gcmVwKGNoYXJhY3RlcigwKSwgbGVuZ3RoLm91dD0xMCkKIFsxXSBOQSBOQSBOQSBOQSBOQSBOQSBOQSBOQSBOQSBOQQo+IHR5cGVvZiguTGFzdC52YWx1ZSkKWzFdICJjaGFyYWN0ZXIiCj4gcmVwKGNvbXBsZXgoMCksIGxlbmd0aC5vdXQ9MCkKY29tcGxleCgwKQo+IHJlcChjb21wbGV4KDApLCBsZW5ndGgub3V0PTEwKQogWzFdIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BCj4gdHlwZW9mKC5MYXN0LnZhbHVlKQpbMV0gImNvbXBsZXgiCj4gcmVwKGxpc3QoKSwgbGVuZ3RoLm91dD0wKQpsaXN0KCkKPiByZXAobGlzdCgpLCBsZW5ndGgub3V0PTEwKQpbWzFdXQpOVUxMCgpbWzJdXQpOVUxMCgpbWzNdXQpOVUxMCgpbWzRdXQpOVUxMCgpbWzVdXQpOVUxMCgpbWzZdXQpOVUxMCgpbWzddXQpOVUxMCgpbWzhdXQpOVUxMCgpbWzldXQpOVUxMCgpbWzEwXV0KTlVMTAoKPiAjIyBhbHdheXMgMC1sZW5ndGggYmVmb3JlIDEuOS4wCj4gCj4gCj4gIyMgc3VwcGx5aW5nIDAtbGVuZ3RoIGRhdGEgdG8gYXJyYXkgYW5kIG1hdHJpeAo+IGFycmF5KG51bWVyaWMoMCksIGMoMiwgMikpCiAgICAgWywxXSBbLDJdClsxLF0gICBOQSAgIE5BClsyLF0gICBOQSAgIE5BCj4gYXJyYXkobGlzdCgpLCBjKDIsMikpCiAgICAgWywxXSBbLDJdClsxLF0gTlVMTCBOVUxMClsyLF0gTlVMTCBOVUxMCj4gIyB3b3JrZWQgPCAxLjguMCwgZXJyb3IgaW4gMS44LngKPiBtYXRyaXgoY2hhcmFjdGVyKDApLCAxLCAyKQogICAgIFssMV0gWywyXQpbMSxdIE5BICAgTkEgIAo+IG1hdHJpeChpbnRlZ2VyKDApLCAxLCAyKQogICAgIFssMV0gWywyXQpbMSxdICAgTkEgICBOQQo+IG1hdHJpeChsb2dpY2FsKDApLCAxLCAyKQogICAgIFssMV0gWywyXQpbMSxdICAgTkEgICBOQQo+IG1hdHJpeChudW1lcmljKDApLCAxLCAyKQogICAgIFssMV0gWywyXQpbMSxdICAgTkEgICBOQQo+IG1hdHJpeChjb21wbGV4KDApLCAxLCAyKQogICAgIFssMV0gWywyXQpbMSxdICAgTkEgICBOQQo+IG1hdHJpeChsaXN0KCksIDEsIDIpCiAgICAgWywxXSBbLDJdClsxLF0gTlVMTCBOVUxMCj4gIyMgZGlkIG5vdCB3b3JrIDwgMS45LjAKPiAKPiAKPiAjIyBTIGNvbXBhdGliaWxpdHkgY2hhbmdlIGluIDEuOS4wCj4gcmVwKDE6MiwgZWFjaD0zLCBsZW5ndGg9MTIpCiBbMV0gMSAxIDEgMiAyIDIgMSAxIDEgMiAyIDIKPiAjIyB1c2VkIHRvIHBhZCB3aXRoIE5Bcy4KPiAKPiAKPiAjIyBQUiM2NTEwOiBhb3YoKSB3aXRoIGVycm9yIGFuZCAtMQo+IHNldC5zZWVkKDEpCj4gdGVzdC5kZiA8LSBkYXRhLmZyYW1lICh5PXJub3JtKDgpLCBhPWdsKDIsMSw4KSwgYj1nbCgyLDMsOCksYz1nbCgyLDQsOCkpCj4gYW92KHkgfiBhICsgYiArIEVycm9yKGMpLCBkYXRhPXRlc3QuZGYpCgpDYWxsOgphb3YoZm9ybXVsYSA9IHkgfiBhICsgYiArIEVycm9yKGMpLCBkYXRhID0gdGVzdC5kZikKCkdyYW5kIE1lYW46IDAuODA2NjUzNAoKU3RyYXR1bSAxOiBjCgpUZXJtczoKICAgICAgICAgICAgICAgICAgICAgICAgYgpTdW0gb2YgU3F1YXJlcyAgMC4zMTc2NDg5CkRlZy4gb2YgRnJlZWRvbSAgICAgICAgIDEKCkVzdGltYXRlZCBlZmZlY3RzIGFyZSBiYWxhbmNlZAoKU3RyYXR1bSAyOiBXaXRoaW4KClRlcm1zOgogICAgICAgICAgICAgICAgICAgICAgIGEgICAgICAgIGIgUmVzaWR1YWxzClN1bSBvZiBTcXVhcmVzICAxLjM4OTQ1MyAyLjE0ODE0OSAgNS4wNDg2ODkKRGVnLiBvZiBGcmVlZG9tICAgICAgICAxICAgICAgICAxICAgICAgICAgNAoKUmVzaWR1YWwgc3RhbmRhcmQgZXJyb3I6IDEuMTIzNDY0CkVzdGltYXRlZCBlZmZlY3RzIG1heSBiZSB1bmJhbGFuY2VkCj4gYW92KHkgfiBhICsgYiAtIDEgKyBFcnJvcihjKSwgZGF0YT10ZXN0LmRmKQoKQ2FsbDoKYW92KGZvcm11bGEgPSB5IH4gYSArIGIgLSAxICsgRXJyb3IoYyksIGRhdGEgPSB0ZXN0LmRmKQoKU3RyYXR1bSAxOiBjCgpUZXJtczoKICAgICAgICAgICAgICAgICAgICAgICBhICAgICAgICBiClN1bSBvZiBTcXVhcmVzICA1LjIwNTUxOCAwLjMxNzY0OQpEZWcuIG9mIEZyZWVkb20gICAgICAgIDEgICAgICAgIDEKCjEgb3V0IG9mIDMgZWZmZWN0cyBub3QgZXN0aW1hYmxlCkVzdGltYXRlZCBlZmZlY3RzIG1heSBiZSB1bmJhbGFuY2VkCgpTdHJhdHVtIDI6IFdpdGhpbgoKVGVybXM6CiAgICAgICAgICAgICAgICAgICAgICAgYSAgICAgICAgYiBSZXNpZHVhbHMKU3VtIG9mIFNxdWFyZXMgIDEuMzg5NDUzIDIuMTQ4MTQ5ICA1LjA0ODY4OQpEZWcuIG9mIEZyZWVkb20gICAgICAgIDEgICAgICAgIDEgICAgICAgICA0CgpSZXNpZHVhbCBzdGFuZGFyZCBlcnJvcjogMS4xMjM0NjQKMSBvdXQgb2YgMyBlZmZlY3RzIG5vdCBlc3RpbWFibGUKRXN0aW1hdGVkIGVmZmVjdHMgbWF5IGJlIHVuYmFsYW5jZWQKPiAjIyB3cm9uZyBhc3NpZ25tZW50IHRvIHN0cmF0YSBsYWJlbHMgPCAxLjkuMAo+ICMjIE5vdGUgdGhpcyBpcyB1bmJhbGFuY2VkIGFuZCBub3QgYSBnb29kIGV4YW1wbGUKPiAKPiBiaW5vbS50ZXN0KGMoODAwLDEwKSkjIHAtdmFsdWUgPCBlcHNpbG9uCgoJRXhhY3QgYmlub21pYWwgdGVzdAoKZGF0YTogIGMoODAwLCAxMCkKbnVtYmVyIG9mIHN1Y2Nlc3NlcyA9IDgwMCwgbnVtYmVyIG9mIHRyaWFscyA9IDgxMCwgcC12YWx1ZSA8IDIuMmUtMTYKYWx0ZXJuYXRpdmUgaHlwb3RoZXNpczogdHJ1ZSBwcm9iYWJpbGl0eSBvZiBzdWNjZXNzIGlzIG5vdCBlcXVhbCB0byAwLjUKOTUgcGVyY2VudCBjb25maWRlbmNlIGludGVydmFsOgogMC45Nzc0MTM0IDAuOTk0MDY0MwpzYW1wbGUgZXN0aW1hdGVzOgpwcm9iYWJpbGl0eSBvZiBzdWNjZXNzIAogICAgICAgICAgICAgMC45ODc2NTQzIAoKPiAKPiAKPiAjIyBhb3Ygd2l0aCBhIHNpbmd1bGFyIGVycm9yIG1vZGVsCj4gcmQgPC0gYygxNi41MywgMTIuMTIsIDEwLjA0LCAxNS4zMiwgMTIuMzMsIDEwLjEsIDE3LjA5LCAxMS42OSwgMTEuODEsIDE0Ljc1LAorICAgICAgICAgMTAuNzIsIDguNzksIDEzLjE0LCA5Ljc5LCA4LjM2LCAxNS42MiwgOS42NCwgOC43MiwgMTUuMzIsCisgICAgICAgICAxMS4zNSwgOC41MiwgMTMuMjcsIDkuNzQsIDguNzgsIDEzLjE2LCAxMC4xNiwgOC40LCAxMy4wOCwgOS42NiwKKyAgICAgICAgIDguMTYsIDEyLjE3LCA5LjEzLCA3LjQzLCAxMy4yOCwgOS4xNiwgNy45MiwgMTE4Ljc3LCA3OC44MywgNjIuMiwKKyAgICAgICAgIDEwNy4yOSwgNzMuNzksIDU4LjU5LCAxMTguOSwgNjYuMzUsIDUzLjEyLCAzNzIuNjIsIDI0NS4zOSwgMjIzLjcyLAorICAgICAgICAgMzI2LjAzLCAyMzIuNjcsIDIwOS40NCwgMjk3LjU1LCAyMzkuNzEsIDIyMy44KQo+IHNhbXBsZS5kZiA8LSBkYXRhLmZyYW1lKGRlcC52YXJpYWJsZT1yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0PWZhY3RvcihyZXAocGFzdGUoInN1YmoiLDE6Niwgc2VwPSIiKSxlYWNoPTkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmMT1mYWN0b3IocmVwKHJlcChjKCJmMSIsImYyIiwiZjMiKSxlYWNoPTYpLDMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmMj1mYWN0b3IocmVwKGMoImcxIiwiZzIiLCJnMyIpLGVhY2g9MTgpKQorICkKPiBzYW1wbGUuYW92IDwtIGFvdihkZXAudmFyaWFibGUgfiBmMSAqIGYyICsgRXJyb3Ioc3ViamVjdC8oZjErZjIpKSwgZGF0YT1zYW1wbGUuZGYpCldhcm5pbmcgbWVzc2FnZToKSW4gYW92KGRlcC52YXJpYWJsZSB+IGYxICogZjIgKyBFcnJvcihzdWJqZWN0LyhmMSArIGYyKSksIGRhdGEgPSBzYW1wbGUuZGYpIDoKICBFcnJvcigpIG1vZGVsIGlzIHNpbmd1bGFyCj4gc2FtcGxlLmFvdgoKQ2FsbDoKYW92KGZvcm11bGEgPSBkZXAudmFyaWFibGUgfiBmMSAqIGYyICsgRXJyb3Ioc3ViamVjdC8oZjEgKyBmMikpLCAKICAgIGRhdGEgPSBzYW1wbGUuZGYpCgpHcmFuZCBNZWFuOiA2NS4wNzQ0NAoKU3RyYXR1bSAxOiBzdWJqZWN0CgpUZXJtczoKICAgICAgICAgICAgICAgICAgICAgICBmMSAgICAgICAgZjIgICAgIGYxOmYyClN1bSBvZiBTcXVhcmVzICAgNDc4MTUuOTkgMzEyODI0LjQ5IDEwMDM3MC45NgpEZWcuIG9mIEZyZWVkb20gICAgICAgICAxICAgICAgICAgMiAgICAgICAgIDIKCjIgb3V0IG9mIDcgZWZmZWN0cyBub3QgZXN0aW1hYmxlCkVzdGltYXRlZCBlZmZlY3RzIG1heSBiZSB1bmJhbGFuY2VkCgpTdHJhdHVtIDI6IHN1YmplY3Q6ZjEKClRlcm1zOgogICAgICAgICAgICAgICAgICAgICAgZjEgICAgZjE6ZjIKU3VtIG9mIFNxdWFyZXMgIDQ4My45NjI4IDg2OS42ODc2CkRlZy4gb2YgRnJlZWRvbSAgICAgICAgMiAgICAgICAgNAoKRXN0aW1hdGVkIGVmZmVjdHMgbWF5IGJlIHVuYmFsYW5jZWQKClN0cmF0dW0gMzogV2l0aGluCgpUZXJtczoKICAgICAgICAgICAgICAgIFJlc2lkdWFscwpTdW0gb2YgU3F1YXJlcyAgIDI5MjA0LjEzCkRlZy4gb2YgRnJlZWRvbSAgICAgICAgNDIKClJlc2lkdWFsIHN0YW5kYXJkIGVycm9yOiAyNi4zNjkyMwo+IHN1bW1hcnkoc2FtcGxlLmFvdikKCkVycm9yOiBzdWJqZWN0CiAgICAgIERmIFN1bSBTcSBNZWFuIFNxCmYxICAgICAxICA0NzgxNiAgIDQ3ODE2CmYyICAgICAyIDMxMjgyNCAgMTU2NDEyCmYxOmYyICAyIDEwMDM3MSAgIDUwMTg1CgpFcnJvcjogc3ViamVjdDpmMQogICAgICBEZiBTdW0gU3EgTWVhbiBTcQpmMSAgICAgMiAgNDg0LjAgICAyNDIuMApmMTpmMiAgNCAgODY5LjcgICAyMTcuNAoKRXJyb3I6IFdpdGhpbgogICAgICAgICAgRGYgU3VtIFNxIE1lYW4gU3EgRiB2YWx1ZSBQcig+RikKUmVzaWR1YWxzIDQyICAyOTIwNCAgIDY5NS4zICAgICAgICAgICAgICAgCj4gc2FtcGxlLmFvdiA8LSBhb3YoZGVwLnZhcmlhYmxlIH4gZjEgKiBmMiArIEVycm9yKHN1YmplY3QvKGYyK2YxKSksIGRhdGE9c2FtcGxlLmRmKQpXYXJuaW5nIG1lc3NhZ2U6CkluIGFvdihkZXAudmFyaWFibGUgfiBmMSAqIGYyICsgRXJyb3Ioc3ViamVjdC8oZjIgKyBmMSkpLCBkYXRhID0gc2FtcGxlLmRmKSA6CiAgRXJyb3IoKSBtb2RlbCBpcyBzaW5ndWxhcgo+IHNhbXBsZS5hb3YKCkNhbGw6CmFvdihmb3JtdWxhID0gZGVwLnZhcmlhYmxlIH4gZjEgKiBmMiArIEVycm9yKHN1YmplY3QvKGYyICsgZjEpKSwgCiAgICBkYXRhID0gc2FtcGxlLmRmKQoKR3JhbmQgTWVhbjogNjUuMDc0NDQKClN0cmF0dW0gMTogc3ViamVjdAoKVGVybXM6CiAgICAgICAgICAgICAgICAgICAgICAgZjEgICAgICAgIGYyICAgICBmMTpmMgpTdW0gb2YgU3F1YXJlcyAgIDQ3ODE1Ljk5IDMxMjgyNC40OSAxMDAzNzAuOTYKRGVnLiBvZiBGcmVlZG9tICAgICAgICAgMSAgICAgICAgIDIgICAgICAgICAyCgoyIG91dCBvZiA3IGVmZmVjdHMgbm90IGVzdGltYWJsZQpFc3RpbWF0ZWQgZWZmZWN0cyBtYXkgYmUgdW5iYWxhbmNlZAoKU3RyYXR1bSAyOiBzdWJqZWN0OmYxCgpUZXJtczoKICAgICAgICAgICAgICAgICAgICAgIGYxICAgIGYxOmYyClN1bSBvZiBTcXVhcmVzICA0ODMuOTYyOCA4NjkuNjg3NgpEZWcuIG9mIEZyZWVkb20gICAgICAgIDIgICAgICAgIDQKCkVzdGltYXRlZCBlZmZlY3RzIG1heSBiZSB1bmJhbGFuY2VkCgpTdHJhdHVtIDM6IFdpdGhpbgoKVGVybXM6CiAgICAgICAgICAgICAgICBSZXNpZHVhbHMKU3VtIG9mIFNxdWFyZXMgICAyOTIwNC4xMwpEZWcuIG9mIEZyZWVkb20gICAgICAgIDQyCgpSZXNpZHVhbCBzdGFuZGFyZCBlcnJvcjogMjYuMzY5MjMKPiBzdW1tYXJ5KHNhbXBsZS5hb3YpCgpFcnJvcjogc3ViamVjdAogICAgICBEZiBTdW0gU3EgTWVhbiBTcQpmMSAgICAgMSAgNDc4MTYgICA0NzgxNgpmMiAgICAgMiAzMTI4MjQgIDE1NjQxMgpmMTpmMiAgMiAxMDAzNzEgICA1MDE4NQoKRXJyb3I6IHN1YmplY3Q6ZjEKICAgICAgRGYgU3VtIFNxIE1lYW4gU3EKZjEgICAgIDIgIDQ4NC4wICAgMjQyLjAKZjE6ZjIgIDQgIDg2OS43ICAgMjE3LjQKCkVycm9yOiBXaXRoaW4KICAgICAgICAgIERmIFN1bSBTcSBNZWFuIFNxIEYgdmFsdWUgUHIoPkYpClJlc2lkdWFscyA0MiAgMjkyMDQgICA2OTUuMyAgICAgICAgICAgICAgIAo+ICMjIGZhaWxlZCBpbiAxLjguMQo+IAo+IAo+ICMjIFBSIzY2NDUgIHN0ZW0oKSB3aXRoIG5lYXItY29uc3RhbnQgdmFsdWVzCj4gc3RlbShyZXAoMSwgMTAwKSkKCiAgVGhlIGRlY2ltYWwgcG9pbnQgaXMgYXQgdGhlIHwKCiAgMSB8IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKzIwCgo+IHN0ZW0ocmVwKDAuMSwgMTApKQoKICBUaGUgZGVjaW1hbCBwb2ludCBpcyAxIGRpZ2l0KHMpIHRvIHRoZSBsZWZ0IG9mIHRoZSB8CgogIDEgfCAwMDAwMDAwMDAwCgo+IHN0ZW0oYyhyZXAoMSwgMTApLCAxKzEuZS04KSkKCiAgVGhlIGRlY2ltYWwgcG9pbnQgaXMgOCBkaWdpdChzKSB0byB0aGUgbGVmdCBvZiB0aGUgfAoKICAxMDAwMDAwMDAgfCAwMDAwMDAwMDAwCiAgMTAwMDAwMDAwIHwgCiAgMTAwMDAwMDAxIHwgMAoKPiBzdGVtKGMocmVwKDEsIDEwKSwgMSsxLmUtOSkpCgogIFRoZSBkZWNpbWFsIHBvaW50IGlzIDggZGlnaXQocykgdG8gdGhlIGxlZnQgb2YgdGhlIHwKCiAgMTAwMDAwMDAwIHwgMDAwMDAwMDAwMDEKCj4gc3RlbShjKHJlcCgxLCAxMCksIDErMS5lLTEwKSwgYXRvbT0wKSAjIGludGVnZXItb3ZlcmZsb3cgaXMgYXZvaWRlZC4KCiAgVGhlIGRlY2ltYWwgcG9pbnQgaXMgOCBkaWdpdChzKSB0byB0aGUgbGVmdCBvZiB0aGUgfAoKICAxMDAwMDAwMDAgfCAwMDAwMDAwMDAwMAoKPiAjIyAgaGFkIGludGVnZXIgb3ZlcmZsb3dzIGluIDEuOC4xLCBhbmQgc2lsbHkgc2hpZnRzIG9mIGRlY2ltYWwgcG9pbnQKPiAKPiAKPiAjIyBQUiM2NjMzIHdhcm5pbmdzIHdpdGggdmVjdG9yIG9wIG1hdHJpeCwgYW5kIG1vcmUKPiBzZXQuc2VlZCgxKQo+IHgxIDwtIHJub3JtKDMpCj4geTEgPC0gcm5vcm0oNCkKPiB4MSAqIHkxClsxXSAgMC41NTc0NjgyICAwLjE0MTA1MDIgIDAuMTYwOTE5NCAtMC4zNjQxNjM3Cldhcm5pbmcgbWVzc2FnZToKSW4geDEgKiB5MSA6CiAgbG9uZ2VyIG9iamVjdCBsZW5ndGggaXMgbm90IGEgbXVsdGlwbGUgb2Ygc2hvcnRlciBvYmplY3QgbGVuZ3RoCj4geDEgKiBhcy5tYXRyaXgoeTEpICMgbm8gd2FybmluZyBpbiAxLjguMQogICAgICAgICAgIFssMV0KWzEsXSAgMC41NTc0NjgyClsyLF0gIDAuMTQxMDUwMgpbMyxdICAwLjE2MDkxOTQKWzQsXSAtMC4zNjQxNjM3Cldhcm5pbmcgbWVzc2FnZToKSW4geDEgKiBhcy5tYXRyaXgoeTEpIDoKICBsb25nZXIgb2JqZWN0IGxlbmd0aCBpcyBub3QgYSBtdWx0aXBsZSBvZiBzaG9ydGVyIG9iamVjdCBsZW5ndGgKPiB4MSAqIG1hdHJpeCh5MSwyLDIpIyBkaXR0bwogICAgICAgICAgWywxXSAgICAgICBbLDJdClsxLF0gMC41NTc0NjgyICAwLjE2MDkxOTQKWzIsXSAwLjE0MTA1MDIgLTAuMzY0MTYzNwpXYXJuaW5nIG1lc3NhZ2U6CkluIHgxICogbWF0cml4KHkxLCAyLCAyKSA6CiAgbG9uZ2VyIG9iamVjdCBsZW5ndGggaXMgbm90IGEgbXVsdGlwbGUgb2Ygc2hvcnRlciBvYmplY3QgbGVuZ3RoCj4gejEgPC0geDEgPiAwCj4gejIgPC0geTEgPiAwCj4gejEgJiB6MgpbMV0gIFRSVUUgIFRSVUUgIFRSVUUgRkFMU0UKV2FybmluZyBtZXNzYWdlOgpJbiB6MSAmIHoyIDoKICBsb25nZXIgb2JqZWN0IGxlbmd0aCBpcyBub3QgYSBtdWx0aXBsZSBvZiBzaG9ydGVyIG9iamVjdCBsZW5ndGgKPiB6MSAmIGFzLm1hdHJpeCh6MikgIyBubyB3YXJuaW5nIGluIDEuOC4xCiAgICAgIFssMV0KWzEsXSAgVFJVRQpbMixdICBUUlVFClszLF0gIFRSVUUKWzQsXSBGQUxTRQpXYXJuaW5nIG1lc3NhZ2U6CkluIHoxICYgYXMubWF0cml4KHoyKSA6CiAgbG9uZ2VyIG9iamVjdCBsZW5ndGggaXMgbm90IGEgbXVsdGlwbGUgb2Ygc2hvcnRlciBvYmplY3QgbGVuZ3RoCj4geDEgPCB5MSAgICAgICAgICAgICMgbm8gd2FybmluZyBpbiAxLjguMQpbMV0gRkFMU0UgIFRSVUUgRkFMU0UgRkFMU0UKV2FybmluZyBtZXNzYWdlOgpJbiB4MSA8IHkxIDoKICBsb25nZXIgb2JqZWN0IGxlbmd0aCBpcyBub3QgYSBtdWx0aXBsZSBvZiBzaG9ydGVyIG9iamVjdCBsZW5ndGgKPiB4MSA8IGFzLm1hdHJpeCh5MSkgIyBkaXR0bwogICAgICBbLDFdClsxLF0gRkFMU0UKWzIsXSAgVFJVRQpbMyxdIEZBTFNFCls0LF0gRkFMU0UKV2FybmluZyBtZXNzYWdlOgpJbiB4MSA8IGFzLm1hdHJpeCh5MSkgOgogIGxvbmdlciBvYmplY3QgbGVuZ3RoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHNob3J0ZXIgb2JqZWN0IGxlbmd0aAo+ICMjCj4gCj4gCj4gIyMgc3VtbWFyeSBtZXRob2QgZm9yIG1sZQo+IGxpYnJhcnkoc3RhdHM0KQpvbkxvYWQgJ3N0YXRzNCcgQSAKb25Mb2FkICdzdGF0czQnIEIgCmF0dGFjaCAnc3RhdHM0JyBBIAphdHRhY2ggJ3N0YXRzNCcgQiAKPiBOIDwtIGMocmVwKDM6NiwgMyksIDcsNywgcmVwKDgsNiksIDksOSwgMTAsMTIpIyBzYW1wbGUgZnJvbSBQb2lzKGxhbSA9IDcpCj4gc3VtbWFyeShtbGUoZnVuY3Rpb24oTGFtID0gMSkgLXN1bShkcG9pcyhOLCBMYW0pKSkpCk1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0aW9uCgpDYWxsOgptbGUobWludXNsb2dsID0gZnVuY3Rpb24oTGFtID0gMSkgLXN1bShkcG9pcyhOLCBMYW0pKSkKCkNvZWZmaWNpZW50czoKICAgIEVzdGltYXRlIFN0ZC4gRXJyb3IKTGFtIDYuMDYzNzU1ICAgMi4zMDc1NDYKCi0yIGxvZyBMOiAtNS40MzcwNTkgCj4gIyMgIkNvZWZmaWNpZW50cyIgd2FzICJOVUxMIiBpbiAxLjkuMCdzICJkZXZlbCIKPiAKPiAKPiAjIyBQUiM2NjU2IHRlcm1zLmZvcm11bGEoc2ltcGxpZnkgPSBUUlVFKSB3YXMgbG9zaW5nIG9mZnNldCB0ZXJtcwo+ICMjIHN1Y2Nlc3NpdmUgb2Zmc2V0cyBjYXVzZWQgcHJvYmxlbXMKPiBkZiA8LSBkYXRhLmZyYW1lKHg9MTo0LCB5PXNxcnQoIDE6NCksIHo9YygyOjQsMSkpCj4gZml0MSA8LSBnbG0oeSB+IG9mZnNldCh4KSArIHosIGRhdGE9ZGYpCj4gdXBkYXRlKGZpdDEsICIuIH4uIikkY2FsbApnbG0oZm9ybXVsYSA9IHkgfiB6ICsgb2Zmc2V0KHgpLCBkYXRhID0gZGYpCj4gIyMgbG9zdCBvZmZzZXQgaW4gMS43LjAgdG8gMS44LjEKPiB0ZXJtcyh5IH4gb2Zmc2V0KHgpICsgb2Zmc2V0KGxvZyh4KSkgKyB6LCBkYXRhPWRmKQp5IH4gb2Zmc2V0KHgpICsgb2Zmc2V0KGxvZyh4KSkgKyB6CmF0dHIoLCJ2YXJpYWJsZXMiKQpsaXN0KHksIG9mZnNldCh4KSwgb2Zmc2V0KGxvZyh4KSksIHopCmF0dHIoLCJvZmZzZXQiKQpbMV0gMiAzCmF0dHIoLCJmYWN0b3JzIikKICAgICAgICAgICAgICAgegp5ICAgICAgICAgICAgICAwCm9mZnNldCh4KSAgICAgIDAKb2Zmc2V0KGxvZyh4KSkgMAp6ICAgICAgICAgICAgICAxCmF0dHIoLCJ0ZXJtLmxhYmVscyIpClsxXSAieiIKYXR0cigsIm9yZGVyIikKWzFdIDEKYXR0cigsImludGVyY2VwdCIpClsxXSAxCmF0dHIoLCJyZXNwb25zZSIpClsxXSAxCmF0dHIoLCIuRW52aXJvbm1lbnQiKQo8ZW52aXJvbm1lbnQ6IFJfR2xvYmFsRW52Pgo+ICMjIGZhaWxlZCB0byByZW1vdmUgc2Vjb25kIG9mZnNldCBmcm9tIGZvcm11bGEgaW4gMS44LjEKPiB0ZXJtcyh5IH4gb2Zmc2V0KHgpICsgeiAtIHosIGRhdGE9ZGYsIHNpbXBsaWZ5ID0gVFJVRSkKeSB+IG9mZnNldCh4KQphdHRyKCwidmFyaWFibGVzIikKbGlzdCh5LCBvZmZzZXQoeCksIHopCmF0dHIoLCJvZmZzZXQiKQpbMV0gMgphdHRyKCwiZmFjdG9ycyIpCmludGVnZXIoMCkKYXR0cigsInRlcm0ubGFiZWxzIikKY2hhcmFjdGVyKDApCmF0dHIoLCJvcmRlciIpCmludGVnZXIoMCkKYXR0cigsImludGVyY2VwdCIpClsxXSAxCmF0dHIoLCJyZXNwb25zZSIpClsxXSAxCmF0dHIoLCIuRW52aXJvbm1lbnQiKQo8ZW52aXJvbm1lbnQ6IFJfR2xvYmFsRW52Pgo+ICMjIGZpcnN0IGZpeCBmYWlsZWQgZm9yIG1vZGVscyB3aXRoIG5vIG5vbi1vZmZzZXQgdGVybXMuCj4gCj4gCj4gIyMgb25seSB0aGUgZmlyc3QgdHdvIHdlcmUgd3JvbmcgdXAgdG8gMS44LjE6Cj4gMzo0ICogMWUtMTAwClsxXSAzZS0xMDAgNGUtMTAwCj4gODoxMSogMWUtMTAwClsxXSA4LjBlLTEwMCA5LjBlLTEwMCAgMS4wZS05OSAgMS4xZS05OQo+IDE6MiAqIDFlLTk5ClsxXSAxZS05OSAyZS05OQo+IDE6MiAqIDFlKzk5ClsxXSAxZSs5OSAyZSs5OQo+IDg6MTEqIDFlKzk5ClsxXSAgOC4wZSs5OSAgOS4wZSs5OSAxLjBlKzEwMCAxLjFlKzEwMAo+IDM6NCAqIDFlKzEwMApbMV0gM2UrMTAwIDRlKzEwMAo+ICMjCj4gCj4gCj4gIyMgbmVnYXRpdmUgc3Vic2NyaXB0cyBjb3VsZCBiZSBtaXhlZCB3aXRoIE5Bcwo+IHggPC0gMTozCj4gdHJ5KHhbLWMoMSwgTkEpXSkKRXJyb3IgaW4geFstYygxLCBOQSldIDogb25seSAwJ3MgbWF5IGJlIG1peGVkIHdpdGggbmVnYXRpdmUgc3Vic2NyaXB0cwo+ICMjIHdvcmtlZCBvbiBzb21lIHBsYXRmb3Jtcywgc2VnZmF1bHRlZCBvbiBvdGhlcnMgaW4gMS44LjEKPiAKPiAKPiAjIyB2ZWN0b3IgJ2JvcmRlcicgKGFuZCBubyAncGNoJywgJ2NleCcgbm9yICdiZycpOgo+IGJveHBsb3QoY291bnQgfiBzcHJheSwgZGF0YSA9IEluc2VjdFNwcmF5cywgYm9yZGVyPTI6NykKPiAjIyBnYXZlIHdhcm5pbmdzIGluIDEuOS4wCj4gCj4gc3VtbWFyeShhcy5EYXRlKHBhc3RlKCIyMDAyLTEyIiwgMjY6MzEsIHNlcD0iLSIpKSkKICAgICAgICBNaW4uICAgICAgMXN0IFF1LiAgICAgICBNZWRpYW4gICAgICAgICBNZWFuICAgICAgM3JkIFF1LiAgICAgICAgIE1heC4gCiIyMDAyLTEyLTI2IiAiMjAwMi0xMi0yNyIgIjIwMDItMTItMjgiICIyMDAyLTEyLTI4IiAiMjAwMi0xMi0yOSIgIjIwMDItMTItMzEiIAo+ICMjIHByaW50ZWQgYWxsICIyMDAyLi0xMi0yOSIgaW4gMS45LjEge2JlY2F1c2UgZGlnaXRzIHdhcyB0b28gc21hbGx9Cj4gYXMubWF0cml4KGRhdGEuZnJhbWUoZCA9IGFzLlBPU0lYY3QoIjIwMDQtMDctMjAiKSkpCiAgICAgZCAgICAgICAgICAgClsxLF0gIjIwMDQtMDctMjAiCj4gIyMgZ2F2ZSBhIHdhcm5pbmcgaW4gMS45LjEKPiAKPiAKPiAjIyBEdW1wIHNob3VsZCBxdW90ZSB3aGVuIG5lY2Vzc2FyeSAoUFIjNjg1NykKPiB4IDwtIHF1b3RlKGIpCj4gZHVtcCgieCIsICIiKQp4IDwtCnF1b3RlKGIpCj4gIyMgZG9lc24ndCBxdW90ZSBiIGluIDEuOS4wCj4gCj4gCj4gIyMgc29tZSBjaGVja3Mgb2YgaW5kZXhpbmcgYnkgY2hhcmFjdGVyLCB1c2VkIHRvIHRlc3QgaGFzaGluZyBjb2RlCj4geCA8LSAxOjI2Cj4gbmFtZXMoeCkgPC0gbGV0dGVycwo+IHhbYygiYSIsICJhYSIsICJhYSIpXSA8LSAxMDA6MTAyCj4geAogIGEgICBiICAgYyAgIGQgICBlICAgZiAgIGcgICBoICAgaSAgIGogICBrICAgbCAgIG0gICBuICAgbyAgIHAgICBxICAgciAgIHMgICB0IAoxMDAgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgMTAgIDExICAxMiAgMTMgIDE0ICAxNSAgMTYgIDE3ICAxOCAgMTkgIDIwIAogIHUgICB2ICAgdyAgIHggICB5ICAgeiAgYWEgCiAyMSAgMjIgIDIzICAyNCAgMjUgIDI2IDEwMiAKPiAKPiB4IDwtIDE6MjYKPiBuYW1lcyh4KSA8LSByZXAoIiIsIDI2KQo+IHhbYygiYSIsICJhYSIsICJhYSIpXSA8LSAxMDA6MTAyCj4geAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgMTAgIDExICAxMiAgMTMgIDE0ICAxNSAgMTYgIDE3ICAxOCAgMTkgIDIwIAogICAgICAgICAgICAgICAgICAgICAgICAgIGEgIGFhIAogMjEgIDIyICAyMyAgMjQgIDI1ICAyNiAxMDAgMTAyIAo+ICMjCj4gCj4gCj4gIyMgdGVzdHMgb2YgcmF3IHR5cGUKPiAjIHRlc3RzIG9mIGxvZ2ljIG9wZXJhdG9ycwo+IHggPC0gIkEgdGVzdCBzdHJpbmciCj4gKHkgPC0gY2hhclRvUmF3KHgpKQogWzFdIDQxIDIwIDc0IDY1IDczIDc0IDIwIDczIDc0IDcyIDY5IDZlIDY3Cj4gKHh4IDwtIGMoeSwgYXMucmF3KDApLCBjaGFyVG9SYXcoIm1vcmUiKSkpCiBbMV0gNDEgMjAgNzQgNjUgNzMgNzQgMjAgNzMgNzQgNzIgNjkgNmUgNjcgMDAgNmQgNmYgNzIgNjUKPiAKPiAheQogWzFdIGJlIGRmIDhiIDlhIDhjIDhiIGRmIDhjIDhiIDhkIDk2IDkxIDk4Cj4geSAmIGFzLnJhdygxNSkKIFsxXSAwMSAwMCAwNCAwNSAwMyAwNCAwMCAwMyAwNCAwMiAwOSAwZSAwNwo+IHkgfCBhcy5yYXcoMTI4KQogWzFdIGMxIGEwIGY0IGU1IGYzIGY0IGEwIGYzIGY0IGYyIGU5IGVlIGU3Cj4gCj4gIyB0ZXN0cyBvZiBiaW5hcnkgcmVhZC93cml0ZQo+IHp6IDwtIGZpbGUoInRlc3RiaW4iLCAid2IiKQo+IHdyaXRlQmluKHh4LCB6eikKPiBjbG9zZSh6eikKPiB6eiA8LSBmaWxlKCJ0ZXN0YmluIiwgInJiIikKPiAoeXkgPC0gcmVhZEJpbih6eiwgInJhdyIsIDEwMCkpCiBbMV0gNDEgMjAgNzQgNjUgNzMgNzQgMjAgNzMgNzQgNzIgNjkgNmUgNjcgMDAgNmQgNmYgNzIgNjUKPiBzZWVrKHp6LCAwLCAic3RhcnQiKQpbMV0gMTgKPiByZWFkQmluKHp6LCAiaW50ZWdlciIsIG49MTAwLCBzaXplID0gMSkgIyByZWFkIGFzIHNtYWxsIGludGVnZXJzCiBbMV0gIDY1ICAzMiAxMTYgMTAxIDExNSAxMTYgIDMyIDExNSAxMTYgMTE0IDEwNSAxMTAgMTAzICAgMCAxMDkgMTExIDExNCAxMDEKPiBzZWVrKHp6LCAwLCAic3RhcnQiKQpbMV0gMTgKPiByZWFkQmluKHp6LCAiY2hhcmFjdGVyIiwgMTAwKSAgIyBpcyBjb25mdXNlZCBieSBlbWJlZGRlZCBudWwuClsxXSAiQSB0ZXN0IHN0cmluZyIKV2FybmluZyBtZXNzYWdlOgpJbiByZWFkQmluKHp6LCAiY2hhcmFjdGVyIiwgMTAwKSA6CiAgaW5jb21wbGV0ZSBzdHJpbmcgYXQgZW5kIG9mIGZpbGUgaGFzIGJlZW4gZGlzY2FyZGVkCj4gc2Vlayh6eiwgMCwgInN0YXJ0IikKWzFdIDE4Cj4gcmVhZENoYXIoenosIGxlbmd0aCh4eCkpICMgdHJ1bmNhdGVzIGF0IGVtYmVkZGVkIG51bApbMV0gIkEgdGVzdCBzdHJpbmciCj4gc2Vlayh6eikgIyBtYWtlIHN1cmUgY3VycmVudCBwb3NpdGlvbiBpcyByZXBvcnRlZCBwcm9wZXJseQpbMV0gMTgKPiBjbG9zZSh6eikKPiB1bmxpbmsoInRlc3RiaW4iKQo+IAo+ICMgdGVzdHMgb2YgQVNDSUkgcmVhZC93cml0ZS4KPiBjYXQoeHgsIGZpbGU9InRlc3Rhc2NpaSIpCj4gc2NhbigidGVzdGFzY2lpIiwgd2hhdD1yYXcoMCkpClJlYWQgMTggaXRlbXMKIFsxXSA0MSAyMCA3NCA2NSA3MyA3NCAyMCA3MyA3NCA3MiA2OSA2ZSA2NyAwMCA2ZCA2ZiA3MiA2NQo+IHVubGluaygidGVzdGFzY2lpIikKPiAjIwo+IAo+IAo+ICMjIEV4YW1wbGUgb2YgcHJlZGljdGlvbiBub3QgZnJvbSBuZXdkYXRhIGFzIGludGVuZGVkLgo+IHNldC5zZWVkKDEpCj4geSA8LSBybm9ybSgxMCkKPiB4ICA8LSBjYmluZCgxOjEwLCBzYW1wbGUoMToxMCkpICMgbWF0cml4Cj4geHQgPC0gY2JpbmQoMToyLCAgMzo0KQo+IChsbTEgPC0gbG0oeSB+IHgpKQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiB4KQoKQ29lZmZpY2llbnRzOgooSW50ZXJjZXB0KSAgICAgICAgICAgeDEgICAgICAgICAgIHgyICAKICAgIDEuODg4MDMgICAgIC0wLjE1Njk0ICAgICAtMC4wOTA3MiAgCgo+IHByZWRpY3QobG0xLCBuZXdkYXRhID0gZGF0YS5mcmFtZSh4PSB4dCkpCiAgICAgICAgICAxICAgICAgICAgICAyICAgICAgICAgICAzICAgICAgICAgICA0ICAgICAgICAgICA1ICAgICAgICAgICA2IAogMS4zNjgyMDM0MSAgMS4wMjk4MjQzMyAgMS4xNDUwNTIxOCAgMC4zNTMwNjYxNSAgMC45MjE5MDA5NCAgMC4xMjk5MTQ5MiAKICAgICAgICAgIDcgICAgICAgICAgIDggICAgICAgICAgIDkgICAgICAgICAgMTAgCiAwLjMzNTg2NDE2IC0wLjA5MzIzNjMxIC0wLjE1OTQ1MTI0ICAwLjIyNzk0MDc4IApXYXJuaW5nIG1lc3NhZ2U6CiduZXdkYXRhJyBoYWQgMiByb3dzIGJ1dCB2YXJpYWJsZXMgZm91bmQgaGF2ZSAxMCByb3dzIAo+ICMjIHdhcm5zIGFzIGZyb20gMi4wLjAKPiAKPiAKPiAjIyBldmFsIGNvdWxkIGFsdGVyIGEgZGF0YS5mcmFtZS9saXN0IHNlY29uZCBhcmd1bWVudAo+IGRhdGEodHJlZXMpCj4gYSA8LSB0cmVlcwo+IGV2YWwocXVvdGUoe0dpcnRoWzFdPC1OQTtHaXJ0aH0pLGEpCiBbMV0gICBOQSAgOC42ICA4LjggMTAuNSAxMC43IDEwLjggMTEuMCAxMS4wIDExLjEgMTEuMiAxMS4zIDExLjQgMTEuNCAxMS43IDEyLjAKWzE2XSAxMi45IDEyLjkgMTMuMyAxMy43IDEzLjggMTQuMCAxNC4yIDE0LjUgMTYuMCAxNi4zIDE3LjMgMTcuNSAxNy45IDE4LjAgMTguMApbMzFdIDIwLjYKPiBhWzEsIF0KICBHaXJ0aCBIZWlnaHQgVm9sdW1lCjEgICA4LjMgICAgIDcwICAgMTAuMwo+IHRyZWVzWzEsIF0KICBHaXJ0aCBIZWlnaHQgVm9sdW1lCjEgICA4LjMgICAgIDcwICAgMTAuMwo+ICMjIGJvdGggYSBhbmQgdHJlZXMgZ290IGFsdGVyZWQgaW4gMS45LjEKPiAKPiAKPiAjIyB3cml0ZS50YWJsZSBkaWQgbm90IGFwcGx5IHFtZXRob2QgdG8gY29sLm5hbWVzIChQUiM3MTcxKQo+IHggPC0gZGF0YS5mcmFtZSgidGVzdCBzdHJpbmcgd2l0aCBcIiIgPSBjKCJhIFwiIGFuZCBhICciKSwgY2hlY2submFtZXM9RkFMU0UpCj4gd3JpdGUudGFibGUoeCkKInRlc3Qgc3RyaW5nIHdpdGggXCIiCiIxIiAiYSBcIiBhbmQgYSAnIgo+IHdyaXRlLnRhYmxlKHgsIHFtZXRob2QgPSAiZG91YmxlIikKInRlc3Qgc3RyaW5nIHdpdGggIiIiCiIxIiAiYSAiIiBhbmQgYSAnIgo+ICMjIFF1b3RlIGluIGNvbCBuYW1lIHdhcyB1bmVzY2FwZWQgaW4gMS45LjEuCj4gCj4gCj4gIyMgZXh0ZW5zaW9ucyB0byByZWFkLnRhYmxlCj4gTWF0IDwtIG1hdHJpeChjKDE6MywgbGV0dGVyc1sxOjNdLCAxOjMsIExFVFRFUlNbMTozXSwKKyAgICAgICAgICAgICAgICAgYygiMjAwNC0wMS0wMSIsICIyMDA0LTAyLTAxIiwgIjIwMDQtMDMtMDEiKSwKKyAgICAgICAgICAgICAgICAgYygiMjAwNC0wMS0wMSAxMjowMCIsICIyMDA0LTAyLTAxIDEyOjAwIiwgIjIwMDQtMDMtMDEgMTI6MDAiKSksCisgICAgICAgICAgICAgICAzLCA2KQo+IGZvbyA8LSB0ZW1wZmlsZSgpCj4gd3JpdGUudGFibGUoTWF0LCBmb28sIGNvbC5uYW1lcyA9IEZBTFNFLCByb3cubmFtZXMgPSBGQUxTRSkKPiByZWFkLnRhYmxlKGZvbywgY29sQ2xhc3NlcyA9IGMoTkEsIE5BLCAiTlVMTCIsICJjaGFyYWN0ZXIiLCAiRGF0ZSIsICJQT1NJWGN0IikpCiAgVjEgVjIgVjQgICAgICAgICBWNSAgICAgICAgICAgICAgICAgIFY2CjEgIDEgIGEgIEEgMjAwNC0wMS0wMSAyMDA0LTAxLTAxIDEyOjAwOjAwCjIgIDIgIGIgIEIgMjAwNC0wMi0wMSAyMDA0LTAyLTAxIDEyOjAwOjAwCjMgIDMgIGMgIEMgMjAwNC0wMy0wMSAyMDA0LTAzLTAxIDEyOjAwOjAwCj4gdW5saXN0KHNhcHBseSguTGFzdC52YWx1ZSwgY2xhc3MpKQogICAgICAgICBWMSAgICAgICAgICBWMiAgICAgICAgICBWNCAgICAgICAgICBWNSAgICAgICAgIFY2MSAgICAgICAgIFY2MiAKICAiaW50ZWdlciIgICAgImZhY3RvciIgImNoYXJhY3RlciIgICAgICAiRGF0ZSIgICAiUE9TSVhjdCIgICAgIlBPU0lYdCIgCj4gcmVhZC50YWJsZShmb28sIGNvbENsYXNzZXMgPSBjKCJmYWN0b3IiLE5BLCJOVUxMIiwiZmFjdG9yIiwiRGF0ZSIsIlBPU0lYY3QiKSkKICBWMSBWMiBWNCAgICAgICAgIFY1ICAgICAgICAgICAgICAgICAgVjYKMSAgMSAgYSAgQSAyMDA0LTAxLTAxIDIwMDQtMDEtMDEgMTI6MDA6MDAKMiAgMiAgYiAgQiAyMDA0LTAyLTAxIDIwMDQtMDItMDEgMTI6MDA6MDAKMyAgMyAgYyAgQyAyMDA0LTAzLTAxIDIwMDQtMDMtMDEgMTI6MDA6MDAKPiB1bmxpc3Qoc2FwcGx5KC5MYXN0LnZhbHVlLCBjbGFzcykpCiAgICAgICBWMSAgICAgICAgVjIgICAgICAgIFY0ICAgICAgICBWNSAgICAgICBWNjEgICAgICAgVjYyIAogImZhY3RvciIgICJmYWN0b3IiICAiZmFjdG9yIiAgICAiRGF0ZSIgIlBPU0lYY3QiICAiUE9TSVh0IiAKPiByZWFkLnRhYmxlKGZvbywgY29sQ2xhc3NlcyA9IGMoVjQ9ImNoYXJhY3RlciIpKQogIFYxIFYyIFYzIFY0ICAgICAgICAgVjUgICAgICAgICAgICAgICBWNgoxICAxICBhICAxICBBIDIwMDQtMDEtMDEgMjAwNC0wMS0wMSAxMjowMAoyICAyICBiICAyICBCIDIwMDQtMDItMDEgMjAwNC0wMi0wMSAxMjowMAozICAzICBjICAzICBDIDIwMDQtMDMtMDEgMjAwNC0wMy0wMSAxMjowMAo+IHVubGlzdChzYXBwbHkoLkxhc3QudmFsdWUsIGNsYXNzKSkKICAgICAgICAgVjEgICAgICAgICAgVjIgICAgICAgICAgVjMgICAgICAgICAgVjQgICAgICAgICAgVjUgICAgICAgICAgVjYgCiAgImludGVnZXIiICAgICJmYWN0b3IiICAgImludGVnZXIiICJjaGFyYWN0ZXIiICAgICJmYWN0b3IiICAgICJmYWN0b3IiIAo+IHVubGluayhmb28pCj4gIyMgYWRkZWQgaW4gMi4wLjAKPiAKPiAKPiAjIyB3cml0ZS50YWJsZSB3aXRoIGNvbXBsZXggY29sdW1ucyAoUFIjNzI2MCwgaW4gcGFydCkKPiB3cml0ZS50YWJsZShkYXRhLmZyYW1lKHggPSAwLjUrMTo0LCB5ID0gMTo0ICsgMS41aSksIGZpbGUgPSAiIikKIngiICJ5IgoiMSIgMS41IDErMS41aQoiMiIgMi41IDIrMS41aQoiMyIgMy41IDMrMS41aQoiNCIgNC41IDQrMS41aQo+ICMgcHJpbnRlZCBhbGwgYXMgY29tcGxleCBpbiAyLjAuMC4KPiB3cml0ZS50YWJsZShkYXRhLmZyYW1lKHggPSAwLjUrMTo0LCB5ID0gMTo0ICsgMS41aSksIGZpbGUgPSAiIiwgZGVjPSIsIikKIngiICJ5IgoiMSIgMSw1IDErMSw1aQoiMiIgMiw1IDIrMSw1aQoiMyIgMyw1IDMrMSw1aQoiNCIgNCw1IDQrMSw1aQo+ICMjIHVzZWQgJy4nIG5vdCAnLCcgaW4gMi4wLjAKPiAKPiAjIyBzcGxpbmVmdW4oKSB2YWx1ZSB0ZXN0Cj4gKHggPC0gc2VxKDAsNiwgbGVuZ3RoPTI1KSkKIFsxXSAwLjAwIDAuMjUgMC41MCAwLjc1IDEuMDAgMS4yNSAxLjUwIDEuNzUgMi4wMCAyLjI1IDIuNTAgMi43NSAzLjAwIDMuMjUgMy41MApbMTZdIDMuNzUgNC4wMCA0LjI1IDQuNTAgNC43NSA1LjAwIDUuMjUgNS41MCA1Ljc1IDYuMDAKPiBteCA8LSBzYXBwbHkoYygiZm1tIiwgIm5hdCIsICJwZXIiKSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24obSkgc3BsaW5lZnVuKDE6NSwgYygxLDIsNCwzLDEpLCBtZXRob2QgPSBtKSh4KSkKPiBjYmluZCh4LG14KQogICAgICAgICB4ICAgICAgIGZtbSAgICAgICAgIG5hdCAgICAgICBwZXIKIFsxLF0gMC4wMCA1LjMzMzMzMzMgIDAuNDY0Mjg1NzEgMy4wMDAwMDAwCiBbMixdIDAuMjUgMy41MzEyNTAwICAwLjU5ODIxNDI5IDIuNDA2MjUwMAogWzMsXSAwLjUwIDIuMjUwMDAwMCAgMC43MzIxNDI4NiAxLjgxMjUwMDAKIFs0LF0gMC43NSAxLjQyNzA4MzMgIDAuODY2MDcxNDMgMS4zMTI1MDAwCiBbNSxdIDEuMDAgMS4wMDAwMDAwICAxLjAwMDAwMDAwIDEuMDAwMDAwMAogWzYsXSAxLjI1IDAuOTA2MjUwMCAgMS4xNDExODMwNCAwLjk0NTMxMjUKIFs3LF0gMS41MCAxLjA4MzMzMzMgIDEuMzI1ODkyODYgMS4xMjUwMDAwCiBbOCxdIDEuNzUgMS40Njg3NTAwICAxLjU5NzY1NjI1IDEuNDkyMTg3NQogWzksXSAyLjAwIDIuMDAwMDAwMCAgMi4wMDAwMDAwMCAyLjAwMDAwMDAKWzEwLF0gMi4yNSAyLjYwOTM3NTAgIDIuNTQ4NTQ5MTEgMi41OTM3NTAwClsxMSxdIDIuNTAgMy4yMDgzMzMzICAzLjE0NzMyMTQzIDMuMTg3NTAwMApbMTIsXSAyLjc1IDMuNzAzMTI1MCAgMy42NzI0MzMwNCAzLjY4NzUwMDAKWzEzLF0gMy4wMCA0LjAwMDAwMDAgIDQuMDAwMDAwMDAgNC4wMDAwMDAwClsxNCxdIDMuMjUgNC4wMzEyNTAwICA0LjAzOTYyMDU0IDQuMDU0Njg3NQpbMTUsXSAzLjUwIDMuODMzMzMzMyAgMy44MzQ4MjE0MyAzLjg3NTAwMDAKWzE2LF0gMy43NSAzLjQ2ODc1MDAgIDMuNDYyNjExNjEgMy41MDc4MTI1ClsxNyxdIDQuMDAgMy4wMDAwMDAwICAzLjAwMDAwMDAwIDMuMDAwMDAwMApbMTgsXSA0LjI1IDIuNDg0Mzc1MCAgMi41MTE3MTg3NSAyLjQwNjI1MDAKWzE5LF0gNC41MCAxLjk1ODMzMzMgIDIuMDEzMzkyODYgMS44MTI1MDAwClsyMCxdIDQuNzUgMS40NTMxMjUwICAxLjUwODM3MDU0IDEuMzEyNTAwMApbMjEsXSA1LjAwIDEuMDAwMDAwMCAgMS4wMDAwMDAwMCAxLjAwMDAwMDAKWzIyLF0gNS4yNSAwLjYzMDIwODMgIDAuNDkxMDcxNDMgMC45NDUzMTI1ClsyMyxdIDUuNTAgMC4zNzUwMDAwIC0wLjAxNzg1NzE0IDEuMTI1MDAwMApbMjQsXSA1Ljc1IDAuMjY1NjI1MCAtMC41MjY3ODU3MSAxLjQ5MjE4NzUKWzI1LF0gNi4wMCAwLjMzMzMzMzMgLTEuMDM1NzE0MjkgMi4wMDAwMDAwCj4gCj4gCj4gIyMgaW5maW5pdGUgbG9vcCBpbiByZWFkLmZ3ZiAoUFIjNzM1MCkKPiBjYXQoZmlsZT0idGVzdC50eHQiLCBzZXAgPSAiXG4iLCAiIyBjb21tZW50IDEiLCAiMTIzNDU2NyAgICMgY29tbWVudCAyIiwKKyAgICAgIjEgMjM0NTY3ICAjIGNvbW1lbnQgMyIsICIxMjM0NSAgNjcgIyBjb21tZW50IDQiLCAiIyBjb21tZW50IDUiKQo+IHJlYWQuZndmKCJ0ZXN0LnR4dCIsIHdpZHRoPWMoMiwyLDMpLCBza2lwPTEsIG49NCkgIyBsb29wZWQKICBWMSBWMiAgVjMKMSAxMiAzNCA1NjcKMiAgMSAyMyA0NTYKMyAxMiAzNCAgIDUKPiByZWFkLmZ3ZigidGVzdC50eHQiLCB3aWR0aD1jKDIsMiwzKSwgc2tpcD0xKSAgICAgICMgMSBsaW5lIHNob3J0CiAgVjEgVjIgIFYzCjEgMTIgMzQgNTY3CjIgIDEgMjMgNDU2CjMgMTIgMzQgICA1Cj4gcmVhZC5md2YoInRlc3QudHh0Iiwgd2lkdGg9YygyLDIsMyksIHNraXA9MCkKICBWMSBWMiAgVjMKMSAxMiAzNCA1NjcKMiAgMSAyMyA0NTYKMyAxMiAzNCAgIDUKPiB1bmxpbmsoInRlc3QudHh0IikKPiAjIwo+IAo+IAo+ICMjIHNwbGl0IHdhcyBub3QgaGFuZGxpbmcgbGlzdHMgYW5kIHJhd3MKPiBzcGxpdChhcy5saXN0KDE6MyksIGMoMSwxLDIpKQokYDFgCiRgMWBbWzFdXQpbMV0gMQoKJGAxYFtbMl1dClsxXSAyCgoKJGAyYAokYDJgW1sxXV0KWzFdIDMKCgo+ICh5IDwtIGNoYXJUb1JhdygiQSB0ZXN0IHN0cmluZyIpKQogWzFdIDQxIDIwIDc0IDY1IDczIDc0IDIwIDczIDc0IDcyIDY5IDZlIDY3Cj4gKHogPC0gc3BsaXQoeSwgcmVwKDE6NSwgdGltZXM9YygxLDEsNCwxLDYpKSkpCiRgMWAKWzFdIDQxCgokYDJgClsxXSAyMAoKJGAzYApbMV0gNzQgNjUgNzMgNzQKCiRgNGAKWzFdIDIwCgokYDVgClsxXSA3MyA3NCA3MiA2OSA2ZSA2NwoKPiBzYXBwbHkoeiwgcmF3VG9DaGFyKQogICAgICAgMSAgICAgICAgMiAgICAgICAgMyAgICAgICAgNCAgICAgICAgNSAKICAgICAiQSIgICAgICAiICIgICAidGVzdCIgICAgICAiICIgInN0cmluZyIgCj4gIyMgd3JvbmcgcmVzdWx0cyBpbiAyLjAuMAo+IAo+IAo+ICMjIHRlc3RzIG9mIGNoYW5nZWQgUzMgaW1wbGljaXQgY2xhc3NlcyBpbiAyLjEuMAo+IGZvbyA8LSBmdW5jdGlvbih4LCAuLi4pIFVzZU1ldGhvZCgiZm9vIikKPiBmb28ubnVtZXJpYyA8LSBmdW5jdGlvbih4KSBjYXQoIm51bWVyaWMgYXJnXG4iKQo+IGZvbygxOjEwKQpudW1lcmljIGFyZwo+IGZvbyhwaSkKbnVtZXJpYyBhcmcKPiBmb28obWF0cml4KDE6MTAsIDIsIDUpKQpudW1lcmljIGFyZwo+IGZvby5pbnRlZ2VyIDwtIGZ1bmN0aW9uKHgpIGNhdCgiaW50ZWdlciBhcmdcbiIpCj4gZm9vLmRvdWJsZSA8LSBmdW5jdGlvbih4KSBjYXQoImRvdWJsZSBhcmdcbiIpCj4gZm9vKDE6MTApCmludGVnZXIgYXJnCj4gZm9vKHBpKQpkb3VibGUgYXJnCj4gZm9vKG1hdHJpeCgxOjEwLCAyLCA1KSkKaW50ZWdlciBhcmcKPiAjIwo+IAo+IAo+ICMjIHN0cigpIGludGVycHJldGVkIGVzY2FwZSBzZXF1ZW5jZXMgcHJpb3IgdG8gMi4xLjAKPiB4IDwtICJhYlxiY1xuZGVmIgo+IHN0cih4KQogY2hyICJhYlxiY1xuZGVmIgo+IHN0cih4LCB2ZWMubGVuPTApIyBmYWlsZWQgaW4gcmV2IDMyMjQ0CiBjaHIgIC4uLgo+IHN0cihmYWN0b3IoeCkpCiBGYWN0b3Igdy8gMSBsZXZlbCAiYWJcYmNcbmRlZiI6IDEKPiAKPiB4IDwtIGMoImEiLCBOQSwgImIiKQo+IGZhY3Rvcih4KQpbMV0gYSAgICA8TkE+IGIgICAKTGV2ZWxzOiBhIGIKPiBmYWN0b3IoeCwgZXhjbHVkZT0iIikKWzFdIGEgICAgPE5BPiBiICAgCkxldmVsczogYSBiIDxOQT4KPiBzdHIoeCkKIGNociBbMTozXSAiYSIgTkEgImIiCj4gc3RyKGZhY3Rvcih4KSkKIEZhY3RvciB3LyAyIGxldmVscyAiYSIsImIiOiAxIE5BIDIKPiBzdHIoZmFjdG9yKHgsIGV4Y2x1ZGU9IiIpKQogRmFjdG9yIHcvIDMgbGV2ZWxzICJhIiwiYiIsTkE6IDEgMyAyCj4gIyMKPiAKPiAKPiAjIyBwcmludC5mYWN0b3IocXVvdGU9VFJVRSkgd2FzIG5vdCBxdW90aW5nIGxldmVscwo+IHggPC0gYygiYSIsIE5BLCAiYiIsICdhICIgdGVzdCcpICMiIChjb21tZW50IGZvciBmb250aWZpY2F0aW9uKQo+IGZhY3Rvcih4KQpbMV0gYSAgICAgICAgPE5BPiAgICAgYiAgICAgICAgYSAiIHRlc3QKTGV2ZWxzOiBhIGEgIiB0ZXN0IGIKPiBmYWN0b3IoeCwgZXhjbHVkZT0iIikKWzFdIGEgICAgICAgIDxOQT4gICAgIGIgICAgICAgIGEgIiB0ZXN0CkxldmVsczogYSBhICIgdGVzdCBiIDxOQT4KPiBwcmludChmYWN0b3IoeCksIHF1b3RlPVRSVUUpClsxXSAiYSIgICAgICAgICBOQSAgICAgICAgICAiYiIgICAgICAgICAiYSBcIiB0ZXN0IgpMZXZlbHM6ICJhIiAiYSBcIiB0ZXN0IiAiYiIKPiBwcmludChmYWN0b3IoeCwgZXhjbHVkZT0iIiksIHF1b3RlPVRSVUUpClsxXSAiYSIgICAgICAgICBOQSAgICAgICAgICAiYiIgICAgICAgICAiYSBcIiB0ZXN0IgpMZXZlbHM6ICJhIiAiYSBcIiB0ZXN0IiAiYiIgTkEKPiAjIyBsYXN0IHR3byBwcmludGVkIGxldmVscyBkaWZmZXJlbnRseSBmcm9tIHZhbHVlcyBpbiAyLjAuMQo+IAo+IAo+ICMjIHdyaXRlLnRhYmxlIGluIG1hcmdpbmFsIGNhc2VzCj4geCA8LSBtYXRyaXgoLCAzLCAwKQo+IHdyaXRlLnRhYmxlKHgpICMgMyByb3dzCiIxIiAKIjIiIAoiMyIgCj4gd3JpdGUudGFibGUoeCwgcm93Lm5hbWVzPUZBTFNFKQoKCgo+ICMgbm90ZTogc2NhbiBhbmQgcmVhZC50YWJsZSB3b24ndCByZWFkIHRoaXMgYXMgdGhleSB0YWtlIGVtcHR5IGZpZWxkcyBhcyBOQQo+ICMjIHdhcyAxIHJvdyBpbiAyLjAuMQo+IAo+IAo+ICMjIE1vcmUgdGVzdHMgb2Ygd3JpdGUudGFibGUKPiB4IDwtIGxpc3QoYT0xLCBiPTE6MiwgYz0zOjQsIGQ9NSkKPiBkaW0oeCkgPC0gYygyLDIpCj4geAogICAgIFssMV0gICAgICBbLDJdICAgICAKWzEsXSAxICAgICAgICAgSW50ZWdlciwyClsyLF0gSW50ZWdlciwyIDUgICAgICAgIAo+IHdyaXRlLnRhYmxlKHgpCiJWMSIgIlYyIgoiMSIgMSAzOjQKIjIiIDE6MiA1Cj4gCj4geDEgPC0gZGF0YS5mcmFtZShhPTE6MiwgYj1JKG1hdHJpeChMRVRURVJTWzE6NF0sIDIsIDIpKSwgYyA9IGMoIihpKSIsICIoaWkpIikpCj4geDEKICBhIGIuMSBiLjIgICAgYwoxIDEgICBBICAgQyAgKGkpCjIgMiAgIEIgICBEIChpaSkKPiB3cml0ZS50YWJsZSh4MSkgIyBJbiAyLjAuMSBoYWQgMyBoZWFkZXJzLCA0IGNvbHMKImEiICJiLjEiICJiLjIiICJjIgoiMSIgMSBBIEMgIihpKSIKIjIiIDIgQiBEICIoaWkpIgo+IHdyaXRlLnRhYmxlKHgxLCBxdW90ZT1jKDIsMyw0KSkKImEiICJiLjEiICJiLjIiICJjIgoiMSIgMSAiQSIgIkMiICIoaSkiCiIyIiAyICJCIiAiRCIgIihpaSkiCj4gCj4geDIgPC0gZGF0YS5mcmFtZShhPTE6MiwgYj1JKGxpc3QoYT0xLCBiPTIpKSkKPiB4MgogIGEgYgphIDEgMQpiIDIgMgo+IHdyaXRlLnRhYmxlKHgyKQoiYSIgImIiCiJhIiAxIDEKImIiIDIgMgo+IAo+IHgzIDwtIHNlcShhcy5EYXRlKCIyMDA1LTAxLTAxIiksIGxlbj02LCBieT0iZGF5IikKPiB4NCA8LSBkYXRhLmZyYW1lKHg9MTo2LCB5PXgzKQo+IGRpbSh4MykgPC0gYygyLDMpCj4geDMKWzFdICIyMDA1LTAxLTAxIiAiMjAwNS0wMS0wMiIgIjIwMDUtMDEtMDMiICIyMDA1LTAxLTA0IiAiMjAwNS0wMS0wNSIKWzZdICIyMDA1LTAxLTA2Igo+IHdyaXRlLnRhYmxlKHgzKSAjIG1hdHJpeCwgc28gbG9zZXMgY2xhc3MKIlYxIiAiVjIiICJWMyIKIjEiIDEyNzg0IDEyNzg2IDEyNzg4CiIyIiAxMjc4NSAxMjc4NyAxMjc4OQo+IHg0CiAgeCAgICAgICAgICB5CjEgMSAyMDA1LTAxLTAxCjIgMiAyMDA1LTAxLTAyCjMgMyAyMDA1LTAxLTAzCjQgNCAyMDA1LTAxLTA0CjUgNSAyMDA1LTAxLTA1CjYgNiAyMDA1LTAxLTA2Cj4gd3JpdGUudGFibGUoeDQpICMgcHJlc2VydmVzIGNsYXNzLCBkb2VzIG5vdCBxdW90ZQoieCIgInkiCiIxIiAxIDIwMDUtMDEtMDEKIjIiIDIgMjAwNS0wMS0wMgoiMyIgMyAyMDA1LTAxLTAzCiI0IiA0IDIwMDUtMDEtMDQKIjUiIDUgMjAwNS0wMS0wNQoiNiIgNiAyMDA1LTAxLTA2Cj4gIyMKPiAKPiAKPiAjIyBQcm9ibGVtIHdpdGggZWFybGllciByZWdleHAgY29kZSBzcG90dGVkIGJ5IEtICj4gZ3JlcCgiKC4qcyl7Mn0iLCAiQXJrYW5zYXMiLCB2ID0gVFJVRSkKWzFdICJBcmthbnNhcyIKPiBncmVwKCIoLipzKXszfSIsICJBcmthbnNhcyIsIHYgPSBUUlVFKQpjaGFyYWN0ZXIoMCkKPiBncmVwKCIoLipzKXszfSIsIHN0YXRlLm5hbWUsIHYgPSBUUlVFKQpbMV0gIk1hc3NhY2h1c2V0dHMiICJNaXNzaXNzaXBwaSIgIAo+ICMjIFRob3VnaHQgQXJrYW5zYXMgaGFkIDMgcydzLgo+IAo+IAo+ICMjIFJlcGxhY2luZyBwYXJ0IG9mIGEgbm9uLWV4aXN0ZW50IGNvbHVtbiBjb3VsZCBjcmVhdGUgYSBzaG9ydCBjb2x1bW4uCj4geHg8LSBkYXRhLmZyYW1lKGE9MTo0LCBiPWxldHRlcnNbMTo0XSkKPiB4eFsyOjMsICJjIl0gPC0gMjozCj4gIyMgZ2F2ZSBzaG9ydCBjb2x1bW4gaW4gUiA8IDIuMS4wLgo+IAo+IAo+ICMjIGFkZDEvZHJvcDEgY291bGQgZ2l2ZSBtaXNsZWFkaW5nIHJlc3VsdHMgaWYgbWlzc2luZyB2YWx1ZXMgd2VyZSBpbnZvbHZlZAo+IHkgPC0gcm5vcm0oMToyMCkKPiB4IDwtIDE6MjA7IHhbMTBdIDwtIE5BCj4geDIgPC0gcnVuaWYoMjApOyB4MlsyMF0gPC0gTkEKPiBmaXQgPC0gbG0oeSB+IHgpCj4gZHJvcDEoZml0KQpTaW5nbGUgdGVybSBkZWxldGlvbnMKCk1vZGVsOgp5IH4geAogICAgICAgRGYgU3VtIG9mIFNxICAgICBSU1MgICAgIEFJQwo8bm9uZT4gICAgICAgICAgICAgICA5LjE3MjggLTkuODM1OAp4ICAgICAgIDEgICAgMS42NTkzIDEwLjgzMjEgLTguNjc2Ngo+IHJlcyA8LSAgdHJ5KHN0YXRzOjo6ZHJvcDEuZGVmYXVsdChmaXQpKQpFcnJvciBpbiBzdGF0czo6OmRyb3AxLmRlZmF1bHQoZml0KSA6IAogIG51bWJlciBvZiByb3dzIGluIHVzZSBoYXMgY2hhbmdlZDogcmVtb3ZlIG1pc3NpbmcgdmFsdWVzPwo+IHN0b3BpZm5vdChpbmhlcml0cyhyZXMsICJ0cnktZXJyb3IiKSkKPiBhZGQxKGZpdCwgfiAuICt4MikKU2luZ2xlIHRlcm0gYWRkaXRpb25zCgpNb2RlbDoKeSB+IHgKICAgICAgIERmIFN1bSBvZiBTcSAgICBSU1MgICAgIEFJQwo8bm9uZT4gICAgICAgICAgICAgIDguODQ3NSAtOC43ODQyCngyICAgICAgMSAgMC4wMzA5MzIgOC44MTY2IC02Ljg0NzMKV2FybmluZyBtZXNzYWdlOgpJbiBhZGQxLmxtKGZpdCwgfi4gKyB4MikgOiB1c2luZyB0aGUgMTgvMTkgcm93cyBmcm9tIGEgY29tYmluZWQgZml0Cj4gcmVzIDwtICB0cnkoc3RhdHM6OjphZGQxLmRlZmF1bHQoZml0LCB+IC4gK3gyKSkKRXJyb3IgaW4gc3RhdHM6OjphZGQxLmRlZmF1bHQoZml0LCB+LiArIHgyKSA6IAogIG51bWJlciBvZiByb3dzIGluIHVzZSBoYXMgY2hhbmdlZDogcmVtb3ZlIG1pc3NpbmcgdmFsdWVzPwo+IHN0b3BpZm5vdChpbmhlcml0cyhyZXMsICJ0cnktZXJyb3IiKSkKPiAjIyAyLjAuMSByYW4gYW5kIGdhdmUgaW5jb3JyZWN0IGFuc3dlcnMuCj4gCj4gCj4gIyMgKFBSIzc3ODkpIGVzY2FwZWQgcXVvdGVzIGluIHRoZSBmaXJzdCBmaXZlIGxpbmVzIGZvciByZWFkLnRhYmxlCj4gdGYgPC0gdGVtcGZpbGUoKQo+IHggPC0gYygiNiAnVFYyICBTaG9ydGxhbmQgU3RyZWV0JyIsCisgICAgICAgICIyICdJIGRvblxcXCd0IHdhdGNoIFRWIGF0IDcnIiwKKyAgICAgICAgIjEgJ0lcXFwnbSBub3QgYm90aGVyZWQsIHdoYXRldmVyIHRoYXQgbG9va3MgZ29vZCciLAorICAgICAgICAiMiAnSSBjaGFubmVsIHN1cmYnIikKPiB3cml0ZUxpbmVzKHgsIHRmKQo+IHJlYWQudGFibGUodGYpCiAgVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYyCjEgIDYgICAgICAgICAgICAgICAgICAgICAgVFYyICBTaG9ydGxhbmQgU3RyZWV0CjIgIDIgICAgICAgICAgICAgICAgICAgICAgSSBkb24ndCB3YXRjaCBUViBhdCA3CjMgIDEgSSdtIG5vdCBib3RoZXJlZCwgd2hhdGV2ZXIgdGhhdCBsb29rcyBnb29kCjQgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgY2hhbm5lbCBzdXJmCj4geCA8LSBjKCI2ICdUVjIgIFNob3J0bGFuZCBTdHJlZXQnIiwKKyAgICAgICAgIjIgJ0kgZG9uJyd0IHdhdGNoIFRWIGF0IDcnIiwKKyAgICAgICAgIjEgJ0knJ20gbm90IGJvdGhlcmVkLCB3aGF0ZXZlciB0aGF0IGxvb2tzIGdvb2QnIiwKKyAgICAgICAgIjIgJ0kgY2hhbm5lbCBzdXJmJyIpCj4gd3JpdGVMaW5lcyh4LCB0ZikKPiByZWFkLnRhYmxlKHRmLCBzZXA9IiAiKQogIFYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMgoxICA2ICAgICAgICAgICAgICAgICAgICAgIFRWMiAgU2hvcnRsYW5kIFN0cmVldAoyICAyICAgICAgICAgICAgICAgICAgICAgIEkgZG9uJ3Qgd2F0Y2ggVFYgYXQgNwozICAxIEknbSBub3QgYm90aGVyZWQsIHdoYXRldmVyIHRoYXQgbG9va3MgZ29vZAo0ICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJIGNoYW5uZWwgc3VyZgo+IHVubGluayh0ZikKPiAjIyBtYW5nbGVkIGluIDIuMC4xCj4gCj4gCj4gIyMgKFBSIzc4MDIpIHByaW50Q29lZm1hdChzaWduaWYubGVnZW5kID1GQUxTRSkgZmFpbGVkCj4gc2V0LnNlZWQoMTIzKQo+IGNtYXQgPC0gY2JpbmQocm5vcm0oMywgMTApLCBzcXJ0KHJjaGlzcSgzLCAxMikpKQo+IGNtYXQgPC0gY2JpbmQoY21hdCwgY21hdFssMV0vY21hdFssMl0pCj4gY21hdCA8LSBjYmluZChjbWF0LCAyKnBub3JtKC1jbWF0WywzXSkpCj4gY29sbmFtZXMoY21hdCkgPC0gYygiRXN0aW1hdGUiLCAiU3RkLkVyciIsICJaIHZhbHVlIiwgIlByKD56KSIpCj4gcHJpbnRDb2VmbWF0KGNtYXQsIHNpZ25pZi5zdGFycyA9IFRSVUUpCiAgICAgRXN0aW1hdGUgU3RkLkVyciBaIHZhbHVlICAgIFByKD56KSAgICAKWzEsXSAgMTEuMzA5MiAgMi44NjM2ICAzLjk0OTMgNy44MzdlLTA1ICoqKgpbMixdICAxMS4yMzAxICAzLjUzMDEgIDMuMTgxMiAgMC4wMDE0NjcgKiogClszLF0gICA5LjkxNjEgIDMuMDkyNyAgMy4yMDYzICAwLjAwMTM0NCAqKiAKLS0tClNpZ25pZi4gY29kZXM6ICAwICcqKionIDAuMDAxICcqKicgMC4wMSAnKicgMC4wNSAnLicgMC4xICcgJyAxCj4gcHJpbnRDb2VmbWF0KGNtYXQsIHNpZ25pZi5zdGFycyA9IFRSVUUsIHNpZ25pZi5sZWdlbmQgPSBGQUxTRSkKICAgICBFc3RpbWF0ZSBTdGQuRXJyIFogdmFsdWUgICAgUHIoPnopICAgIApbMSxdICAxMS4zMDkyICAyLjg2MzYgIDMuOTQ5MyA3LjgzN2UtMDUgKioqClsyLF0gIDExLjIzMDEgIDMuNTMwMSAgMy4xODEyICAwLjAwMTQ2NyAqKiAKWzMsXSAgIDkuOTE2MSAgMy4wOTI3ICAzLjIwNjMgIDAuMDAxMzQ0ICoqIAo+ICMgbm8gc3RhcnMsIHNvIG5vIGxlZ2VuZAo+IHByaW50Q29lZm1hdChjbWF0LCBzaWduaWYuc3RhcnMgPSBGQUxTRSkKICAgICBFc3RpbWF0ZSBTdGQuRXJyIFogdmFsdWUgICAgUHIoPnopClsxLF0gIDExLjMwOTIgIDIuODYzNiAgMy45NDkzIDcuODM3ZS0wNQpbMixdICAxMS4yMzAxICAzLjUzMDEgIDMuMTgxMiAgMC4wMDE0NjcKWzMsXSAgIDkuOTE2MSAgMy4wOTI3ICAzLjIwNjMgIDAuMDAxMzQ0Cj4gcHJpbnRDb2VmbWF0KGNtYXQsIHNpZ25pZi5zdGFycyA9IFRSVUUsIHNpZ25pZi5sZWdlbmQgPSBUUlVFKQogICAgIEVzdGltYXRlIFN0ZC5FcnIgWiB2YWx1ZSAgICBQcig+eikgICAgClsxLF0gIDExLjMwOTIgIDIuODYzNiAgMy45NDkzIDcuODM3ZS0wNSAqKioKWzIsXSAgMTEuMjMwMSAgMy41MzAxICAzLjE4MTIgIDAuMDAxNDY3ICoqIApbMyxdICAgOS45MTYxICAzLjA5MjcgIDMuMjA2MyAgMC4wMDEzNDQgKiogCi0tLQpTaWduaWYuIGNvZGVzOiAgMCAnKioqJyAwLjAwMSAnKionIDAuMDEgJyonIDAuMDUgJy4nIDAuMSAnICcgMQo+ICMjIGRpZCBub3Qgd29yayBpbiAyLjEuMAo+IAo+IAo+ICMjIFBSIzc4MjQgc3Vic2NyaXB0aW5nIGFuIGFycmF5IGJ5IGEgbWF0cml4Cj4geCA8LSBtYXRyaXgoMTo2LCBuY29sPTIpCj4geFtyYmluZChjKDEsMSksIGMoMiwyKSldClsxXSAxIDUKPiB4W3JiaW5kKGMoMSwxKSwgYygyLDIpLCBjKDAsMSkpXQpbMV0gMSA1Cj4geFtyYmluZChjKDEsMSksIGMoMiwyKSwgYygwLDApKV0KWzFdIDEgNQo+IHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoMCwyKSldClsxXSAxIDUKPiB4W3JiaW5kKGMoMSwxKSwgYygyLDIpLCBjKDAsMykpXQpbMV0gMSA1Cj4geFtyYmluZChjKDEsMSksIGMoMiwyKSwgYygxLDApKV0KWzFdIDEgNQo+IHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoMiwwKSldClsxXSAxIDUKPiB4W3JiaW5kKGMoMSwxKSwgYygyLDIpLCBjKDMsMCkpXQpbMV0gMSA1Cj4geFtyYmluZChjKDEsMCksIGMoMCwyKSwgYygzLDApKV0KaW50ZWdlcigwKQo+IHhbcmJpbmQoYygxLDApLCBjKDAsMCksIGMoMywwKSldCmludGVnZXIoMCkKPiB4W3JiaW5kKGMoMSwxKSwgYygyLDIpLCBjKDEsMikpXQpbMV0gMSA1IDQKPiB4W3JiaW5kKGMoMSwxKSwgYygyLE5BKSwgYygxLDIpKV0KWzFdICAxIE5BICA0Cj4geFtyYmluZChjKDEsMCksIGMoMixOQSksIGMoMSwyKSldClsxXSBOQSAgNAo+IHRyeSh4W3JiaW5kKGMoMSwxKSwgYygyLDIpLCBjKC0xLDIpKV0pCkVycm9yIGluIHhbcmJpbmQoYygxLCAxKSwgYygyLCAyKSwgYygtMSwgMikpXSA6IAogIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSBtYXRyaXggc3Vic2NyaXB0Cj4gdHJ5KHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoLTIsMikpXSkKRXJyb3IgaW4geFtyYmluZChjKDEsIDEpLCBjKDIsIDIpLCBjKC0yLCAyKSldIDogCiAgbmVnYXRpdmUgdmFsdWVzIGFyZSBub3QgYWxsb3dlZCBpbiBhIG1hdHJpeCBzdWJzY3JpcHQKPiB0cnkoeFtyYmluZChjKDEsMSksIGMoMiwyKSwgYygtMywyKSldKQpFcnJvciBpbiB4W3JiaW5kKGMoMSwgMSksIGMoMiwgMiksIGMoLTMsIDIpKV0gOiAKICBuZWdhdGl2ZSB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkIGluIGEgbWF0cml4IHN1YnNjcmlwdAo+IHRyeSh4W3JiaW5kKGMoMSwxKSwgYygyLDIpLCBjKC00LDIpKV0pCkVycm9yIGluIHhbcmJpbmQoYygxLCAxKSwgYygyLCAyKSwgYygtNCwgMikpXSA6IAogIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSBtYXRyaXggc3Vic2NyaXB0Cj4gdHJ5KHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoLTEsLTEpKV0pCkVycm9yIGluIHhbcmJpbmQoYygxLCAxKSwgYygyLCAyKSwgYygtMSwgLTEpKV0gOiAKICBuZWdhdGl2ZSB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkIGluIGEgbWF0cml4IHN1YnNjcmlwdAo+IHRyeSh4W3JiaW5kKGMoMSwxLDEpLCBjKDIsMiwyKSldKQpbMV0gMSAyIDEgMiAxIDIKPiAKPiAjIHZlcmlmeSB0aGF0IHJhbmdlIGNoZWNrcyBhcmUgYXBwbGllZCB0byBuZWdhdGl2ZSBpbmRpY2VzCj4geCA8LSBtYXRyaXgoMTo2LCBuY29sPTMpCj4gdHJ5KHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoLTMsMykpXSkKRXJyb3IgaW4geFtyYmluZChjKDEsIDEpLCBjKDIsIDIpLCBjKC0zLCAzKSldIDogCiAgbmVnYXRpdmUgdmFsdWVzIGFyZSBub3QgYWxsb3dlZCBpbiBhIG1hdHJpeCBzdWJzY3JpcHQKPiB0cnkoeFtyYmluZChjKDEsMSksIGMoMiwyKSwgYygtNCwzKSldKQpFcnJvciBpbiB4W3JiaW5kKGMoMSwgMSksIGMoMiwgMiksIGMoLTQsIDMpKV0gOiAKICBuZWdhdGl2ZSB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkIGluIGEgbWF0cml4IHN1YnNjcmlwdAo+ICMjIGdlbmVyYWxseSBhbGxvd2VkIGluIDIuMS4wLgo+IAo+IAo+ICMjIHByaW50aW5nIFJBVyBtYXRyaWNlcy9hcnJheXMgd2FzIG5vdCBpbXBsZW1lbnRlZAo+IHMgPC0gc2FwcGx5KDA6NywgZnVuY3Rpb24oaSkgcmF3U2hpZnQoY2hhclRvUmF3KCJteSB0ZXh0IiksaSkpCj4gcwogICAgIFssMV0gWywyXSBbLDNdIFssNF0gWyw1XSBbLDZdIFssN10gWyw4XQpbMSxdICAgNmQgICBkYSAgIGI0ICAgNjggICBkMCAgIGEwICAgNDAgICA4MApbMixdICAgNzkgICBmMiAgIGU0ICAgYzggICA5MCAgIDIwICAgNDAgICA4MApbMyxdICAgMjAgICA0MCAgIDgwICAgMDAgICAwMCAgIDAwICAgMDAgICAwMApbNCxdICAgNzQgICBlOCAgIGQwICAgYTAgICA0MCAgIDgwICAgMDAgICAwMApbNSxdICAgNjUgICBjYSAgIDk0ICAgMjggICA1MCAgIGEwICAgNDAgICA4MApbNixdICAgNzggICBmMCAgIGUwICAgYzAgICA4MCAgIDAwICAgMDAgICAwMApbNyxdICAgNzQgICBlOCAgIGQwICAgYTAgICA0MCAgIDgwICAgMDAgICAwMAo+IGRpbShzKSA8LSBjKDcsNCwyKQo+IHMKLCAsIDEKCiAgICAgWywxXSBbLDJdIFssM10gWyw0XQpbMSxdICAgNmQgICBkYSAgIGI0ICAgNjgKWzIsXSAgIDc5ICAgZjIgICBlNCAgIGM4ClszLF0gICAyMCAgIDQwICAgODAgICAwMApbNCxdICAgNzQgICBlOCAgIGQwICAgYTAKWzUsXSAgIDY1ICAgY2EgICA5NCAgIDI4Cls2LF0gICA3OCAgIGYwICAgZTAgICBjMApbNyxdICAgNzQgICBlOCAgIGQwICAgYTAKCiwgLCAyCgogICAgIFssMV0gWywyXSBbLDNdIFssNF0KWzEsXSAgIGQwICAgYTAgICA0MCAgIDgwClsyLF0gICA5MCAgIDIwICAgNDAgICA4MApbMyxdICAgMDAgICAwMCAgIDAwICAgMDAKWzQsXSAgIDQwICAgODAgICAwMCAgIDAwCls1LF0gICA1MCAgIGEwICAgNDAgICA4MApbNixdICAgODAgICAwMCAgIDAwICAgMDAKWzcsXSAgIDQwICAgODAgICAwMCAgIDAwCgo+ICMjIGVtcHR5IDwgMi4xLjEKPiAKPiAKPiAjIyBpbnRlcnByZXRhdGlvbiBvZiAnLicgZGlyZWN0bHkgYnkgbW9kZWwubWF0cml4Cj4gZGQgPC0gZGF0YS5mcmFtZShhID0gZ2woMyw0KSwgYiA9IGdsKDQsMSwxMikpCj4gbW9kZWwubWF0cml4KH4gLl4yLCBkYXRhID0gZGQpCiAgIChJbnRlcmNlcHQpIGEyIGEzIGIyIGIzIGI0IGEyOmIyIGEzOmIyIGEyOmIzIGEzOmIzIGEyOmI0IGEzOmI0CjEgICAgICAgICAgICAxICAwICAwICAwICAwICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwCjIgICAgICAgICAgICAxICAwICAwICAxICAwICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwCjMgICAgICAgICAgICAxICAwICAwICAwICAxICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwCjQgICAgICAgICAgICAxICAwICAwICAwICAwICAxICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwCjUgICAgICAgICAgICAxICAxICAwICAwICAwICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwCjYgICAgICAgICAgICAxICAxICAwICAxICAwICAwICAgICAxICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwCjcgICAgICAgICAgICAxICAxICAwICAwICAxICAwICAgICAwICAgICAwICAgICAxICAgICAwICAgICAwICAgICAwCjggICAgICAgICAgICAxICAxICAwICAwICAwICAxICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxICAgICAwCjkgICAgICAgICAgICAxICAwICAxICAwICAwICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwCjEwICAgICAgICAgICAxICAwICAxICAxICAwICAwICAgICAwICAgICAxICAgICAwICAgICAwICAgICAwICAgICAwCjExICAgICAgICAgICAxICAwICAxICAwICAxICAwICAgICAwICAgICAwICAgICAwICAgICAxICAgICAwICAgICAwCjEyICAgICAgICAgICAxICAwICAxICAwICAwICAxICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxCmF0dHIoLCJhc3NpZ24iKQogWzFdIDAgMSAxIDIgMiAyIDMgMyAzIDMgMyAzCmF0dHIoLCJjb250cmFzdHMiKQphdHRyKCwiY29udHJhc3RzIikkYQpbMV0gImNvbnRyLnRyZWF0bWVudCIKCmF0dHIoLCJjb250cmFzdHMiKSRiClsxXSAiY29udHIudHJlYXRtZW50IgoKPiAjIyBsb3N0IF4yIGluIDIuMS4xCj4gCj4gCj4gIyMgYWRkMS5sbSBhbmQgZHJvcC5sbSBkaWQgbm90IGtub3cgYWJvdXQgb2Zmc2V0cyAoUFIjODA0OSkKPiBzZXQuc2VlZCgyKQo+IHkgPC0gcm5vcm0oMTApCj4geiA8LSAxOjEwCj4gbG0wIDwtIGxtKHkgfiAxKQo+IGxtMSA8LSBsbSh5IH4gMSwgb2Zmc2V0ID0gMToxMCkKPiBsbTIgPC0gbG0oeSB+IHosIG9mZnNldCA9IDE6MTApCj4gCj4gYWRkMShsbTAsIHNjb3BlID0gfiB6KQpTaW5nbGUgdGVybSBhZGRpdGlvbnMKCk1vZGVsOgp5IH4gMQogICAgICAgRGYgIFN1bSBvZiBTcSAgICBSU1MgICAgICBBSUMKPG5vbmU+ICAgICAgICAgICAgICAgNi4zMTYxIC0yLjU5NDc5CnogICAgICAgMSAwLjAwMDI5NzY1IDYuMzE1OCAtMC41OTUyNgo+IGFub3ZhKGxtMSwgbG0yKQpBbmFseXNpcyBvZiBWYXJpYW5jZSBUYWJsZQoKTW9kZWwgMTogeSB+IDEKTW9kZWwgMjogeSB+IHoKICBSZXMuRGYgICAgUlNTIERmIFN1bSBvZiBTcSAgICAgRiAgICBQcig+RikgICAgCjEgICAgICA5IDg5LjEzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoyICAgICAgOCAgNi4zMTYgIDEgICAgODIuODE0IDEwNC45IDcuMDk5ZS0wNiAqKioKLS0tClNpZ25pZi4gY29kZXM6ICAwICcqKionIDAuMDAxICcqKicgMC4wMSAnKicgMC4wNSAnLicgMC4xICcgJyAxCj4gYWRkMShsbTEsIHNjb3BlID0gfiB6KQpTaW5nbGUgdGVybSBhZGRpdGlvbnMKCk1vZGVsOgp5IH4gMQogICAgICAgRGYgU3VtIG9mIFNxICAgIFJTUyAgICAgQUlDCjxub25lPiAgICAgICAgICAgICAgODkuMTMwIDIzLjg3NTEKeiAgICAgICAxICAgIDgyLjgxNCAgNi4zMTYgLTAuNTk1Mwo+IGRyb3AxKGxtMikKU2luZ2xlIHRlcm0gZGVsZXRpb25zCgpNb2RlbDoKeSB+IHoKICAgICAgIERmIFN1bSBvZiBTcSAgICBSU1MgICAgIEFJQwo8bm9uZT4gICAgICAgICAgICAgICA2LjMxNiAtMC41OTUzCnogICAgICAgMSAgICA4Mi44MTQgODkuMTMwIDIzLjg3NTEKPiAjIyBMYXN0IHR3byBpZ25vcmVkIHRoZSBvZmZzZXQgaW4gMi4xLjEKPiAKPiAKPiAjIyB0ZXN0cyBvZiByYXcgY29udmVyc2lvbgo+IGFzLnJhdygxMjM0KQpbMV0gMDAKV2FybmluZyBtZXNzYWdlOgpvdXQtb2YtcmFuZ2UgdmFsdWVzIHRyZWF0ZWQgYXMgMCBpbiBjb2VyY2lvbiB0byByYXcgCj4gYXMucmF3KGxpc3QoYT0xMjM0KSkKWzFdIDAwCldhcm5pbmcgbWVzc2FnZToKb3V0LW9mLXJhbmdlIHZhbHVlcyB0cmVhdGVkIGFzIDAgaW4gY29lcmNpb24gdG8gcmF3IAo+ICMjIDIuMS4xOiBzcHVyaW91cyBhbmQgbWlzc2luZyBtZXNzYWdlcywgd3JvbmcgcmVzdWx0IGZvciBzZWNvbmQuCj4gCj4gCj4gIyMjIGVuZCBvZiB0ZXN0cyBhZGRlZCBpbiAyLjEuMSBwYXRjaGVkICMjIwo+IAo+IAo+ICMjIFRlc3RzIG9mIGxvZ2ljYWwgbWF0cml4IGluZGV4aW5nIHdpdGggTkFzCj4gZGYxIDwtIGRhdGEuZnJhbWUoYSA9IGMoTkEsIDAsIDMsIDQpKTsgbTEgPC0gYXMubWF0cml4KGRmMSkKPiBkZjIgPC0gZGF0YS5mcmFtZShhID0gYyhOQSwgMCwgMCwgNCkpOyBtMiA8LSBhcy5tYXRyaXgoZGYyKQo+IGRmMVtkZjEgPT0gMF0gPC0gMjsgZGYxCiAgIGEKMSBOQQoyICAyCjMgIDMKNCAgNAo+IG0xW20xID09IDBdIDwtIDI7ICAgbTEKICAgICAgYQpbMSxdIE5BClsyLF0gIDIKWzMsXSAgMwpbNCxdICA0Cj4gZGYyW2RmMiA9PSAwXSA8LSAyOyBkZjIgICMgbm90IGFsbG93ZWQgaW4gMi57MCwxfS56CiAgIGEKMSBOQQoyICAyCjMgIDIKNCAgNAo+IG0yW20yID09IDBdIDwtIDI7ICAgbTIKICAgICAgYQpbMSxdIE5BClsyLF0gIDIKWzMsXSAgMgpbNCxdICA0Cj4gZGYxW2RmMSA9PSAyXSAjIHRoaXMgaXMgZmlyc3QgY29lcmNlZCB0byBhIG1hdHJpeCwgYW5kIGRyb3BzIHRvIGEgdmVjdG9yClsxXSBOQSAgMgo+IGRmMyA8LSBkYXRhLmZyYW1lKGE9MToyLCBiPTI6MykKPiBkZjNbZGYzID09IDJdICAgICAgICAgICAgIyBoYWQgc3B1cmlvdXMgbmFtZXMKWzFdIDIgMgo+ICMgYnV0IG5vdCBhbGxvd2VkCj4gIyMgKG1vZGlmaWVkIHRvIG1ha2UgcHJpbnRlZCByZXN1bHQgdGhlIHNhbWUgd2hldGhlciBudW1lcmljKCkgaXMKPiAjIyAgY29tcGlsZWQgb3IgaW50ZXJwcmV0ZWQpCj4gIyMgdHJ5KGRmMltkZjIgPT0gMl0gPC0gMToyKQo+ICMjIHRyeShtMlttMiA9PSAyXSA8LSAxOjIpCj4gdHJ5Q2F0Y2goZGYyW2RmMiA9PSAyXSA8LSAxOjIsCisgICAgICAgICAgZXJyb3IgPSBmdW5jdGlvbihlKSBwYXN0ZSgiRXJyb3I6IiwgY29uZGl0aW9uTWVzc2FnZShlKSkpClsxXSAiRXJyb3I6IE5BcyBhcmUgbm90IGFsbG93ZWQgaW4gc3Vic2NyaXB0ZWQgYXNzaWdubWVudHMiCj4gdHJ5Q2F0Y2gobTJbbTIgPT0gMl0gPC0gMToyLAorICAgICAgICAgIGVycm9yID0gZnVuY3Rpb24oZSkgcGFzdGUoIkVycm9yOiIsIGNvbmRpdGlvbk1lc3NhZ2UoZSkpKQpbMV0gIkVycm9yOiBOQXMgYXJlIG5vdCBhbGxvd2VkIGluIHN1YnNjcmlwdGVkIGFzc2lnbm1lbnRzIgo+ICMjCj4gCj4gCj4gIyMgdmVjdG9yIGluZGV4aW5nIG9mIG1hdHJpY2VzOiBpc3N1ZSBpcyB3aGVuIHJvd25hbWVzIGFyZSB1c2VkCj4gIyAxRCBhcnJheQo+IG0xIDwtIGMoMCwxLDIsMCkKPiBkaW0obTEpIDwtIDQKPiBkaW1uYW1lcyhtMSkgPC0gbGlzdCgxOjQpCj4gbTFbbTEgPT0gMF0gICAgICAgICAgICAgICAgICAgICAgICAjIGhhcyByb3duYW1lcwoxIDQgCjAgMCAKPiBtMVt3aGljaChtMSA9PSAwKV0gICAgICAgICAgICAgICAgICMgaGFzIHJvd25hbWVzCjEgNCAKMCAwIAo+IG0xW3doaWNoKG0xID09IDAsIGFyci5pbmQgPSBUUlVFKV0gIyBubyBuYW1lcyA8IDIuMi4wIChzaWRlIGVmZmVjdCBvZiBQUiM5MzcpCjEgNCAKMCAwIAo+IAo+ICMgMkQgYXJyYXkgd2l0aCAyIGNvbHMKPiBtMiA8LSBhcy5tYXRyaXgoZGF0YS5mcmFtZShhPWMoMCwxLDIsMCksIGI9MDozKSkKPiBtMlttMiA9PSAwXSAgICAgICAgICAgICAgICAgICAgICAgICMgYSB2ZWN0b3IsIGhhZCBuYW1lcyA8IDIuMi4wClsxXSAwIDAgMAo+IG0yW3doaWNoKG0yID09IDApXSAgICAgICAgICAgICAgICAgIyBhIHZlY3RvciwgaGFkIG5hbWVzIDwgMi4yLjAKWzFdIDAgMCAwCj4gbTJbd2hpY2gobTIgPT0gMCwgYXJyLmluZCA9IFRSVUUpXSAjIG5vIG5hbWVzIChQUiM5MzcpClsxXSAwIDAgMAo+IAo+ICMgMkQgYXJyYXkgd2l0aCBvbmUgY29sOiBjb3VsZCB1c2Ugcm93bmFtZXMgYnV0IGRvIG5vdC4KPiBtMjEgPC0gbTJbLCAxLCBkcm9wID0gRkFMU0VdCj4gbTIxW20yMSA9PSAwXQpbMV0gMCAwCj4gbTIxW3doaWNoKG0yMSA9PSAwKV0KWzFdIDAgMAo+IG0yMVt3aGljaChtMjEgPT0gMCwgYXJyLmluZCA9IFRSVUUpXQpbMV0gMCAwCj4gIyMgbm90IGNvbnNpc3RlbnQgPCAyLjIuMDogUyBuZXZlciBnaXZlcyBuYW1lcwo+IAo+IAo+ICMjIHRlc3RzIG9mIGluZGV4aW5nIGFzIHF1b3RlZCBpbiBFeHRyYWN0LlJkCj4geCA8LSBOVUxMCj4geCRmb28gPC0gMgo+IHggIyBsZW5ndGgtMSB2ZWN0b3IKJGZvbwpbMV0gMgoKPiB4IDwtIE5VTEwKPiB4W1syXV0gPC0gcGkKPiB4ICMgbnVtZXJpYyB2ZWN0b3IKWzFdICAgICAgIE5BIDMuMTQxNTkzCj4geCA8LSBOVUxMCj4geFtbMV1dIDwtIDE6Mwo+IHggIyBsaXN0CltbMV1dClsxXSAxIDIgMwoKPiAjIwo+IAo+IAo+ICMjIHByaW50aW5nIG9mIGEga2VybmVsOgo+IGtlcm5lbCgxKQp1bmtub3duIApjb2VmWzBdID0gMQo+ICMjIHByaW50ZWQgd3JvbmdseSBpbiBSIDw9IDIuMS4xCj4gCj4gCj4gIyMgdXNpbmcgTlVMTCBhcyBhIHJlcGxhY2VtZW50IHZhbHVlCj4gREYgPC0gZGF0YS5mcmFtZShBPTE6MiwgQj0zOjQpCj4gdHJ5KERGWzIsIDE6M10gPC0gTlVMTCkKRXJyb3IgaW4geFtbampdXVtpc2VxXSA8LSB2amogOiByZXBsYWNlbWVudCBoYXMgbGVuZ3RoIHplcm8KPiAjIyB3cm9uZyBlcnJvciBtZXNzYWdlIGluIFIgPCAyLjIuMAo+IAo+IAo+ICMjIHRlc3RzIG9mIHNpZ25pZgo+IG9iIDwtIDA6OSAqIDIwMDAKPiBwcmludChzaWduaWYob2IsIDMpLCBkaWdpdHM9MTcpICMgaGFkIHJvdW5kaW5nIGVycm9yIGluIDIuMS4xCiBbMV0gICAgIDAgIDIwMDAgIDQwMDAgIDYwMDAgIDgwMDAgMTAwMDAgMTIwMDAgMTQwMDAgMTYwMDAgMTgwMDAKPiBzaWduaWYoMS4yMzQ3ZS0zMDUsIDQpClsxXSAxLjIzNWUtMzA1Cj4gc2lnbmlmKDEuMjM0N2UtMzA2LCA0KSAgIyBvbmx5IDMgZGlnaXRzIGluIDIuMS4xClsxXSAxLjIzNWUtMzA2Cj4gc2lnbmlmKDEuMjM0N2UtMzA3LCA0KQpbMV0gMS4yMzVlLTMwNwo+ICMjCj4gCj4gIyMjIGVuZCBvZiB0ZXN0cyBhZGRlZCBpbiAyLjIuMCBwYXRjaGVkICMjIwo+IAo+IAo+ICMjIHByaW50aW5nIGxpc3RzIHdpdGggTkEgbmFtZXMKPiBBIDwtIGxpc3QoMSwgMikKPiBuYW1lcyhBKSA8LSBjKCJOQSIsIE5BKQo+IEEKJGBOQWAKWzFdIDEKCiQ8TkE+ClsxXSAyCgo+ICMjIGJvdGggcHJpbnRlZCBhcyAiTkEiIGluIDIuMi4wCj4gCj4gCj4gIyMgc3Vic2NyaXB0aW5nIHdpdGggYm90aCBOQSBhbmQgIk5BIiBuYW1lcwo+IHggPC0gMTo0Cj4gbmFtZXMoeCkgPC0gYyhOQSwgIk5BIiwgImEiLCAiIikKPiB4W25hbWVzKHgpXQo8TkE+ICAgTkEgICAgYSA8TkE+IAogIE5BICAgIDIgICAgMyAgIE5BIAo+ICMjIDIuMi4wIGhhZCB0aGUgc2Vjb25kIG1hdGNoaW5nIHRoZSBmaXJzdC4KPiBseCA8LSBhcy5saXN0KHgpCj4gbHhbW2FzLmNoYXJhY3RlcihOQSldXQpOVUxMCj4gbHhbYXMuY2hhcmFjdGVyKE5BKV0KJDxOQT4KTlVMTAoKPiAjIyAyLjIuMCBoYWQgYm90aCBtYXRjaGluZyBlbGVtZW50IDEKPiAKPiAKPiAjIyBkYXRhIGZyYW1lIHJlcGxhY2VtZW50IHN1YnNjcmlwdGluZwo+ICMgQ2hhcmxlcyBDLiBCZXJyeSwgUi1kZXZlbCwgMjAwNS0xMC0yNgo+IGEuZnJhbWUgPC0gZGF0YS5mcmFtZSggeD1sZXR0ZXJzWzE6NV0gKQo+IGEuZnJhbWVbIDI6NSwgInkiIF0gPC0gbGV0dGVyc1syOjVdCj4gYS5mcmFtZSAgIyBhZGRlZCByb3dzIDE6NAogIHggICAgeQoxIGEgPE5BPgoyIGIgICAgYgozIGMgICAgYwo0IGQgICAgZAo1IGUgICAgZQo+ICMgYW5kIGFkZGluZyBhbmQgcmVwbGFjaW5nIG1hdHJpY2VzIGZhaWxlZAo+IGEuZnJhbWVbICwieSIgXSA8LSBtYXRyaXgoMToxMCwgNSwgMikKPiBhLmZyYW1lCiAgeCB5LjEgeS4yCjEgYSAgIDEgICA2CjIgYiAgIDIgICA3CjMgYyAgIDMgICA4CjQgZCAgIDQgICA5CjUgZSAgIDUgIDEwCj4gYS5mcmFtZVszOjUgLCJ5IiBdIDwtIG1hdHJpeCgxOjYsIDMsIDIpCj4gYS5mcmFtZQogIHggeS4xIHkuMgoxIGEgICAxICAgNgoyIGIgICAyICAgNwozIGMgICAxICAgNAo0IGQgICAyICAgNQo1IGUgICAzICAgNgo+IGEuZnJhbWUgPC0gZGF0YS5mcmFtZSggeD1sZXR0ZXJzWzE6NV0gKQo+IGEuZnJhbWVbMzo1ICwieSIgXSA8LSBtYXRyaXgoMTo2LCAzLCAyKQo+IGEuZnJhbWUKICB4IHkuMSB5LjIKMSBhICBOQSAgTkEKMiBiICBOQSAgTkEKMyBjICAgMSAgIDQKNCBkICAgMiAgIDUKNSBlICAgMyAgIDYKPiAjIyBmYWlsZWQvd3JvbmcgYW5zIGluIDIuMi4wCj4gCj4gCj4gIyMjIGVuZCBvZiB0ZXN0cyBhZGRlZCBpbiAyLjIuMCBwYXRjaGVkICMjIwo+IAo+IAo+ICMjIHRlc3Qgb2YgZml4IG9mIHRyaXZpYWwgd2FybmluZyBQUiM4MjUyCj4gcGFpcnMoaXJpc1sxOjRdLCBvbWE9cmVwKDMsNCkpCj4gIyMgd2FybmVkIGluIDIuMi4wIG9ubHkKPiAKPiAKPiAjIyBzdHIoPGRlbmRyb2dyYW0+KQo+IGRlbmQgPC0gYXMuZGVuZHJvZ3JhbShoY2x1c3QoZGlzdChVU0FycmVzdHMpLCAiYXZlIikpICMgInByaW50KCkiIG1ldGhvZAo+IGRlbmQyIDwtIGN1dChkZW5kLCBoPTcwKQo+IHN0cihkZW5kMiR1cHBlcikKLS1bZGVuZHJvZ3JhbSB3LyAyIGJyYW5jaGVzIGFuZCA0IG1lbWJlcnMgYXQgaCA9IDE1Ml0KICB8LS1bZGVuZHJvZ3JhbSB3LyAyIGJyYW5jaGVzIGFuZCAyIG1lbWJlcnMgYXQgaCA9IDc3LjZdCiAgfCAgfC0tbGVhZiAiQnJhbmNoIDEiIChoPSAzOC41IG1pZHBvaW50ID0gMC41LCB4Lm1lbWJlciA9IDIgKQogIHwgIGAtLWxlYWYgIkJyYW5jaCAyIiAoaD0gNDQuMyBtaWRwb2ludCA9IDUuMDMsIHgubWVtYmVyID0gMTQgKQogIGAtLVtkZW5kcm9ncmFtIHcvIDIgYnJhbmNoZXMgYW5kIDIgbWVtYmVycyBhdCBoID0gODkuMl0KICAgICB8LS1sZWFmICJCcmFuY2ggMyIgKGg9IDQ0LjggbWlkcG9pbnQgPSA2LjgsIHgubWVtYmVyID0gMTQgKQogICAgIGAtLWxlYWYgIkJyYW5jaCA0IiAoaD0gNTQuNyBtaWRwb2ludCA9IDcuNjUsIHgubWVtYmVyID0gMjAgKQo+ICMjIHt7Zm9yIEVtYWNzOiBgfX0gIGdhdmUgbXVjaCB0b28gbWFueSBzcGFjZXMgaW4gMi4yLlswMV0KPiAKPiAKPiAjIyBmb3JtYXRDIG9uIFdpbmRvd3MgKFBSIzgzMzcpCj4geHggIDwtIHBpICogMTBeKC01OjQpCj4gY2JpbmQoZm9ybWF0Qyh4eCwgd2lkID0gOSkpCiAgICAgIFssMV0gICAgICAgCiBbMSxdICIzLjE0MmUtMDUiCiBbMixdICIwLjAwMDMxNDIiCiBbMyxdICIgMC4wMDMxNDIiCiBbNCxdICIgIDAuMDMxNDIiCiBbNSxdICIgICAwLjMxNDIiCiBbNixdICIgICAgMy4xNDIiCiBbNyxdICIgICAgMzEuNDIiCiBbOCxdICIgICAgMzE0LjIiCiBbOSxdICIgICAgIDMxNDIiClsxMCxdICIzLjE0MmUrMDQiCj4gY2JpbmQoZm9ybWF0Qyh4eCwgd2lkID0gOSwgZmxhZyA9ICItIikpCiAgICAgIFssMV0gICAgICAgCiBbMSxdICIzLjE0MmUtMDUiCiBbMixdICIwLjAwMDMxNDIiCiBbMyxdICIwLjAwMzE0MiAiCiBbNCxdICIwLjAzMTQyICAiCiBbNSxdICIwLjMxNDIgICAiCiBbNixdICIzLjE0MiAgICAiCiBbNyxdICIzMS40MiAgICAiCiBbOCxdICIzMTQuMiAgICAiCiBbOSxdICIzMTQyICAgICAiClsxMCxdICIzLjE0MmUrMDQiCj4gY2JpbmQoZm9ybWF0Qyh4eCwgd2lkID0gOSwgZmxhZyA9ICIwIikpCiAgICAgIFssMV0gICAgICAgCiBbMSxdICIzLjE0MmUtMDUiCiBbMixdICIwLjAwMDMxNDIiCiBbMyxdICIwMC4wMDMxNDIiCiBbNCxdICIwMDAuMDMxNDIiCiBbNSxdICIwMDAwLjMxNDIiCiBbNixdICIwMDAwMy4xNDIiCiBbNyxdICIwMDAwMzEuNDIiCiBbOCxdICIwMDAwMzE0LjIiCiBbOSxdICIwMDAwMDMxNDIiClsxMCxdICIzLjE0MmUrMDQiCj4gIyMgZXh0cmEgc3BhY2Ugb24gMi4yLjEKPiAKPiAKPiAjIyBhbiBpbXBvc3NpYmxlIGdsbSBmaXQKPiBzdWNjZXNzIDwtIGMoMTMsMTIsMTEsMTQsMTQsMTEsMTMsMTEsMTIpCj4gZmFpbHVyZSA8LSBjKDAsMCwwLDAsMCwwLDAsMiwyKQo+IHByZWRpY3RvciA8LSBjKDAsIDVeKDA6NykpCj4gdHJ5KGdsbShjYmluZChzdWNjZXNzLGZhaWx1cmUpIH4gMCtwcmVkaWN0b3IsIGZhbWlseSA9IGJpbm9taWFsKGxpbms9ImxvZyIpKSkKRXJyb3IgOiBubyB2YWxpZCBzZXQgb2YgY29lZmZpY2llbnRzIGhhcyBiZWVuIGZvdW5kOiBwbGVhc2Ugc3VwcGx5IHN0YXJ0aW5nIHZhbHVlcwo+ICMgbm8gY29lZmZpY2llbnQgaXMgcG9zc2libGUgYXMgdGhlIGZpcnN0IGNhc2Ugd2lsbCBoYXZlIG11ID0gMQo+ICMjIDIuMi4xIGdhdmUgYSBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlIHdhcm5pbmcgaW5zdGVhZC4KPiAKPiAKPiAjIyBlcnJvciBtZXNzYWdlIGZyb20gc29sdmUgKFBSIzg0OTQpCj4gdGVtcCA8LSBkaWFnKDEsIDUpWywgMTo0XQo+IHJvd25hbWVzKHRlbXApIDwtIGFzLmNoYXJhY3RlcigxOjUpCj4gY29sbmFtZXModGVtcCkgPC0gYXMuY2hhcmFjdGVyKDE6NCkKPiB0cnkoc29sdmUodGVtcCkpCkVycm9yIGluIHNvbHZlLmRlZmF1bHQodGVtcCkgOiAnYScgKDUgeCA0KSBtdXN0IGJlIHNxdWFyZQo+ICMgYWxzbyBjb21wbGV4Cj4gdHJ5KHNvbHZlKHRlbXArMGkpKQpFcnJvciBpbiBzb2x2ZS5kZWZhdWx0KHRlbXAgKyAoMCswaSkpIDogJ2EnICg1IHggNCkgbXVzdCBiZSBzcXVhcmUKPiAjIGFuZCBub24tY29tZm9ybWFudCBzeXN0ZW1zCj4gdHJ5KHNvbHZlKHRlbXAsIGRpYWcoMykpKQpFcnJvciBpbiBzb2x2ZS5kZWZhdWx0KHRlbXAsIGRpYWcoMykpIDogJ2EnICg1IHggNCkgbXVzdCBiZSBzcXVhcmUKPiAjIyBnYXZlIGVycm9ycyBmcm9tIHJvd25hbWVzPC0gaW4gMi4yLjEKPiAKPiAKPiAjIyBQUiM4NDYyIHRlcm1zLmZvcm11bGEoc2ltcGxpZnkgPSBUUlVFKSBuZWVkcyBwYXJlbnRoZXNlcy4KPiB1cGRhdGUuZm9ybXVsYSAoUmVhY3Rpb24gfiBEYXlzICsgKERheXMgfCBTdWJqZWN0KSwgLiB+IC4gKyBJKERheXNeMikpClJlYWN0aW9uIH4gRGF5cyArIChEYXlzIHwgU3ViamVjdCkgKyBJKERheXNeMikKPiAjIyA8IDIuMy4wIGRyb3BwZWQgcGFyZW5zIG9uIHNlY29uZCB0ZXJtLgo+IAo+IAo+ICMjIFBSIzg1Mjg6IGVycm9ycyBpbiB0aGUgcG9zdC0yLjEuMCBwZ2FtbWEKPiBwZ2FtbWEoc2VxKDAuNzUsIDEuMjUsIGJ5PTAuMDUpKjFlMTAwLCBzaGFwZSA9IDFlMTAwLCBsb2c9VFJVRSkKIFsxXSAtMy43NjgyMDdlKzk4IC0yLjMxNDM1NWUrOTggLTEuMjUxODkzZSs5OCAtNS4zNjA1MTZlKzk3IC0xLjI5MzI5NGUrOTcKIFs2XSAtNi45MzE0NzJlLTAxICAwLjAwMDAwMGUrMDAgIDAuMDAwMDAwZSswMCAgMC4wMDAwMDBlKzAwICAwLjAwMDAwMGUrMDAKWzExXSAgMC4wMDAwMDBlKzAwCj4gcGdhbW1hKHNlcSgwLjc1LCAxLjI1LCBieT0wLjA1KSoxZTEwMCwgc2hhcGUgPSAxZTEwMCwgbG9nPVRSVUUsIGxvd2VyPUZBTFNFKQogWzFdICAwLjAwMDAwMGUrMDAgIDAuMDAwMDAwZSswMCAgMC4wMDAwMDBlKzAwICAwLjAwMDAwMGUrMDAgIDAuMDAwMDAwZSswMAogWzZdIC02LjkzMTQ3MmUtMDEgLTEuMjA5ODM2ZSs5NyAtNC42ODk4MjBlKzk3IC0xLjAyMzgwNmUrOTggLTEuNzY3ODQ0ZSs5OApbMTFdIC0yLjY4NTY0NWUrOTgKPiBwZ2FtbWEoYygxLTFlLTEwLCAxKzFlLTEwKSoxZTEwMCwgc2hhcGUgPSAxZTEwMCkKWzFdIDAgMQo+IHBnYW1tYSgwLjkqMWUyNSwgMWUyNSwgbG9nPVRSVUUpClsxXSAtNS4zNjA1MTZlKzIyCj4gIyMgd2VyZSBOYU4sIC1JbmYgZXRjIGluIDIuMi4xLgo+IAo+IAo+ICMjICsgZm9yIFBPU0lYdCBvYmplY3RzIHdhcyBub24tY29tbXV0YXRpdmUKPiAjIFNQU1Mtc3R5bGUgZGF0ZXMKPiBjKDEwNDg1ODQ5NjAwLDEwNDc3NjQxNjAwLDEwNTYxMTA0MDAwLDEwNTYyNzQ1NjAwKStJU09kYXRlKDE1ODIsMTAsMTQpClsxXSAiMTkxNS0wMS0yNiAxMjowMDowMCBHTVQiICIxOTE0LTEwLTIzIDEyOjAwOjAwIEdNVCIKWzNdICIxOTE3LTA2LTE1IDEyOjAwOjAwIEdNVCIgIjE5MTctMDctMDQgMTI6MDA6MDAgR01UIgo+ICMjIHdhcyBpbiB0aGUgbG9jYWwgdGltZSB6b25lIGluIDIuMi4xLgo+IAo+IAo+ICMjIExpbWl0aW5nIGxpbmVzIG9uIGRlcGFyc2UgKHdpc2hsaXN0IFBSIzg2MzgpCj4gb3AgPC0gb3B0aW9ucyhkZXBhcnNlLm1heC5saW5lcyA9IDMpCj4gZiA8LSBmdW5jdGlvbiguLi4pIGJyb3dzZXIoKQo+IGRvLmNhbGwoZiwgbXRjYXJzKQpDYWxsZWQgZnJvbTogKGZ1bmN0aW9uICguLi4pIApicm93c2VyKCkpKG1wZyA9IGMoMjEsIDIxLCAyMi44LCAyMS40LCAxOC43LCAxOC4xLCAxNC4zLCAyNC40LCAKMjIuOCwgMTkuMiwgMTcuOCwgMTYuNCwgMTcuMywgMTUuMiwgMTAuNCwgMTAuNCwgMTQuNywgMzIuNCwgMzAuNCwgCiAgLi4uCkJyb3dzZVsxXT4gYwo+IAo+IG9wdGlvbnMoZXJyb3IgPSBleHByZXNzaW9uKE5VTEwpKQo+IGYgPC0gZnVuY3Rpb24oLi4uKSBzdG9wKCkKPiBkby5jYWxsKGYsIG10Y2FycykKRXJyb3IgaW4gKGZ1bmN0aW9uICguLi4pICA6IApDYWxsczogZG8uY2FsbCAtPiA8QW5vbnltb3VzPgo+IHRyYWNlYmFjaygpCjM6IHN0b3AoKQoyOiAoZnVuY3Rpb24gKC4uLikgCiAgIHN0b3AoKSkobXBnID0gYygyMSwgMjEsIDIyLjgsIDIxLjQsIDE4LjcsIDE4LjEsIDE0LjMsIDI0LjQsIDIyLjgsIAogICAxOS4yLCAxNy44LCAxNi40LCAxNy4zLCAxNS4yLCAxMC40LCAxMC40LCAxNC43LCAzMi40LCAzMC40LCAzMy45LCAKICAgIC4uLgoxOiBkby5jYWxsKGYsIG10Y2FycykKPiAKPiAjIyBEZWJ1Z2dlciBjYW4gaGFuZGxlIGEgZnVuY3Rpb24gdGhhdCBoYXMgYSBzaW5nbGUgZnVuY3Rpb24gY2FsbCBhcyBpdHMgYm9keQo+IGcgPC0gZnVuY3Rpb24oZnVuKSBmdW4oMSkKPiBkZWJ1ZyhnKQo+IGcoZnVuY3Rpb24oeCkgeCsxKQpkZWJ1Z2dpbmcgaW46IGcoZnVuY3Rpb24oeCkgeCArIDEpCmRlYnVnOiBmdW4oMSkKQnJvd3NlWzJdPiAKZXhpdGluZyBmcm9tOiBnKGZ1bmN0aW9uKHgpIHggKyAxKQpbMV0gMgo+IG9wdGlvbnMob3ApCj4gIyMgdW5saW1pdGVkIDwgMi4zLjAKPiAKPiAKPiAjIyByb3cgbmFtZXMgaW4gYXMudGFibGUgKFBSIzg2NTIpCj4gYXMudGFibGUobWF0cml4KDE6NjAsIG5jb2w9MikpCiAgICBBICBCCkEgICAxIDMxCkIgICAyIDMyCkMgICAzIDMzCkQgICA0IDM0CkUgICA1IDM1CkYgICA2IDM2CkcgICA3IDM3CkggICA4IDM4CkkgICA5IDM5CkogIDEwIDQwCksgIDExIDQxCkwgIDEyIDQyCk0gIDEzIDQzCk4gIDE0IDQ0Ck8gIDE1IDQ1ClAgIDE2IDQ2ClEgIDE3IDQ3ClIgIDE4IDQ4ClMgIDE5IDQ5ClQgIDIwIDUwClUgIDIxIDUxClYgIDIyIDUyClcgIDIzIDUzClggIDI0IDU0ClkgIDI1IDU1ClogIDI2IDU2CkExIDI3IDU3CkIxIDI4IDU4CkMxIDI5IDU5CkQxIDMwIDYwCj4gIyMgcm93cyBwYXN0IDI2IGhhZCBOQSByb3cgbmFtZXMKPiAKPiAKPiAjIyBzdW1tYXJ5IG9uIGEgZ2xtIHdpdGggemVybyB3ZWlnaHRzIGFuZCBlc3RpbWF0ZWQgZGlzcGVyc2lvbiAoUFIjODcyMCkKPiB5IDwtIHJub3JtKDEwKQo+IHggPC0gMToxMAo+IHcgPC0gYyhyZXAoMSw5KSwgMCkKPiBzdW1tYXJ5KGdsbSh5IH4geCwgd2VpZ2h0cyA9IHcpKQoKQ2FsbDoKZ2xtKGZvcm11bGEgPSB5IH4geCwgd2VpZ2h0cyA9IHcpCgpEZXZpYW5jZSBSZXNpZHVhbHM6IAogICAgTWluICAgICAgIDFRICAgTWVkaWFuICAgICAgIDNRICAgICAgTWF4ICAKLTEuNzgwNiAgLTAuMTQxNiAgIDAuMTg2MyAgIDAuNTY5MCAgIDEuMjA1NyAgCgpDb2VmZmljaWVudHM6CiAgICAgICAgICAgIEVzdGltYXRlIFN0ZC4gRXJyb3IgdCB2YWx1ZSBQcig+fHR8KQooSW50ZXJjZXB0KSAgLTAuNzUzMiAgICAgMC43ODYyICAtMC45NTggICAgMC4zNzAKeCAgICAgICAgICAgICAwLjEzMTEgICAgIDAuMTM5NyAgIDAuOTM4ICAgIDAuMzc5CgooRGlzcGVyc2lvbiBwYXJhbWV0ZXIgZm9yIGdhdXNzaWFuIGZhbWlseSB0YWtlbiB0byBiZSAxLjE3MTI1KQoKICAgIE51bGwgZGV2aWFuY2U6IDkuMjI5OCAgb24gOCAgZGVncmVlcyBvZiBmcmVlZG9tClJlc2lkdWFsIGRldmlhbmNlOiA4LjE5ODggIG9uIDcgIGRlZ3JlZXMgb2YgZnJlZWRvbQpBSUM6IEluZgoKTnVtYmVyIG9mIEZpc2hlciBTY29yaW5nIGl0ZXJhdGlvbnM6IDIKCldhcm5pbmcgbWVzc2FnZToKSW4gc3VtbWFyeS5nbG0oZ2xtKHkgfiB4LCB3ZWlnaHRzID0gdykpIDoKICBvYnNlcnZhdGlvbnMgd2l0aCB6ZXJvIHdlaWdodCBub3QgdXNlZCBmb3IgY2FsY3VsYXRpbmcgZGlzcGVyc2lvbgo+IHN1bW1hcnkoZ2xtKHkgfiB4LCBzdWJzZXQgPSB3ID4gMCkpCgpDYWxsOgpnbG0oZm9ybXVsYSA9IHkgfiB4LCBzdWJzZXQgPSB3ID4gMCkKCkRldmlhbmNlIFJlc2lkdWFsczogCiAgICBNaW4gICAgICAgMVEgICBNZWRpYW4gICAgICAgM1EgICAgICBNYXggIAotMS43ODA2ICAtMC4xNTgyICAgMC4zNzI2ICAgMC41ODk2ICAgMS4yMDU3ICAKCkNvZWZmaWNpZW50czoKICAgICAgICAgICAgRXN0aW1hdGUgU3RkLiBFcnJvciB0IHZhbHVlIFByKD58dHwpCihJbnRlcmNlcHQpICAtMC43NTMyICAgICAwLjc4NjIgIC0wLjk1OCAgICAwLjM3MAp4ICAgICAgICAgICAgIDAuMTMxMSAgICAgMC4xMzk3ICAgMC45MzggICAgMC4zNzkKCihEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgZ2F1c3NpYW4gZmFtaWx5IHRha2VuIHRvIGJlIDEuMTcxMjUpCgogICAgTnVsbCBkZXZpYW5jZTogOS4yMjk4ICBvbiA4ICBkZWdyZWVzIG9mIGZyZWVkb20KUmVzaWR1YWwgZGV2aWFuY2U6IDguMTk4OCAgb24gNyAgZGVncmVlcyBvZiBmcmVlZG9tCkFJQzogMzAuNzAyCgpOdW1iZXIgb2YgRmlzaGVyIFNjb3JpbmcgaXRlcmF0aW9uczogMgoKPiAjIyBoYXMgTkEgZGlzcGVyc2lvbiBpbiAyLjIuMQo+IAo+IAo+ICMjIHN1YnN0aXR1dGUgd2FzIGxvc2luZyAiLi4uIiBhZnRlciByMzcyNjkKPiB5YWEgPC0gZnVuY3Rpb24oLi4uKSBzdWJzdGl0dXRlKGxpc3QoLi4uKSkKPiB5YWEoZm9vKC4uLikpCmxpc3QoZm9vKC4uLikpCj4gIyMgYW5kIHdhc24ndCBzdWJzdGl0dXRpbmcgYWZ0ZXIgIi4uLiIKPiBzdWJzdGl0dXRlKGxpc3QoLi4uLCB4KSwgbGlzdCh4PTEpKQpsaXN0KC4uLiwgMSkKPiAjIyBmaXhlZCBmb3IgMi4zLjAKPiAKPiAKPiAjIyB1bmlyb290IG5ldmVyIHdhcm5lZCAoUFIjODc1MCkKPiBmZiA8LSBmdW5jdGlvbih4KSAoeC1waSleMwo+IHVuaXJvb3QoZmYsIGMoLTEwLDEwKSwgbWF4aXRlcj0xMCkKJHJvb3QKWzFdIDMuMjkxMTI2CgokZi5yb290ClsxXSAwLjAwMzM0MzU4NwoKJGl0ZXIKWzFdIDEwCgokaW5pdC5pdApbMV0gTkEKCiRlc3RpbS5wcmVjClsxXSAwLjgyOTUwMjMKCldhcm5pbmcgbWVzc2FnZToKSW4gdW5pcm9vdChmZiwgYygtMTAsIDEwKSwgbWF4aXRlciA9IDEwKSA6IF9OT1RfIGNvbnZlcmdlZCBpbiAxMCBpdGVyYXRpb25zCj4gIyMgc2hvdWxkIHdhcm4sIGRpZCBub3QgPCAyLjMuMAo+IAo+IAo+ICMjIyBlbmQgb2YgdGVzdHMgYWRkZWQgaW4gMi4zLjAgIyMjCj4gCj4gCj4gIyMgcHJvZCBldGMgb24gZW1wdHkgbGlzdHMgYW5kIHJhdyB2ZWN0b3JzCj4gdHJ5KG1pbihsaXN0KCkpKQpFcnJvciBpbiBtaW4obGlzdCgpKSA6IGludmFsaWQgJ3R5cGUnIChsaXN0KSBvZiBhcmd1bWVudAo+IHRyeShtYXgobGlzdCgpKSkKRXJyb3IgaW4gbWF4KGxpc3QoKSkgOiBpbnZhbGlkICd0eXBlJyAobGlzdCkgb2YgYXJndW1lbnQKPiB0cnkoc3VtKGxpc3QoKSkpCkVycm9yIGluIHN1bShsaXN0KCkpIDogaW52YWxpZCAndHlwZScgKGxpc3QpIG9mIGFyZ3VtZW50Cj4gdHJ5KHByb2QobGlzdCgpKSkKRXJyb3IgaW4gcHJvZChsaXN0KCkpIDogaW52YWxpZCAndHlwZScgKGxpc3QpIG9mIGFyZ3VtZW50Cj4gdHJ5KG1pbihyYXcoKSkpCkVycm9yIGluIG1pbihyYXcoKSkgOiBpbnZhbGlkICd0eXBlJyAocmF3KSBvZiBhcmd1bWVudAo+IHRyeShtYXgocmF3KCkpKQpFcnJvciBpbiBtYXgocmF3KCkpIDogaW52YWxpZCAndHlwZScgKHJhdykgb2YgYXJndW1lbnQKPiB0cnkoc3VtKHJhdygpKSkKRXJyb3IgaW4gc3VtKHJhdygpKSA6IGludmFsaWQgJ3R5cGUnIChyYXcpIG9mIGFyZ3VtZW50Cj4gdHJ5KHByb2QocmF3KCkpKQpFcnJvciBpbiBwcm9kKHJhdygpKSA6IGludmFsaWQgJ3R5cGUnIChyYXcpIG9mIGFyZ3VtZW50Cj4gIyMgSW5mLCAtSW5mLCBsaXN0KE5VTEwpIGV0YyBpbiAyLjIuMQo+IAo+IHIgPC0gaGlzdChybm9ybSgxMDApLCBwbG90ID0gRkFMU0UsIGJyZWFrcyA9IDEyLAorICAgICAgICAgICAjIyBhcmd1bWVudHMgd2hpY2ggZG9uJ3QgbWFrZSBzZW5zZSBmb3IgcGxvdD1GQUxTRSAtIGdpdmUgYSB3YXJuaW5nOgorICAgICAgICAgICB4bGFiID0gIk4oMCwxKSIsIGNvbCA9ICJibHVlIikKV2FybmluZyBtZXNzYWdlOgpJbiBoaXN0LmRlZmF1bHQocm5vcm0oMTAwKSwgcGxvdCA9IEZBTFNFLCBicmVha3MgPSAxMiwgeGxhYiA9ICJOKDAsMSkiLCAgOgogIGFyZ3VtZW50cyAnY29sJywgJ3hsYWInIGFyZSBub3QgbWFkZSB1c2Ugb2YKPiAjIyBnYXZlIG5vIHdhcm5pbmcgaW4gMi4zLjAgYW5kIGVhcmxpZXIKPiAKPiAKPiAjIyByYmluZC5kYXRhLmZyYW1lIG9uIHBlcm11dGVkIGNvbHMgKFBSIzg4NjgpCj4gZDEgPC0gZGF0YS5mcmFtZSh4PTE6MTAsIHk9bGV0dGVyc1sxOjEwXSwgej0xOjEwKQo+IGQyIDwtIGRhdGEuZnJhbWUoeT1MRVRURVJTWzE6NV0sIHo9NToxLCB4PTc6MTEpCj4gcmJpbmQoZDEsIGQyKQogICAgeCB5ICB6CjEgICAxIGEgIDEKMiAgIDIgYiAgMgozICAgMyBjICAzCjQgICA0IGQgIDQKNSAgIDUgZSAgNQo2ICAgNiBmICA2CjcgICA3IGcgIDcKOCAgIDggaCAgOAo5ICAgOSBpICA5CjEwIDEwIGogMTAKMTEgIDcgQSAgNQoxMiAgOCBCICA0CjEzICA5IEMgIDMKMTQgMTAgRCAgMgoxNSAxMSBFICAxCj4gIyBnb3QgZmFjdG9yIHkgIHdyb25nIGluIDIuMy4wCj4gIyBhbmQgZmFpbGVkIHdpdGggZHVwbGljYXRlZCBjb2wgbmFtZXMuCj4gZDEgPC0gZGF0YS5mcmFtZSh4PTE6MiwgeT01OjYsIHg9ODo5LCBjaGVjay5uYW1lcz1GQUxTRSkKPiBkMiA8LSBkYXRhLmZyYW1lKHg9Mzo0LCB4PS0oMToyKSwgeT04OjksIGNoZWNrLm5hbWVzPUZBTFNFKQo+IHJiaW5kKGQxLCBkMikKICB4IHkgIHgKMSAxIDUgIDgKMiAyIDYgIDkKMyAzIDggLTEKNCA0IDkgLTIKPiAjIyBjb3JydXB0IGluIDIuMy4wCj4gCj4gCj4gIyMgc29ydC5saXN0IG9uIGNvbXBsZXggdmVjdG9ycyB3YXMgdW5pbXBsZW1lbnRlZCBwcmlvciB0byAyLjQuMAo+IHggPC0gcmVwKDI6MSwgYygyLCAyKSkgKyAxaSpjKDQsIDEsIDIsIDMpCj4gKG8gPC0gc29ydC5saXN0KHgpKQpbMV0gMyA0IDIgMQo+IHhbb10KWzFdIDErMmkgMSszaSAyKzFpIDIrNGkKPiBzb3J0KHgpICAjIGZvciBhIGNyb3NzLWNoZWNrClsxXSAxKzJpIDErM2kgMisxaSAyKzRpCj4gIyMKPiAKPiAKPiAjIyBQUiM5MDQ0IHdyaXRlLnRhYmxlKHF1b3RlPVRSVUUsIHJvdy5uYW1lcz1GQUxTRSkgZGlkIG5vdCBxdW90ZSBjb2x1bW4gbmFtZXMKPiBtIDwtIG1hdHJpeCgxOjksIG5yb3c9MywgZGltbmFtZXM9bGlzdChjKCJBIiwiQiIsIkMiKSwgIGMoIkkiLCJJSSIsIklJSSIpKSkKPiB3cml0ZS50YWJsZShtKQoiSSIgIklJIiAiSUlJIgoiQSIgMSA0IDcKIkIiIDIgNSA4CiJDIiAzIDYgOQo+IHdyaXRlLnRhYmxlKG0sIGNvbC5uYW1lcz1GQUxTRSkKIkEiIDEgNCA3CiJCIiAyIDUgOAoiQyIgMyA2IDkKPiB3cml0ZS50YWJsZShtLCByb3cubmFtZXM9RkFMU0UpCiJJIiAiSUkiICJJSUkiCjEgNCA3CjIgNSA4CjMgNiA5Cj4gIyB3cm9uZyA8IDIuMy4xIHBhdGNoZWQuCj4gd3JpdGUudGFibGUobSwgcXVvdGU9RkFMU0UpCkkgSUkgSUlJCkEgMSA0IDcKQiAyIDUgOApDIDMgNiA5Cj4gd3JpdGUudGFibGUobSwgY29sLm5hbWVzPUZBTFNFLCBxdW90ZT1GQUxTRSkKQSAxIDQgNwpCIDIgNSA4CkMgMyA2IDkKPiB3cml0ZS50YWJsZShtLCByb3cubmFtZXM9RkFMU0UsIHF1b3RlPUZBTFNFKQpJIElJIElJSQoxIDQgNwoyIDUgOAozIDYgOQo+IGQgPC0gYXMuZGF0YS5mcmFtZShtKQo+IHdyaXRlLnRhYmxlKGQpCiJJIiAiSUkiICJJSUkiCiJBIiAxIDQgNwoiQiIgMiA1IDgKIkMiIDMgNiA5Cj4gd3JpdGUudGFibGUoZCwgY29sLm5hbWVzPUZBTFNFKQoiQSIgMSA0IDcKIkIiIDIgNSA4CiJDIiAzIDYgOQo+IHdyaXRlLnRhYmxlKGQsIHJvdy5uYW1lcz1GQUxTRSkKIkkiICJJSSIgIklJSSIKMSA0IDcKMiA1IDgKMyA2IDkKPiB3cml0ZS50YWJsZShkLCBxdW90ZT1GQUxTRSkKSSBJSSBJSUkKQSAxIDQgNwpCIDIgNSA4CkMgMyA2IDkKPiB3cml0ZS50YWJsZShkLCBjb2wubmFtZXM9RkFMU0UsIHF1b3RlPUZBTFNFKQpBIDEgNCA3CkIgMiA1IDgKQyAzIDYgOQo+IHdyaXRlLnRhYmxlKGQsIHJvdy5uYW1lcz1GQUxTRSwgcXVvdGU9RkFMU0UpCkkgSUkgSUlJCjEgNCA3CjIgNSA4CjMgNiA5Cj4gd3JpdGUudGFibGUobSwgcXVvdGU9bnVtZXJpYygwKSkgIyBub3QgdGhlIHNhbWUgYXMgRkFMU0UKIkkiICJJSSIgIklJSSIKIkEiIDEgNCA3CiJCIiAyIDUgOAoiQyIgMyA2IDkKPiAjIwo+IAo+IAo+ICMjIHJlbW92aW5nIHZhcmlhYmxlIGZyb20gYmFzZWVudgo+IHRyeShyZW1vdmUoImxzIiwgZW52aXI9YmFzZWVudigpKSkKRXJyb3IgaW4gcmVtb3ZlKCJscyIsIGVudmlyID0gYmFzZWVudigpKSA6IAogIGNhbm5vdCByZW1vdmUgdmFyaWFibGVzIGZyb20gdGhlIGJhc2UgZW52aXJvbm1lbnQKPiB0cnkocmVtb3ZlKCJscyIsIGVudmlyPWFzTmFtZXNwYWNlKCJiYXNlIikpKQpFcnJvciBpbiByZW1vdmUoImxzIiwgZW52aXIgPSBhc05hbWVzcGFjZSgiYmFzZSIpKSA6IAogIGNhbm5vdCByZW1vdmUgdmFyaWFibGVzIGZyb20gYmFzZSBuYW1lc3BhY2UKPiAjIyBubyBtZXNzYWdlIGluIDIuMy4xCj4gCj4gCj4gIyMgdGVzdHMgb2YgYmVoYXZpb3VyIG9mIGZhY3RvcnMKPiAoeCA8LSBmYWN0b3IoTEVUVEVSU1sxOjVdKVsyOjRdKQpbMV0gQiBDIEQKTGV2ZWxzOiBBIEIgQyBEIEUKPiB4WzJdClsxXSBDCkxldmVsczogQSBCIEMgRCBFCj4geFtbMl1dClsxXSBDCkxldmVsczogQSBCIEMgRCBFCj4gc3RvcGlmbm90KGlkZW50aWNhbCh4WzJdLCB4W1syXV0pKQo+IGFzLmxpc3QoeCkKW1sxXV0KWzFdIEIKTGV2ZWxzOiBBIEIgQyBEIEUKCltbMl1dClsxXSBDCkxldmVsczogQSBCIEMgRCBFCgpbWzNdXQpbMV0gRApMZXZlbHM6IEEgQiBDIEQgRQoKPiAoeHggPC0gdW5saXN0KGFzLmxpc3QoeCkpKQpbMV0gQiBDIEQKTGV2ZWxzOiBBIEIgQyBEIEUKPiBzdG9waWZub3QoaWRlbnRpY2FsKHgsIHh4KSkKPiBhcy52ZWN0b3IoeCwgImxpc3QiKQpbWzFdXQpbMV0gQgpMZXZlbHM6IEEgQiBDIEQgRQoKW1syXV0KWzFdIEMKTGV2ZWxzOiBBIEIgQyBEIEUKCltbM11dClsxXSBECkxldmVsczogQSBCIEMgRCBFCgo+IChzeCA8LSBzYXBwbHkoeCwgZnVuY3Rpb24oLikuKSkKWzFdIEIgQyBECkxldmVsczogQSBCIEMgRCBFCj4gc3RvcGlmbm90KGlkZW50aWNhbCh4LCBzeCkpCj4gIyMgY2hhbmdlZCBpbiAyLjQuMAo+IAo+IAo+ICMjIGFzLmNoYXJhY3RlciBvbiBhIGZhY3RvciB3aXRoICJOQSIgbGV2ZWwKPiBhcy5jaGFyYWN0ZXIoYXMuZmFjdG9yKGMoIkFCIiwgIkNEIiwgTkEpKSkKWzFdICJBQiIgIkNEIiBOQSAgCj4gYXMuY2hhcmFjdGVyKGFzLmZhY3RvcihjKCJOQSIsICJDRCIsIE5BKSkpICAjIHVzZSA8TkE+IGlzIDIuMy54ClsxXSAiTkEiICJDRCIgTkEgIAo+IGFzLnZlY3Rvcihhcy5mYWN0b3IoYygiTkEiLCAiQ0QiLCBOQSkpKSAgICAgIyBidXQgdGhpcyBkaWQgbm90ClsxXSAiTkEiICJDRCIgTkEgIAo+ICMjIHVzZWQgPE5BPiBiZWZvcmUKPiAKPiAKPiAjIyBbIG9uIGEgemVyby1jb2x1bW4gZGF0YSBmcmFtZSwgbmFtZXMgb2Ygc3VjaAo+IGRhdGEuZnJhbWUoKVtGQUxTRV0KZGF0YSBmcmFtZSB3aXRoIDAgY29sdW1ucyBhbmQgMCByb3dzCj4gbmFtZXMoZGF0YS5mcmFtZSgpKQpjaGFyYWN0ZXIoMCkKPiAjIGdhdmUgTlVMTCBuYW1lcyBhbmQgaGVuY2Ugc3B1cmlvdXMgd2FybmluZy4KPiAKPiAKPiAjIyByZXNpZHVhbHMgZnJvbSB6ZXJvLXdlaWdodCBnbG0gZml0cwo+IGQuQUQgPC0gZGF0YS5mcmFtZSh0cmVhdG1lbnQgPSBnbCgzLDMpLCBvdXRjb21lID0gZ2woMywxLDkpLAorICAgICAgICAgICAgICAgICAgICBjb3VudHMgPSBjKDE4LDE3LDE1LDIwLDEwLDIwLDI1LDEzLDEyKSkKPiBmaXQgPC0gZ2xtKGNvdW50cyB+IG91dGNvbWUgKyB0cmVhdG1lbnQsIGZhbWlseSA9IHBvaXNzb24sCisgICAgICAgICAgICBkYXRhID0gZC5BRCwgd2VpZ2h0cyA9IGMoMCwgcmVwKDEsOCkpKQo+IHJlc2lkdWFscyhmaXQsIHR5cGU9IndvcmtpbmciKSAjIGZpcnN0IHdhcyBOQSA8IDIuNC4wCiAgICAgICAgICAxICAgICAgICAgICAyICAgICAgICAgICAzICAgICAgICAgICA0ICAgICAgICAgICA1ICAgICAgICAgICA2IAotMC4zMTI1MDAwMCAgMC4xNTU0Njg3NSAtMC4xMzIzMTM4MyAtMC4xMTExMTExMSAtMC4yMDkwOTA5MSAgMC4zNDYyMjgyNCAKICAgICAgICAgIDcgICAgICAgICAgIDggICAgICAgICAgIDkgCiAwLjExMTExMTExICAwLjAyODE4MTgyIC0wLjE5MjI2MzA2IAo+ICMjIHdvcmtpbmcgcmVzaWR1YWxzIHdlcmUgTkEgZm9yIHplcm8td2VpZ2h0IGNhc2VzLgo+IGZpdDIgPC0gZ2xtKGNvdW50cyB+IG91dGNvbWUgKyB0cmVhdG1lbnQsIGZhbWlseSA9IHBvaXNzb24sCisgICAgICAgICAgICBkYXRhID0gZC5BRCwgd2VpZ2h0cyA9IGMoMCwgcmVwKDEsOCkpLCB5ID0gRkFMU0UpCj4gZm9yKHogaW4gYygicmVzcG9uc2UiLCAid29ya2luZyIsICJkZXZpYW5jZSIsICJwZWFyc29uIikpCisgICAgIHN0b3BpZm5vdChhbGwuZXF1YWwocmVzaWR1YWxzKGZpdCwgdHlwZT16KSwgcmVzaWR1YWxzKGZpdDIsIHR5cGU9eiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSAxLCB0b2xlcmFuY2UgPSAxZS0xMCkpCj4gCj4gIyMgYXBwbHkgb24gYXJyYXlzIHdpdGggemVybyBleHRlbnRzCj4gIyMgUm9iaW4gSGFua2luLCBSLWhlbHAsIDIwMDYtMDItMTMKPiBBIDwtIGFycmF5KDAsIGMoMywgMCwgNCkpCj4gZGltbmFtZXMoQSkgPC0gbGlzdChEMSA9IGxldHRlcnNbMTozXSwgRDIgPSBOVUxMLCBEMyA9IExFVFRFUlNbMTo0XSkKPiBmIDwtIGZ1bmN0aW9uKHgpIDUKPiBhcHBseShBLCAxOjIsIGYpCiAgIEQyCkQxIAogIGEKICBiCiAgYwo+IGFwcGx5KEEsIDEsIGYpCmEgYiBjIAo1IDUgNSAKPiBhcHBseShBLCAyLCBmKQpudW1lcmljKDApCj4gIyMgZHJvcHBlZCBkaW1zIGluIDIuMy4xCj4gCj4gCj4gIyMgcHJpbnQgYSBmYWN0b3Igd2l0aCBuYW1lcwo+IHN0cnVjdHVyZShmYWN0b3IoMTo0KSwgbmFtZXMgPSBsZXR0ZXJzWzE6NF0pCmEgYiBjIGQgCjEgMiAzIDQgCkxldmVsczogMSAyIDMgNAo+ICMjIGRyb3BwZWQgbmFtZXMgPCAyLjQuMAo+IAo+IAo+ICMjIHNvbWUgdGVzdHMgb2YgZmFjdG9yIG1hdHJpY2VzCj4gQSA8LSBmYWN0b3IoNzoxMikKPiBkaW0oQSkgPC0gYygyLCAzKQo+IEEKICAgICBbLDFdIFssMl0gWywzXQpbMSxdIDcgICAgOSAgICAxMSAgClsyLF0gOCAgICAxMCAgIDEyICAKTGV2ZWxzOiA3IDggOSAxMCAxMSAxMgo+IHN0cihBKQogRmFjdG9yWzE6MiwgMTozXSB3LyA2IGxldmVscyAiNyIsIjgiLCI5IiwiMTAiLC4uOiAxIDIgMyA0IDUgNgo+IEFbLCAxOjJdCiAgICAgWywxXSBbLDJdClsxLF0gNyAgICA5ICAgClsyLF0gOCAgICAxMCAgCkxldmVsczogNyA4IDkgMTAgMTEgMTIKPiBBWywgMToyLCBkcm9wPVRSVUVdClsxXSA3ICA4ICA5ICAxMApMZXZlbHM6IDcgOCA5IDEwCj4gQVsxLDFdIDwtICI5Igo+IEEKICAgICBbLDFdIFssMl0gWywzXQpbMSxdIDkgICAgOSAgICAxMSAgClsyLF0gOCAgICAxMCAgIDEyICAKTGV2ZWxzOiA3IDggOSAxMCAxMSAxMgo+ICMjIG1pc2JlaGF2ZWQgPCAyLjQuMAo+IAo+IAo+ICMjIFtkcHFyXXQgd2l0aCB2ZWN0b3IgbmNwCj4gbmMgPC0gYygwLCAwLjAwMDEsIDEpCj4gZHQoMS44LCAxMCwgbmMpClsxXSAwLjA4MzExNjM5IDAuMDgzMTI5NzIgMC4yNjY1MDM5Mwo+IHB0KDEuOCwgMTAsIG5jKQpbMV0gMC45NDg5NzM5IDAuOTQ4OTY0MSAwLjc1ODQyNjcKPiBxdCgwLjk1LCAxMCwgbmMpClsxXSAxLjgxMjQ2MSAxLjgxMjU3OSAzLjA0MTc0Mgo+ICMjIGdhdmUgd2FybmluZ3MgaW4gMi4zLjEsIHNob3J0IGFuc3dlciBmb3IgcXQuCj4gZHQoMS44LCAxMCwgLW5jWy0xXSkKWzFdIDAuMDgzMTAzMDYgMC4wMTA3NDYyOQo+IHB0KDEuOCwgMTAsIC1uY1stMV0pClsxXSAwLjk0ODk4MzcgMC45OTQ5NDcyCj4gcXQoMC45NSwgMTAsIC1uY1stMV0pClsxXSAxLjgxMjM0MjkgMC42Nzk3OTAyCj4gIyMgcXQgaW4gMi4zLjEgZGlkIG5vdCBhbGxvdyBuZWdhdGl2ZSBuY3AuCj4gCj4gCj4gIyMgbWVyZ2UoKSB1c2VkIHRvIGluc2VydCByb3cgbmFtZXMgYXMgZmFjdG9yLCBub3QgY2hhcmFjdGVyLCBzbwo+ICMjIHNvcnRpbmcgd2FzIHVuZXhwZWN0ZWQuCj4gQSA8LSBkYXRhLmZyYW1lKGEgPSAxOjQpCj4gcm93Lm5hbWVzKEEpIDwtIGMoIjIwMDItMTEtMTUiLCAiMjAwMi0xMi0xNSIsICIyMDAzLTAxLTE1IiwgIjIwMDMtMDItMTUiKQo+IEIgPC0gZGF0YS5mcmFtZShiID0gMTo0KQo+IHJvdy5uYW1lcyhCKSA8LSBjKCIyMDAyLTA5LTE1IiwgIjIwMDItMTAtMTUiLCAiMjAwMi0xMS0xNSIsICIyMDAyLTEyLTE1IikKPiBtZXJnZShBLCBCLCBieT0wLCBhbGw9VFJVRSkKICAgUm93Lm5hbWVzICBhICBiCjEgMjAwMi0wOS0xNSBOQSAgMQoyIDIwMDItMTAtMTUgTkEgIDIKMyAyMDAyLTExLTE1ICAxICAzCjQgMjAwMi0xMi0xNSAgMiAgNAo1IDIwMDMtMDEtMTUgIDMgTkEKNiAyMDAzLTAyLTE1ICA0IE5BCj4gCj4gCj4gIyMgYXNzaWduaW5nIHRvIGEgbGlzdCBsb29wIGluZGV4IGNvdWxkIGFsdGVyIHRoZSBpbmRleCAoUFIjOTIxNikKPiBMIDwtIGxpc3QoYSA9IGxpc3QodHh0ID0gIm9yaWdpbmFsIHZhbHVlIikpCj4gZiA8LSBmdW5jdGlvbihMTCkgeworICAgICBmb3IgKGxsIGluIExMKSBsbCR0eHQgPC0gImNoYW5nZWQgaW4gZiIKKyAgICAgTEwKKyB9Cj4gZihMKQokYQokYSR0eHQKWzFdICJvcmlnaW5hbCB2YWx1ZSIKCgo+IEwKJGEKJGEkdHh0ClsxXSAib3JpZ2luYWwgdmFsdWUiCgoKPiAjIyBib3RoIHdlcmUgY2hhbmdlZCA8IDIuNC4wCj4gCj4gCj4gIyMgc3VtbWFyeS5tbG0gbWlzYmVoYXZlZCB3aXRoIG5hLmFjdGlvbiA9IG5hLmV4Y2x1ZGUKPiBuIDwtIDUwCj4geCA8LSBydW5pZihuPW4pCj4geTEgPC0gMiAqIHggKyBybm9ybShuPW4pCj4geTIgPC0gNSAqIHggKyBybm9ybShuPW4pCj4geTJbc2FtcGxlKDE6biwgc2l6ZT01KV0gPC0gTkEKPiB5IDwtIGNiaW5kKHkxLCB5MikKPiBmaXQgPC0gbG0oeSB+IDEsIG5hLmFjdGlvbj0ibmEuZXhjbHVkZSIpCj4gc3VtbWFyeShmaXQpClJlc3BvbnNlIHkxIDoKCkNhbGw6CmxtKGZvcm11bGEgPSB5MSB+IDEsIG5hLmFjdGlvbiA9ICJuYS5leGNsdWRlIikKClJlc2lkdWFsczoKICAgIE1pbiAgICAgIDFRICBNZWRpYW4gICAgICAzUSAgICAgTWF4IAotMy4yMzU5IC0wLjg3NjYgIDAuMjMzOCAgMC45OTQ0ICAyLjU5MDUgCgpDb2VmZmljaWVudHM6CiAgICAgICAgICAgIEVzdGltYXRlIFN0ZC4gRXJyb3IgdCB2YWx1ZSBQcig+fHR8KSAgICAKKEludGVyY2VwdCkgICAxLjE0MTkgICAgIDAuMTk2NiAgIDUuODA4IDYuNDdlLTA3ICoqKgotLS0KU2lnbmlmLiBjb2RlczogIDAgJyoqKicgMC4wMDEgJyoqJyAwLjAxICcqJyAwLjA1ICcuJyAwLjEgJyAnIDEKClJlc2lkdWFsIHN0YW5kYXJkIGVycm9yOiAxLjMxOSBvbiA0NCBkZWdyZWVzIG9mIGZyZWVkb20KICAoNSBvYnNlcnZhdGlvbnMgZGVsZXRlZCBkdWUgdG8gbWlzc2luZ25lc3MpCgoKUmVzcG9uc2UgeTIgOgoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkyIH4gMSwgbmEuYWN0aW9uID0gIm5hLmV4Y2x1ZGUiKQoKUmVzaWR1YWxzOgogICAgTWluICAgICAgMVEgIE1lZGlhbiAgICAgIDNRICAgICBNYXggCi00LjI4MjIgLTEuMjU0OCAgMC40MzY0ICAxLjIxODUgIDMuODU3NSAKCkNvZWZmaWNpZW50czoKICAgICAgICAgICAgRXN0aW1hdGUgU3RkLiBFcnJvciB0IHZhbHVlIFByKD58dHwpICAgIAooSW50ZXJjZXB0KSAgIDIuNzA5OCAgICAgMC4yNzk4ICAgOS42ODUgMS43N2UtMTIgKioqCi0tLQpTaWduaWYuIGNvZGVzOiAgMCAnKioqJyAwLjAwMSAnKionIDAuMDEgJyonIDAuMDUgJy4nIDAuMSAnICcgMQoKUmVzaWR1YWwgc3RhbmRhcmQgZXJyb3I6IDEuODc3IG9uIDQ0IGRlZ3JlZXMgb2YgZnJlZWRvbQogICg1IG9ic2VydmF0aW9ucyBkZWxldGVkIGR1ZSB0byBtaXNzaW5nbmVzcykKCgo+ICMjIGZhaWxlZCA8IDIuNC4wCj4gCj4gUk5Ha2luZCgiZGVmYXVsdCIsImRlZmF1bHQiKSMjIHJlc2V0IHRvIGRlZmF1bHQgLSBlYXNlICBSIGNvcmUKPiAKPiAjIyBwcmV0dHlOdW0gbG9zdCBhdHRyaWJ1dGVzIChQUiM4Njk1KQo+IGZvcm1hdChtYXRyaXgoMToxNiwgNCksIGJpZy5tYXJrID0gIiwiKQogICAgIFssMV0gWywyXSBbLDNdIFssNF0KWzEsXSAiIDEiICIgNSIgIiA5IiAiMTMiClsyLF0gIiAyIiAiIDYiICIxMCIgIjE0IgpbMyxdICIgMyIgIiA3IiAiMTEiICIxNSIKWzQsXSAiIDQiICIgOCIgIjEyIiAiMTYiCj4gIyMgd2FzIGEgdmVjdG9yIDwgMi40LjAKPiAKPiAKPiAjIyBwcmludGluZyBvZiBjb21wbGV4IG51bWJlcnMgb2YgdmVyeSBkaWZmZXJlbnQgbWFnbml0dWRlcwo+IDFlMTAwICArIDFlNDRpClsxXSAxZSsxMDArMGUrMDBpCj4gMWUxMDAgKyBwaSoxaSoxMF4oYygtMTAwLDAsMSw0MCwxMDApKQpbMV0gMWUrMTAwKyAwLjAwMDAwMGUrMDBpIDFlKzEwMCsgMC4wMDAwMDBlKzAwaSAxZSsxMDArIDAuMDAwMDAwZSswMGkKWzRdIDFlKzEwMCsgMC4wMDAwMDBlKzAwaSAxZSsxMDArMy4xNDE1OTNlKzEwMGkKPiAjIyBmaXJzdCB3YXMgc2lsbHksIHNlY29uZCBub3Qgcm91bmRlZCBjb3JyZWN0bHkgaW4gMi4yLjAgLSAyLjMuMQo+ICMjIFdlIGRvbid0IGdldCB0aGVtIGxpbmluZyB1cCwgYnV0IHRoYXQgaXMgYSBwcmludGYgaXNzdWUKPiAjIyB0aGF0IG9ubHkgaGFwcGVucyBmb3IgdmVyeSBsYXJnZSBjb21wbGV4IG5vcy4KPiAKPiAKPiAjIyMgZW5kIG9mIHRlc3RzIGFkZGVkIGluIDIuNC4wICMjIwo+IAo+IAo+ICMjIFBsYXRmb3JtLXNwZWNpZmljIGJlaGF2aW91ciBpbiBsb3dlc3MgcmVwb3J0ZWQgdG8gUi1oZWxwCj4gIyMgMjAwNi0xMC0xMiBieSBGcmFuayBIYXJyZWxsCj4geCA8LSBjKDAsNyw4LDE0LDE1LDEyMCwyNDIpCj4geSA8LSBjKDEyMiwxMjgsMTMwLDE1OCwxMTAsMTEwLDkyKQo+IGxvd2Vzcyh4LCB5LCBpdGVyPTApCiR4ClsxXSAgIDAgICA3ICAgOCAgMTQgIDE1IDEyMCAyNDIKCiR5ClsxXSAxMjEuOTU3MzUgMTI4LjAwMDAwIDEzMS4wNjY0OSAxMzYuOTM2NzMgMTI2Ljc2NDY3IDEwOS45OTkwMyAgOTIuMDAwMDMKCj4gbG93ZXNzKHgsIHkpCiR4ClsxXSAgIDAgICA3ICAgOCAgMTQgIDE1IDEyMCAyNDIKCiR5ClsxXSAxMjIgMTI4IDEyOCAxNTggMTEwIDExMCAgOTIKCj4gIyMgTUFEIG9mIGl0ZXJhdGVkIHJlc2lkdWFscyB3YXMgemVybywgYW5kIHJlc3VsdCBkZXBlbmRlZCBvbiB0aGUgcGxhdGZvcm0uCj4gCj4gCj4gIyMgUFIjOTI2MzogcHJvYmxlbXMgd2l0aCBSX1Zpc2libGUKPiBhIDwtIGxpc3QoYj01KQo+IGFbWyh0PC0nYicpXV0KWzFdIDUKPiB4IDwtIG1hdHJpeCg1Oi02LCAzKQo+IHhbMiwgaW52aXNpYmxlKDMpXQpbMV0gLTIKPiAjIyBib3RoIGludmlzaWJsZSBpbiAyLjQuMAo+IAo+IAo+ICMjIyBlbmQgb2YgdGVzdHMgYWRkZWQgaW4gMi40LjEgIyMjCj4gCj4gCj4gIyMgdGVzdHMgb2YgZGVwYXJzaW5nCj4geCA8LWxpc3QoYSA9IE5BLCBiID0gYXMuaW50ZWdlcihOQSksIGM9MCtOQSwgZD0waStOQSwKKyAgICAgICAgICBlID0gMSwgZiA9IDE6MSwgZyA9IDE6MywgaCA9IGMoTkEsIDE6MyksCisgICAgICAgICAgaSA9IGFzLmNoYXJhY3RlcihOQSksIGogPSBjKCJmb28iLCBOQSwgImJhciIpCisgICAgICAgICAgKQo+IGRwdXQoeCwgY29udHJvbD1OVUxMKQpsaXN0KE5BLCBOQSwgTkEsIE5BLCAxLCAxLCAxOjMsIGMoTkEsIDEsIDIsIDMpLCBOQSwgYygiZm9vIiwgCk5BLCAiYmFyIikpCj4gZHB1dCh4LCBjb250cm9sPSJrZWVwSW50ZWdlciIpCmxpc3QoTkEsIE5BX2ludGVnZXJfLCBOQSwgTkEsIDEsIDFMLCAxOjMsIGMoTkEsIDFMLCAyTCwgM0wpLCAKICAgIE5BLCBjKCJmb28iLCBOQSwgImJhciIpKQo+IGRwdXQoeCwgY29udHJvbD0ia2VlcE5BIikKbGlzdChOQSwgTkFfaW50ZWdlcl8sIE5BX3JlYWxfLCBOQV9jb21wbGV4XywgMSwgMSwgMTozLCBjKE5BLCAKMSwgMiwgMyksIE5BX2NoYXJhY3Rlcl8sIGMoImZvbyIsIE5BLCAiYmFyIikpCj4gZHB1dCh4KQpsaXN0KGEgPSBOQSwgYiA9IE5BX2ludGVnZXJfLCBjID0gTkFfcmVhbF8sIGQgPSBOQV9jb21wbGV4XywgCiAgICBlID0gMSwgZiA9IDFMLCBnID0gMTozLCBoID0gYyhOQSwgMUwsIDJMLCAzTCksIGkgPSBOQV9jaGFyYWN0ZXJfLCAKICAgIGogPSBjKCJmb28iLCBOQSwgImJhciIpKQo+IGRwdXQoeCwgY29udHJvbD0iYWxsIikKbGlzdChhID0gTkEsIGIgPSBOQV9pbnRlZ2VyXywgYyA9IE5BX3JlYWxfLCBkID0gTkFfY29tcGxleF8sIAogICAgZSA9IDEsIGYgPSAxTCwgZyA9IDE6MywgaCA9IGMoTkEsIDFMLCAyTCwgM0wpLCBpID0gTkFfY2hhcmFjdGVyXywgCiAgICBqID0gYygiZm9vIiwgTkEsICJiYXIiKSkKPiBkcHV0KHgsIGNvbnRyb2w9YygiYWxsIiwgIlNfY29tcGF0aWJsZSIpKQpsaXN0KGEgPSBOQSwgYiA9IGFzLmludGVnZXIoTkEpLCBjID0gYXMuZG91YmxlKE5BKSwgZCA9IGFzLmNvbXBsZXgoTkEpLCAKICAgIGUgPSAxLiwgZiA9IGFzLmludGVnZXIoMSksIGcgPSAxOjMsIGggPSBhcy5pbnRlZ2VyKGMoTkEsIAogICAgMSwgMiwgMykpLCBpID0gYXMuY2hhcmFjdGVyKE5BKSwgaiA9IGMoImZvbyIsIE5BLCAiYmFyIikpCj4gdG1wIDwtIHRlbXBmaWxlKCkKPiBkcHV0KHgsIHRtcCwgY29udHJvbD0iYWxsIikKPiBzdG9waWZub3QoaWRlbnRpY2FsKGRnZXQodG1wKSwgeCkpCj4gZHB1dCh4LCB0bXAsIGNvbnRyb2w9YygiYWxsIiwgIlNfY29tcGF0aWJsZSIpKQo+IHN0b3BpZm5vdChpZGVudGljYWwoZGdldCh0bXApLCB4KSkKPiB1bmxpbmsodG1wKQo+ICMjIGNoYW5nZXMgaW4gMi41LjAKPiAKPiAKPiAjIyBnaXZlIGJldHRlciBlcnJvciBtZXNzYWdlIGZvciBubHMgd2l0aCBubyBwYXJhbWV0ZXJzCj4gIyMgSXZvIFdlbGNoLCBSLWhlbHAsIDIwMDYtMTItMjMuCj4gZCA8LSBkYXRhLmZyYW1lKHk9IHJ1bmlmKDEwKSwgeD1ydW5pZigxMCkpCj4gdHJ5KG5scyh5IH4gMS8oMSt4KSwgZGF0YSA9IGQsIHN0YXJ0PWxpc3QoeD0wLjUseT0wLjUpLCB0cmFjZT1UUlVFKSkKRXJyb3IgaW4gbmxzKHkgfiAxLygxICsgeCksIGRhdGEgPSBkLCBzdGFydCA9IGxpc3QoeCA9IDAuNSwgeSA9IDAuNSksICA6IAogIG5vIHBhcmFtZXRlcnMgdG8gZml0Cj4gIyMgY2hhbmdlZCBpbiAyLjQuMSBwYXRjaGVkCj4gCj4gCj4gIyMgY3V0KGJyZWFrcz0ieWVhcnMiKSwgaW4gcGFydCBQUiM5NDMzCj4gY3V0KGFzLkRhdGUoYygiMjAwMC0wMS0xNyIsIjIwMDEtMDEtMTMiLCIyMDAxLTAxLTIwIikpLCBicmVha3M9InllYXJzIikKWzFdIDIwMDAtMDEtMDEgMjAwMS0wMS0wMSAyMDAxLTAxLTAxCkxldmVsczogMjAwMC0wMS0wMSAyMDAxLTAxLTAxCj4gY3V0KGFzLlBPU0lYY3QoYygiMjAwMC0wMS0xNyIsIjIwMDEtMDEtMTMiLCIyMDAxLTAxLTIwIikpLCBicmVha3M9InllYXJzIikKWzFdIDIwMDAtMDEtMDEgMjAwMS0wMS0wMSAyMDAxLTAxLTAxCkxldmVsczogMjAwMC0wMS0wMSAyMDAxLTAxLTAxCj4gIyMgZGlkIG5vdCBnZXQgZGF5IDAxIDwgMi40LjEgcGF0Y2hlZAo+IAo+IAo+ICMjIG1hbmlwdWxhdGluZyByb3duYW1lczogcHJvYmxlbXMgaW4gcHJlLTIuNS4wCj4gQSA8LSBkYXRhLmZyYW1lKGE9Y2hhcmFjdGVyKDApKQo+IHRyeShyb3cubmFtZXMoQSkgPC0gMToxMCkgIyBzdWNjZWVkZWQgaW4gRGVjIDIwMDYKRXJyb3IgaW4gYC5yb3dOYW1lc0RGPC1gKHgsIHZhbHVlID0gdmFsdWUpIDogaW52YWxpZCAncm93Lm5hbWVzJyBsZW5ndGgKPiBBIDwtIGxpc3QoYT0xOjMpCj4gY2xhc3MoQSkgPC0gImRhdGEuZnJhbWUiCj4gcm93Lm5hbWVzKEEpIDwtIGxldHRlcnNbMjQ6MjZdICMgZmFpbGVkIGF0IG9uZSBwb2ludCBpbiBEZWMgMjAwNgo+IEEKICBhCnggMQp5IDIKeiAzCj4gIyMKPiAKPiAKPiAjIyBleHRyZW1lIGNhc2VzIGZvciBzdWJzZXR0aW5nIG9mIGRhdGEgZnJhbWVzCj4gdyA8LSB3b21lblsxLCBdCj4gd1tdCiAgaGVpZ2h0IHdlaWdodAoxICAgICA1OCAgICAxMTUKPiB3Wyxkcm9wID0gVFJVRV0KICBoZWlnaHQgd2VpZ2h0CjEgICAgIDU4ICAgIDExNQpXYXJuaW5nIG1lc3NhZ2U6CkluIGBbLmRhdGEuZnJhbWVgKHcsICwgZHJvcCA9IFRSVUUpIDogJ2Ryb3AnIGFyZ3VtZW50IHdpbGwgYmUgaWdub3JlZAo+IHdbMSxdCiAgaGVpZ2h0IHdlaWdodAoxICAgICA1OCAgICAxMTUKPiB3WyxdCiAgaGVpZ2h0IHdlaWdodAoxICAgICA1OCAgICAxMTUKPiB3WzEsICwgZHJvcCA9IEZBTFNFXQogIGhlaWdodCB3ZWlnaHQKMSAgICAgNTggICAgMTE1Cj4gd1ssICwgZHJvcCA9IEZBTFNFXQogIGhlaWdodCB3ZWlnaHQKMSAgICAgNTggICAgMTE1Cj4gd1sxLCAsIGRyb3AgPSBUUlVFXQokaGVpZ2h0ClsxXSA1OAoKJHdlaWdodApbMV0gMTE1Cgo+IHdbLCAsIGRyb3AgPSBUUlVFXQokaGVpZ2h0ClsxXSA1OAoKJHdlaWdodApbMV0gMTE1Cgo+ICMjIHJlZ3Jlc3Npb24gdGVzdDogY29kZSBjaGFuZ2VkIGZvciAyLjUuMAo+IAo+IAo+ICMjIGRhdGEuZnJhbWUoKSB3aXRoIHplcm8gY29sdW1ucyBpZ25vcmVkICdyb3cubmFtZXMnCj4gKHggPC0gZGF0YS5mcmFtZShyb3cubmFtZXM9MTo0KSkKZGF0YSBmcmFtZSB3aXRoIDAgY29sdW1ucyBhbmQgNCByb3dzCj4gbnJvdyh4KQpbMV0gNAo+IHJvdy5uYW1lcyh4KQpbMV0gIjEiICIyIiAiMyIgIjQiCj4gYXR0cih4LCAicm93Lm5hbWVzIikKWzFdIDEgMiAzIDQKPiAjIyBpZ25vcmVkIHByaW9yIHRvIDIuNS4wLgo+IAo+IAo+ICMjIGlkZW50aWNhbCBvbiBkYXRhLmZyYW1lcwo+IGQwIDwtIGQxIDwtIGRhdGEuZnJhbWUoMTo0LCByb3cubmFtZXM9MTo0KQo+IHJvdy5uYW1lcyhkMCkgPC0gTlVMTAo+IGRwdXQoZDApCnN0cnVjdHVyZShsaXN0KFgxLjQgPSAxOjQpLCBjbGFzcyA9ICJkYXRhLmZyYW1lIiwgcm93Lm5hbWVzID0gYyhOQSwgCi00TCkpCj4gZHB1dChkMSkKc3RydWN0dXJlKGxpc3QoWDEuNCA9IDE6NCksIGNsYXNzID0gImRhdGEuZnJhbWUiLCByb3cubmFtZXMgPSBjKE5BLCAKNEwpKQo+IGlkZW50aWNhbChkMCwgZDEpClsxXSBUUlVFCj4gYWxsLmVxdWFsKGQwLCBkMSkKWzFdIFRSVUUKPiByb3cubmFtZXMoZDEpIDwtIGFzLmNoYXJhY3RlcigxOjQpCj4gZHB1dChkMSkKc3RydWN0dXJlKGxpc3QoWDEuNCA9IDE6NCksIGNsYXNzID0gImRhdGEuZnJhbWUiLCByb3cubmFtZXMgPSBjKCIxIiwgCiIyIiwgIjMiLCAiNCIpKQo+IGlkZW50aWNhbChkMCwgZDEpClsxXSBGQUxTRQo+IGFsbC5lcXVhbChkMCwgZDEpClsxXSAiQXR0cmlidXRlczogPCBDb21wb25lbnQgXCJyb3cubmFtZXNcIjogTW9kZXM6IG51bWVyaWMsIGNoYXJhY3RlciA+IiAgICAgICAgICAgICAgClsyXSAiQXR0cmlidXRlczogPCBDb21wb25lbnQgXCJyb3cubmFtZXNcIjogdGFyZ2V0IGlzIG51bWVyaWMsIGN1cnJlbnQgaXMgY2hhcmFjdGVyID4iCj4gIyMgaWRlbnRpY2FsIHVzZWQgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gcHJpb3IgdG8gMi41LjAKPiAKPiAKPiAjIyBhbGwuZXF1YWwKPiAjIGlnbm9yZWQgY2hlY2suYXR0cmlidXRlcyBpbiAyLjQuMQo+IGFsbC5lcXVhbChkYXRhLmZyYW1lKHg9MTo1LCByb3cubmFtZXM9bGV0dGVyc1sxOjVdKSwKKyAgICAgICAgICAgZGF0YS5mcmFtZSh4PTE6NSxyb3cubmFtZXM9TEVUVEVSU1sxOjVdKSwKKyAgICAgICAgICAgY2hlY2suYXR0cmlidXRlcz1GQUxTRSkKWzFdIFRSVUUKPiAjIHRyZWF0ZWQgbG9naWNhbHMgYXMgbnVtZXJpYwo+IGFsbC5lcXVhbChjKFQsIEYsIEYpLCBjKFQsIFQsIEYpKQpbMV0gIjEgZWxlbWVudCBtaXNtYXRjaCIKPiBhbGwuZXF1YWwoYyhULCBULCBGKSwgYyhULCBGLCBGKSkKWzFdICIxIGVsZW1lbnQgbWlzbWF0Y2giCj4gIyBpZ25vcmVkIHJhdzoKPiBhbGwuZXF1YWwoYXMucmF3KDE6MyksIGFzLnJhdygxOjMpKQpbMV0gVFJVRQo+IGFsbC5lcXVhbChhcy5yYXcoMTozKSwgYXMucmF3KDM6MSkpClsxXSAiMiBlbGVtZW50IG1pc21hdGNoZXMiCj4gIyMKPiAKPiAKPiAjIyB0ZXN0cyBvZiBkZXBhcnNpbmcKPiAjIGlmIHdlIHJ1biB0aGlzIGZyb20gc3RkaW4sIHdlIHdpbGwgaGF2ZSBubyBzb3VyY2UsIHNvIGZha2UgaXQKPiBmIDwtIGZ1bmN0aW9uKHgsIHhtICA9IG1heCgxTCwgeCkpIHt4eCA8LSAwTDsgeXkgPC0gTkFfcmVhbF99Cj4gYXR0cihmLCAic3JjcmVmIikgPC0gc3JjcmVmKHNyY2ZpbGVjb3B5KCIiLAorICAgICAiZnVuY3Rpb24oeCwgeG0gID0gbWF4KDFMLCB4KSkge3h4IDwtIDBMOyB5eSA8LSBOQV9yZWFsX30iKSwKKyAgICAgYygxTCwgMUwsIDFMLCA1NkwpKQo+IGYgIyB1c2VzIHRoZSBzb3VyY2UKZnVuY3Rpb24oeCwgeG0gID0gbWF4KDFMLCB4KSkge3h4IDwtIDBMOyB5eSA8LSBOQV9yZWFsX30KPiBkcHV0KGYpICMgbm90IHNvdXJjZQpmdW5jdGlvbiAoeCwgeG0gPSBtYXgoMUwsIHgpKSAKewogICAgeHggPC0gMEwKICAgIHl5IDwtIE5BX3JlYWxfCn0KPiBkcHV0KGYsIGNvbnRyb2w9ImFsbCIpICMgdXNlcyB0aGUgc291cmNlCmZ1bmN0aW9uKHgsIHhtICA9IG1heCgxTCwgeCkpIHt4eCA8LSAwTDsgeXkgPC0gTkFfcmVhbF99Cj4gY2F0KGRlcGFyc2UoZiksIHNlcD0iXG4iKQpmdW5jdGlvbiAoeCwgeG0gPSBtYXgoMUwsIHgpKSAKewogICAgeHggPC0gMEwKICAgIHl5IDwtIE5BX3JlYWxfCn0KPiBkdW1wKCJmIiwgZmlsZT0iIikKZiA8LQpmdW5jdGlvbih4LCB4bSAgPSBtYXgoMUwsIHgpKSB7eHggPC0gMEw7IHl5IDwtIE5BX3JlYWxffQo+ICMgcmVtb3ZlIHRoZSBzb3VyY2UKPiBhdHRyKGYsICJzcmNyZWYiKSA8LSBOVUxMCj4gZgpmdW5jdGlvbiAoeCwgeG0gPSBtYXgoMUwsIHgpKSAKewogICAgeHggPC0gMEwKICAgIHl5IDwtIE5BX3JlYWxfCn0KPiBkcHV0KGYsIGNvbnRyb2w9ImFsbCIpCmZ1bmN0aW9uICh4LCB4bSA9IG1heCgxTCwgeCkpIAp7CiAgICB4eCA8LSAwTAogICAgeXkgPC0gTkFfcmVhbF8KfQo+IGR1bXAoImYiLCBmaWxlPSIiKQpmIDwtCmZ1bmN0aW9uICh4LCB4bSA9IG1heCgxTCwgeCkpIAp7CiAgICB4eCA8LSAwTAogICAgeXkgPC0gTkFfcmVhbF8KfQo+IAo+IGV4cHJlc3Npb24oYmluIDwtIGJpbiArIDFMKQpleHByZXNzaW9uKGJpbiA8LSBiaW4gKyAxTCkKPiAjIyBkaWQgbm90IHByZXNlcnZlIGUuZy4gMUwgYXQgc29tZSBwb2ludCBpbiBwcmUtMi41LjAKPiAKPiAKPiAjIyBOQXMgaW4gc3Vic3RyIHdlcmUgaGFuZGxlZCBhcyBsYXJnZSBuZWdhdGl2ZSBudW1iZXJzCj4geCA8LSAiYWJjZGUiCj4gc3Vic3RyKHgsIDEsIDMpClsxXSAiYWJjIgo+IHN1YnN0cih4LCBOQSwgMSkKWzFdIE5BCj4gc3Vic3RyKHgsIDEsIE5BKQpbMV0gTkEKPiBzdWJzdHIoeCwgTkEsIDMpIDwtICJhYmMiOyB4ClsxXSBOQQo+IHN1YnN0cih4LCAxLCBOQSkgPC0gIkFBIjsgeApbMV0gTkEKPiBzdWJzdHIoeCwgMSwgMikgPC0gTkFfY2hhcmFjdGVyXzsgeApbMV0gTkEKPiAjIyAiIiBvciBubyBjaGFuZ2UgaW4gMi40LjEsIGV4Y2VwdCBsYXN0Cj4gCj4gCj4gIyMgcmVncmVzc2lvbiB0ZXN0cyBmb3IgcG1pbi9wbWF4LCByZXdyaXR0ZW4gaW4gQyBmb3IgMi41LjAKPiAjIE5VTEwgPT0gaW50ZWdlcigwKQo+IHBtaW4oTlVMTCwgaW50ZWdlcigwKSkKaW50ZWdlcigwKQo+IHBtYXgoaW50ZWdlcigwKSwgTlVMTCkKaW50ZWdlcigwKQo+IHBtaW4oTlVMTCwgMTozKSMgbm93IG9rCmludGVnZXIoMCkKPiBwbWF4KHBpLCBOVUxMLCAyOjQpCm51bWVyaWMoMCkKPiAKPiB4IDwtIGMoMSwgTkEsIE5BLCA0LCA1KQo+IHkgPC0gYygyLCBOQSwgNCwgTkEsIDMpCj4gcG1pbih4LCB5KQpbMV0gIDEgTkEgTkEgTkEgIDMKPiBzdG9waWZub3QoaWRlbnRpY2FsKHBtaW4oeCwgeSksIHBtaW4oeSwgeCkpKQo+IHBtaW4oeCwgeSwgbmEucm09VFJVRSkKWzFdICAxIE5BICA0ICA0ICAzCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWluKHgsIHksIG5hLnJtPVRSVUUpLCBwbWluKHksIHgsIG5hLnJtPVRSVUUpKSkKPiBwbWF4KHgsIHkpClsxXSAgMiBOQSBOQSBOQSAgNQo+IHN0b3BpZm5vdChpZGVudGljYWwocG1heCh4LCB5KSwgcG1heCh5LCB4KSkpCj4gcG1heCh4LCB5LCBuYS5ybT1UUlVFKQpbMV0gIDIgTkEgIDQgIDQgIDUKPiBzdG9waWZub3QoaWRlbnRpY2FsKHBtYXgoeCwgeSwgbmEucm09VFJVRSksIHBtYXgoeSwgeCwgbmEucm09VFJVRSkpKQo+IAo+IHggPC0gYXMuaW50ZWdlcih4KTsgeSA8LSBhcy5pbnRlZ2VyKHkpCj4gcG1pbih4LCB5KQpbMV0gIDEgTkEgTkEgTkEgIDMKPiBzdG9waWZub3QoaWRlbnRpY2FsKHBtaW4oeCwgeSksIHBtaW4oeSwgeCkpKQo+IHBtaW4oeCwgeSwgbmEucm09VFJVRSkKWzFdICAxIE5BICA0ICA0ICAzCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWluKHgsIHksIG5hLnJtPVRSVUUpLCBwbWluKHksIHgsIG5hLnJtPVRSVUUpKSkKPiBwbWF4KHgsIHkpClsxXSAgMiBOQSBOQSBOQSAgNQo+IHN0b3BpZm5vdChpZGVudGljYWwocG1heCh4LCB5KSwgcG1heCh5LCB4KSkpCj4gcG1heCh4LCB5LCBuYS5ybT1UUlVFKQpbMV0gIDIgTkEgIDQgIDQgIDUKPiBzdG9waWZub3QoaWRlbnRpY2FsKHBtYXgoeCwgeSwgbmEucm09VFJVRSksIHBtYXgoeSwgeCwgbmEucm09VFJVRSkpKQo+IAo+IHggPC0gYXMuY2hhcmFjdGVyKHgpOyB5IDwtIGFzLmNoYXJhY3Rlcih5KQo+IHBtaW4oeCwgeSkKWzFdICIxIiBOQSAgTkEgIE5BICAiMyIKPiBzdG9waWZub3QoaWRlbnRpY2FsKHBtaW4oeCwgeSksIHBtaW4oeSwgeCkpKQo+IHBtaW4oeCwgeSwgbmEucm09VFJVRSkKWzFdICIxIiBOQSAgIjQiICI0IiAiMyIKPiBzdG9waWZub3QoaWRlbnRpY2FsKHBtaW4oeCwgeSwgbmEucm09VFJVRSksIHBtaW4oeSwgeCwgbmEucm09VFJVRSkpKQo+IHBtYXgoeCwgeSkKWzFdICIyIiBOQSAgTkEgIE5BICAiNSIKPiBzdG9waWZub3QoaWRlbnRpY2FsKHBtYXgoeCwgeSksIHBtYXgoeSwgeCkpKQo+IHBtYXgoeCwgeSwgbmEucm09VFJVRSkKWzFdICIyIiBOQSAgIjQiICI0IiAiNSIKPiBzdG9waWZub3QoaWRlbnRpY2FsKHBtYXgoeCwgeSwgbmEucm09VFJVRSksIHBtYXgoeSwgeCwgbmEucm09VFJVRSkpKQo+IAo+ICMgdGVzdHMgb2YgY2xhc3NlZCBxdWFudGl0aWVzCj4geCA8LSAubGVhcC5zZWNvbmRzWzE6MjNdOyB5IDwtIHJldih4KQo+IHhbMl0gPC0geVsyXSA8LSB4WzNdIDwtIHlbNF0gPC0gTkEKPiBmb3JtYXQocG1pbih4LCB5KSwgdHo9IkdNVCIpICAjIFRaIG5hbWVzIGRpZmZlciBieSBwbGF0Zm9ybQogWzFdICIxOTcyLTA3LTAxIiBOQSAgICAgICAgICAgTkEgICAgICAgICAgIE5BICAgICAgICAgICAiMTk3Ni0wMS0wMSIKIFs2XSAiMTk3Ny0wMS0wMSIgIjE5NzgtMDEtMDEiICIxOTc5LTAxLTAxIiAiMTk4MC0wMS0wMSIgIjE5ODEtMDctMDEiClsxMV0gIjE5ODItMDctMDEiICIxOTgzLTA3LTAxIiAiMTk4Mi0wNy0wMSIgIjE5ODEtMDctMDEiICIxOTgwLTAxLTAxIgpbMTZdICIxOTc5LTAxLTAxIiAiMTk3OC0wMS0wMSIgIjE5NzctMDEtMDEiICIxOTc2LTAxLTAxIiAiMTk3NS0wMS0wMSIKWzIxXSAiMTk3NC0wMS0wMSIgIjE5NzMtMDEtMDEiICIxOTcyLTA3LTAxIgo+IGNsYXNzKHBtaW4oeCwgeSkpClsxXSAiUE9TSVhjdCIgIlBPU0lYdCIgCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWluKHgsIHkpLCBwbWluKHksIHgpKSkKPiBmb3JtYXQocG1pbih4LCB5LCBuYS5ybT1UUlVFKSwgdHo9IkdNVCIpCiBbMV0gIjE5NzItMDctMDEiIE5BICAgICAgICAgICAiMTk5Ny0wNy0wMSIgIjE5NzUtMDEtMDEiICIxOTc2LTAxLTAxIgogWzZdICIxOTc3LTAxLTAxIiAiMTk3OC0wMS0wMSIgIjE5NzktMDEtMDEiICIxOTgwLTAxLTAxIiAiMTk4MS0wNy0wMSIKWzExXSAiMTk4Mi0wNy0wMSIgIjE5ODMtMDctMDEiICIxOTgyLTA3LTAxIiAiMTk4MS0wNy0wMSIgIjE5ODAtMDEtMDEiClsxNl0gIjE5NzktMDEtMDEiICIxOTc4LTAxLTAxIiAiMTk3Ny0wMS0wMSIgIjE5NzYtMDEtMDEiICIxOTc1LTAxLTAxIgpbMjFdICIxOTc0LTAxLTAxIiAiMTk3My0wMS0wMSIgIjE5NzItMDctMDEiCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWluKHgsIHksIG5hLnJtPVRSVUUpLCBwbWluKHksIHgsIG5hLnJtPVRSVUUpKSkKPiBmb3JtYXQocG1heCh4LCB5KSwgdHo9IkdNVCIpCiBbMV0gIjIwMDYtMDEtMDEiIE5BICAgICAgICAgICBOQSAgICAgICAgICAgTkEgICAgICAgICAgICIxOTk0LTA3LTAxIgogWzZdICIxOTkzLTA3LTAxIiAiMTk5Mi0wNy0wMSIgIjE5OTEtMDEtMDEiICIxOTkwLTAxLTAxIiAiMTk4OC0wMS0wMSIKWzExXSAiMTk4NS0wNy0wMSIgIjE5ODMtMDctMDEiICIxOTg1LTA3LTAxIiAiMTk4OC0wMS0wMSIgIjE5OTAtMDEtMDEiClsxNl0gIjE5OTEtMDEtMDEiICIxOTkyLTA3LTAxIiAiMTk5My0wNy0wMSIgIjE5OTQtMDctMDEiICIxOTk2LTAxLTAxIgpbMjFdICIxOTk3LTA3LTAxIiAiMTk5OS0wMS0wMSIgIjIwMDYtMDEtMDEiCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWF4KHgsIHkpLCBwbWF4KHksIHgpKSkKPiBmb3JtYXQocG1heCh4LCB5LCBuYS5ybT1UUlVFKSwgdHo9IkdNVCIpCiBbMV0gIjIwMDYtMDEtMDEiIE5BICAgICAgICAgICAiMTk5Ny0wNy0wMSIgIjE5NzUtMDEtMDEiICIxOTk0LTA3LTAxIgogWzZdICIxOTkzLTA3LTAxIiAiMTk5Mi0wNy0wMSIgIjE5OTEtMDEtMDEiICIxOTkwLTAxLTAxIiAiMTk4OC0wMS0wMSIKWzExXSAiMTk4NS0wNy0wMSIgIjE5ODMtMDctMDEiICIxOTg1LTA3LTAxIiAiMTk4OC0wMS0wMSIgIjE5OTAtMDEtMDEiClsxNl0gIjE5OTEtMDEtMDEiICIxOTkyLTA3LTAxIiAiMTk5My0wNy0wMSIgIjE5OTQtMDctMDEiICIxOTk2LTAxLTAxIgpbMjFdICIxOTk3LTA3LTAxIiAiMTk5OS0wMS0wMSIgIjIwMDYtMDEtMDEiCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWF4KHgsIHksIG5hLnJtPVRSVUUpLCBwbWF4KHksIHgsIG5hLnJtPVRSVUUpKSkKPiAKPiB4IDwtIGFzLlBPU0lYbHQoeCwgdHo9IkdNVCIpOyB5IDwtIGFzLlBPU0lYbHQoeSwgdHo9IkdNVCIpCj4gZm9ybWF0KHBtaW4oeCwgeSksIHR6PSJHTVQiKQogWzFdICIxOTcyLTA3LTAxIiBOQSAgICAgICAgICAgTkEgICAgICAgICAgIE5BICAgICAgICAgICAiMTk3Ni0wMS0wMSIKIFs2XSAiMTk3Ny0wMS0wMSIgIjE5NzgtMDEtMDEiICIxOTc5LTAxLTAxIiAiMTk4MC0wMS0wMSIgIjE5ODEtMDctMDEiClsxMV0gIjE5ODItMDctMDEiICIxOTgzLTA3LTAxIiAiMTk4Mi0wNy0wMSIgIjE5ODEtMDctMDEiICIxOTgwLTAxLTAxIgpbMTZdICIxOTc5LTAxLTAxIiAiMTk3OC0wMS0wMSIgIjE5NzctMDEtMDEiICIxOTc2LTAxLTAxIiAiMTk3NS0wMS0wMSIKWzIxXSAiMTk3NC0wMS0wMSIgIjE5NzMtMDEtMDEiICIxOTcyLTA3LTAxIgo+IGNsYXNzKHBtaW4oeCwgeSkpClsxXSAiUE9TSVhsdCIgIlBPU0lYdCIgCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWluKHgsIHkpLCBwbWluKHksIHgpKSkKPiBmb3JtYXQocG1pbih4LCB5LCBuYS5ybT1UUlVFKSwgdHo9IkdNVCIpCiBbMV0gIjE5NzItMDctMDEiIE5BICAgICAgICAgICAiMTk5Ny0wNy0wMSIgIjE5NzUtMDEtMDEiICIxOTc2LTAxLTAxIgogWzZdICIxOTc3LTAxLTAxIiAiMTk3OC0wMS0wMSIgIjE5NzktMDEtMDEiICIxOTgwLTAxLTAxIiAiMTk4MS0wNy0wMSIKWzExXSAiMTk4Mi0wNy0wMSIgIjE5ODMtMDctMDEiICIxOTgyLTA3LTAxIiAiMTk4MS0wNy0wMSIgIjE5ODAtMDEtMDEiClsxNl0gIjE5NzktMDEtMDEiICIxOTc4LTAxLTAxIiAiMTk3Ny0wMS0wMSIgIjE5NzYtMDEtMDEiICIxOTc1LTAxLTAxIgpbMjFdICIxOTc0LTAxLTAxIiAiMTk3My0wMS0wMSIgIjE5NzItMDctMDEiCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWluKHgsIHksIG5hLnJtPVRSVUUpLCBwbWluKHksIHgsIG5hLnJtPVRSVUUpKSkKPiBmb3JtYXQocG1heCh4LCB5KSwgdHo9IkdNVCIpCiBbMV0gIjIwMDYtMDEtMDEiIE5BICAgICAgICAgICBOQSAgICAgICAgICAgTkEgICAgICAgICAgICIxOTk0LTA3LTAxIgogWzZdICIxOTkzLTA3LTAxIiAiMTk5Mi0wNy0wMSIgIjE5OTEtMDEtMDEiICIxOTkwLTAxLTAxIiAiMTk4OC0wMS0wMSIKWzExXSAiMTk4NS0wNy0wMSIgIjE5ODMtMDctMDEiICIxOTg1LTA3LTAxIiAiMTk4OC0wMS0wMSIgIjE5OTAtMDEtMDEiClsxNl0gIjE5OTEtMDEtMDEiICIxOTkyLTA3LTAxIiAiMTk5My0wNy0wMSIgIjE5OTQtMDctMDEiICIxOTk2LTAxLTAxIgpbMjFdICIxOTk3LTA3LTAxIiAiMTk5OS0wMS0wMSIgIjIwMDYtMDEtMDEiCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWF4KHgsIHkpLCBwbWF4KHksIHgpKSkKPiBmb3JtYXQocG1heCh4LCB5LCBuYS5ybT1UUlVFKSwgdHo9IkdNVCIpCiBbMV0gIjIwMDYtMDEtMDEiIE5BICAgICAgICAgICAiMTk5Ny0wNy0wMSIgIjE5NzUtMDEtMDEiICIxOTk0LTA3LTAxIgogWzZdICIxOTkzLTA3LTAxIiAiMTk5Mi0wNy0wMSIgIjE5OTEtMDEtMDEiICIxOTkwLTAxLTAxIiAiMTk4OC0wMS0wMSIKWzExXSAiMTk4NS0wNy0wMSIgIjE5ODMtMDctMDEiICIxOTg1LTA3LTAxIiAiMTk4OC0wMS0wMSIgIjE5OTAtMDEtMDEiClsxNl0gIjE5OTEtMDEtMDEiICIxOTkyLTA3LTAxIiAiMTk5My0wNy0wMSIgIjE5OTQtMDctMDEiICIxOTk2LTAxLTAxIgpbMjFdICIxOTk3LTA3LTAxIiAiMTk5OS0wMS0wMSIgIjIwMDYtMDEtMDEiCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWF4KHgsIHksIG5hLnJtPVRSVUUpLCBwbWF4KHksIHgsIG5hLnJtPVRSVUUpKSkKPiAjIyByZWdyZXNpb24gdGVzdHMKPiAKPiAKPiAjIyByZWdyZXNzaW9uIHRlc3RzIG9uIG5hbWVzIG9mIDFEIGFycmF5cwo+IHggPC0gYXMuYXJyYXkoMTozKQo+IG5hbWVzKHgpIDwtIGxldHRlcnNbeF0gIyBzZXRzIGRpbW5hbWVzLCByZWFsbHkKPiBuYW1lcyh4KQpbMV0gImEiICJiIiAiYyIKPiBkaW1uYW1lcyh4KQpbWzFdXQpbMV0gImEiICJiIiAiYyIKCj4gYXR0cmlidXRlcyh4KQokZGltClsxXSAzCgokZGltbmFtZXMKJGRpbW5hbWVzW1sxXV0KWzFdICJhIiAiYiIgImMiCgoKPiBuYW1lcyh4KSA8LSBOVUxMCj4gYXR0cih4LCAibmFtZXMiKSA8LSBMRVRURVJTW3hdICMgc2V0cyBkaW1uYW1lcywgcmVhbGx5Cj4gbmFtZXMoeCkKWzFdICJBIiAiQiIgIkMiCj4gZGltbmFtZXMoeCkKW1sxXV0KWzFdICJBIiAiQiIgIkMiCgo+IGF0dHJpYnV0ZXMoeCkKJGRpbQpbMV0gMwoKJGRpbW5hbWVzCiRkaW1uYW1lc1tbMV1dClsxXSAiQSIgIkIiICJDIgoKCj4gIyMgcmVncmVzc2lvbiB0ZXN0cwo+IAo+IAo+ICMjIHJlZ3Jlc3Npb24gdGVzdHMgb24gTkEgYXR0cmlidXRlIG5hbWVzCj4geCA8LSAxOjMKPiBhdHRyKHgsICJOQSIpIDwtIDQKPiBhdHRyaWJ1dGVzKHgpCiRgTkFgClsxXSA0Cgo+IGF0dHIoeCwgIk5BIikKWzFdIDQKPiBhdHRyKHgsIE5BX2NoYXJhY3Rlcl8pCk5VTEwKPiB0cnkoYXR0cih4LCBOQV9jaGFyYWN0ZXJfKSA8LSA1KQpFcnJvciBpbiBhdHRyKHgsIE5BX2NoYXJhY3Rlcl8pIDwtIDUgOiAKICAnbmFtZScgbXVzdCBiZSBub24tbnVsbCBjaGFyYWN0ZXIgc3RyaW5nCj4gIyMgcHJpb3IgdG8gMi41LjAgTkEgd2FzIHRyZWF0ZWQgYXMgIk5BIgo+IAo+IAo+ICMjIHFyIHdpdGggcGl2b3RpbmcgKFBSIzk2MjMpCj4gQSA8LSBtYXRyaXgoYygwLDAsMCwgMSwxLDEpLCBucm93ID0gMywKKyAgICAgICAgICAgICBkaW1uYW1lcyA9IGxpc3QobGV0dGVyc1sxOjNdLCBjKCJ6ZXJvIiwib25lIikpKQo+IHkgPC0gbWF0cml4KGMoNiw3LDgpLCBucm93ID0gMywgZGltbmFtZXMgPSBsaXN0KExFVFRFUlNbMTozXSwgInkiKSkKPiBxci5jb2VmKHFyKEEpLCB5KQogICAgICB5Cnplcm8gTkEKb25lICAgNwo+IHFyLmZpdHRlZChxcihBKSwgeSkKICB5CkEgNwpCIDcKQyA3Cj4gCj4gcXIuY29lZihxcihtYXRyaXgoMDoxLCAxLCBkaW1uYW1lcz1saXN0KE5VTEwsIGMoInplcm8iLCJvbmUiKSkpKSwgNSkKemVybyAgb25lIAogIE5BICAgIDUgCj4gIyMgY29lZiBuYW1lcyB3ZXJlIHJldHVybmVkIHVucGl2b3RlZCA8PSAyLjUuMAo+IAo+ICMjIHJlYWRDaGFyIHJlYWQgZXh0cmEgaXRlbXMsIHRlcm1pbmF0ZWQgb24gemVyb3MKPiB4IDwtIGFzLnJhdyg2NTo3NCkKPiByZWFkQ2hhcih4LCBuY2hhcj1jKDMsMywwLDMsMywzKSkKWzFdICJBQkMiICJERUYiICIiICAgICJHSEkiICJKIiAgCj4gZiA8LSB0ZW1wZmlsZSgpCj4gd3JpdGVDaGFyKCJBQkNERUZHSElKIiwgY29uPWYsIGVvcz1OVUxMKQo+IHJlYWRDaGFyKGYsIG5jaGFyPWMoMywzLDAsMywzLDMpKQpbMV0gIkFCQyIgIkRFRiIgIiIgICAgIkdISSIgIkoiICAKPiB1bmxpbmsoZikKPiAjIwo+IAo+IAo+ICMjIGNvcm5lciBjYXNlcyBmb3IgY29yCj4gc2V0LnNlZWQoMSkKPiBYIDwtIGNiaW5kKE5BLCAxOjMsIHJub3JtKDMpKQo+IHRyeShjb3IoWCwgdXNlID0gImNvbXBsZXRlIikpCkVycm9yIGluIGNvcihYLCB1c2UgPSAiY29tcGxldGUiKSA6IG5vIGNvbXBsZXRlIGVsZW1lbnQgcGFpcnMKPiB0cnkoY29yKFgsIHVzZSA9ICJjb21wbGV0ZSIsIG1ldGhvZD0ic3BlYXJtYW4iKSkKRXJyb3IgaW4gY29yKFgsIHVzZSA9ICJjb21wbGV0ZSIsIG1ldGhvZCA9ICJzcGVhcm1hbiIpIDogCiAgbm8gY29tcGxldGUgZWxlbWVudCBwYWlycwo+IHRyeShjb3IoWCwgdXNlID0gImNvbXBsZXRlIiwgbWV0aG9kPSJrZW5kYWxsIikpCkVycm9yIGluIGNvcihYLCB1c2UgPSAiY29tcGxldGUiLCBtZXRob2QgPSAia2VuZGFsbCIpIDogCiAgbm8gY29tcGxldGUgZWxlbWVudCBwYWlycwo+IGNvcihYLCB1c2UgPSAicGFpciIpCiAgICAgWywxXSAgICAgICBbLDJdICAgICAgIFssM10KWzEsXSAgIE5BICAgICAgICAgTkEgICAgICAgICBOQQpbMixdICAgTkEgIDEuMDAwMDAwMCAtMC4xOTQyNzM5ClszLF0gICBOQSAtMC4xOTQyNzM5ICAxLjAwMDAwMDAKPiBjb3IoWCwgdXNlID0gInBhaXIiLCBtZXRob2Q9InNwZWFybWFuIikKICAgICBbLDFdIFssMl0gWywzXQpbMSxdICAgTkEgICBOQSAgIE5BClsyLF0gICBOQSAgMS4wIC0wLjUKWzMsXSAgIE5BIC0wLjUgIDEuMAo+IGNvcihYLCB1c2UgPSAicGFpciIsIG1ldGhvZD0ia2VuZGFsbCIpCiAgICAgWywxXSAgICAgICBbLDJdICAgICAgIFssM10KWzEsXSAgIE5BICAgICAgICAgTkEgICAgICAgICBOQQpbMixdICAgTkEgIDEuMDAwMDAwMCAtMC4zMzMzMzMzClszLF0gICBOQSAtMC4zMzMzMzMzICAxLjAwMDAwMDAKPiAKPiBYWzEsMV0gPC0gMQo+IGNvcihYLCB1c2UgPSAiY29tcGxldGUiKQogICAgIFssMV0gWywyXSBbLDNdClsxLF0gICBOQSAgIE5BICAgTkEKWzIsXSAgIE5BICAgTkEgICBOQQpbMyxdICAgTkEgICBOQSAgIE5BCj4gY29yKFgsIHVzZSA9ICJjb21wbGV0ZSIsIG1ldGhvZD0ic3BlYXJtYW4iKQogICAgIFssMV0gWywyXSBbLDNdClsxLF0gICBOQSAgIE5BICAgTkEKWzIsXSAgIE5BICAgTkEgICBOQQpbMyxdICAgTkEgICBOQSAgIE5BCj4gY29yKFgsIHVzZSA9ICJjb21wbGV0ZSIsIG1ldGhvZD0ia2VuZGFsbCIpCiAgICAgWywxXSBbLDJdIFssM10KWzEsXSAgIE5BICAgTkEgICBOQQpbMixdICAgTkEgICBOQSAgIE5BClszLF0gICBOQSAgIE5BICAgTkEKPiBjb3IoWCwgdXNlID0gInBhaXIiKQogICAgIFssMV0gICAgICAgWywyXSAgICAgICBbLDNdClsxLF0gICBOQSAgICAgICAgIE5BICAgICAgICAgTkEKWzIsXSAgIE5BICAxLjAwMDAwMDAgLTAuMTk0MjczOQpbMyxdICAgTkEgLTAuMTk0MjczOSAgMS4wMDAwMDAwCj4gY29yKFgsIHVzZSA9ICJwYWlyIiwgbWV0aG9kPSJzcGVhcm1hbiIpCiAgICAgWywxXSBbLDJdIFssM10KWzEsXSAgIE5BICAgTkEgICBOQQpbMixdICAgTkEgIDEuMCAtMC41ClszLF0gICBOQSAtMC41ICAxLjAKPiBjb3IoWCwgdXNlID0gInBhaXIiLCBtZXRob2Q9ImtlbmRhbGwiKQogICAgIFssMV0gICAgICAgWywyXSAgICAgICBbLDNdClsxLF0gICBOQSAgICAgICAgIE5BICAgICAgICAgTkEKWzIsXSAgIE5BICAxLjAwMDAwMDAgLTAuMzMzMzMzMwpbMyxdICAgTkEgLTAuMzMzMzMzMyAgMS4wMDAwMDAwCj4gIyMgbm90IGNvbnNpc3RlbnQgaW4gMi42LngKPiAKPiAKPiAjIyBjb25maW50IG9uIHJhbmstZGVmaWNpZW50IG1vZGVscyAoaW4gcGFydCwgUFIjMTA0OTQpCj4ganVuayA8LSBkYXRhLmZyYW1lKHggPSByZXAoMSwgMTBMKSwKKyAgICAgICAgICAgICAgICAgICAgdSA9IGZhY3RvcihzYW1wbGUoYygiWSIsICJOIiksIDEwLCByZXBsYWNlPVRSVUUpKSwKKyAgICAgICAgICAgICAgICAgICAgYW5zID0gcm5vcm0oMTApKQo+IGZpdCA8LSAgbG0oYW5zIH4geCArIHUsIGRhdGEgPSBqdW5rKQo+IGNvbmZpbnQoZml0KQogICAgICAgICAgICAgICAgIDIuNSAlICAgIDk3LjUgJQooSW50ZXJjZXB0KSAtMC4zMjI0ODU3IDIuMjE5NDU5NAp4ICAgICAgICAgICAgICAgICAgIE5BICAgICAgICBOQQp1WSAgICAgICAgICAtMi42ODIxMjQwIDAuMzU2MDgxNQo+IGNvbmZpbnQuZGVmYXVsdChmaXQpCiAgICAgICAgICAgICAgICAgMi41ICUgICAgOTcuNSAlCihJbnRlcmNlcHQpIC0wLjEzMTc2MjkgMi4wMjg3MzY2CnggICAgICAgICAgICAgICAgICAgTkEgICAgICAgIE5BCnVZICAgICAgICAgIC0yLjQ1NDE2NjYgMC4xMjgxMjQyCj4gIyMgTWlzbWF0Y2ggZ2F2ZSBOQSBmb3IgJ3UnIGluIDIuNi4xCj4gCj4gCj4gIyMgY29ycnVwdCBkYXRhIGZyYW1lIHByb2R1Y2VkIGJ5IHN1YnNldHRpbmcgKFBSIzEwNTc0KQo+IHggPC0gZGF0YS5mcmFtZShhPTE6MywgYj0yOjQpCj4geFssM10gPC0geApXYXJuaW5nIG1lc3NhZ2U6CkluIGBbPC0uZGF0YS5mcmFtZWAoYCp0bXAqYCwgLCAzLCB2YWx1ZSA9IGxpc3QoYSA9IDE6MywgYiA9IDI6NCkpIDoKICBwcm92aWRlZCAyIHZhcmlhYmxlcyB0byByZXBsYWNlIDEgdmFyaWFibGVzCj4geAogIGEgYiBhLjEKMSAxIDIgICAxCjIgMiAzICAgMgozIDMgNCAgIDMKPiAjIyB3YXJuaW5nIGR1cmluZyBwcmludGluZyA8IDIuNy4wCj4gCj4gCj4gIyMgZm9ybWF0LmZhY3RvciB1c2VkIHRvIGxvc2UgZGltW25hbWVzXSBhbmQgbmFtZXMgKFBSIzExNTEyKQo+IHggPC0gZmFjdG9yKGMoImFhIiwgbGV0dGVyc1stMV0pKQo+IGRpbSh4KSA8LSBjKDEzLDIpCj4gZm9ybWF0KHgsIGp1c3RpZnk9InJpZ2h0IikKICAgICAgWywxXSBbLDJdCiBbMSxdICJhYSIgIiBuIgogWzIsXSAiIGIiICIgbyIKIFszLF0gIiBjIiAiIHAiCiBbNCxdICIgZCIgIiBxIgogWzUsXSAiIGUiICIgciIKIFs2LF0gIiBmIiAiIHMiCiBbNyxdICIgZyIgIiB0IgogWzgsXSAiIGgiICIgdSIKIFs5LF0gIiBpIiAiIHYiClsxMCxdICIgaiIgIiB3IgpbMTEsXSAiIGsiICIgeCIKWzEyLF0gIiBsIiAiIHkiClsxMyxdICIgbSIgIiB6Igo+ICMjCj4gCj4gCj4gIyMgcmVtb3ZpbmcgY29sdW1ucyBpbiB3aXRoaW4gKFBSIzExMzEpCj4gYWJjIDwtIGRhdGEuZnJhbWUoYT0xOjUsIGI9Mjo2LCBjPTM6NykKPiB3aXRoaW4oYWJjLCBiPC1OVUxMKQogIGEgYwoxIDEgMwoyIDIgNAozIDMgNQo0IDQgNgo1IDUgNwo+IHdpdGhpbihhYmMse2Q8LWErNztiPC1OVUxMfSkKICBhIGMgIGQKMSAxIDMgIDgKMiAyIDQgIDkKMyAzIDUgMTAKNCA0IDYgMTEKNSA1IDcgMTIKPiB3aXRoaW4oYWJjLHthPC1hKzc7YjwtTlVMTH0pCiAgIGEgYwoxICA4IDMKMiAgOSA0CjMgMTAgNQo0IDExIDYKNSAxMiA3Cj4gIyMgU2Vjb25kIHByb2R1Y2VkIGNvcnJ1cHQgZGF0YSBmcmFtZSBpbiAyLjcuMQo+IAo+IAo+ICMjIGFnZ3JlZ2F0ZSBvbiBhbiBlbXB0eSBkYXRhIGZyYW1lIChQUiMxMzE2NykKPiB6IDwtIGRhdGEuZnJhbWUoYT1pbnRlZ2VyKDApLCBiPW51bWVyaWMoMCkpCj4gdHJ5KGFnZ3JlZ2F0ZSh6LCBieT16WzFdLCBGVU49c3VtKSkKRXJyb3IgaW4gYWdncmVnYXRlLmRhdGEuZnJhbWUoeiwgYnkgPSB6WzFdLCBGVU4gPSBzdW0pIDogCiAgbm8gcm93cyB0byBhZ2dyZWdhdGUKPiAjIyBmYWlsZWQgaW4gdW5saXN0IGluIDIuOC4wLCBub3cgZ2l2ZXMgZXhwbGljaXQgbWVzc2FnZS4KPiBhZ2dyZWdhdGUoZGF0YS5mcmFtZShhPTE6MTApW0ZdLCBsaXN0KHJlcCgxOjIsIGVhY2g9NSkpLCBzdW0pCiAgR3JvdXAuMQoxICAgICAgIDEKMiAgICAgICAyCj4gIyMgdXNlZCB0byBmYWlsIG9ic2N1cmVseS4KPiAKPiAKPiAjIyBzdWJzZXR0aW5nIGRhdGEgZnJhbWVzIHdpdGggZHVwbGljYXRlIHJvd3MKPiB6IDwtIGRhdGEuZnJhbWUoYT0xLCBhPTIsIGI9MywgY2hlY2submFtZXM9RkFMU0UpCj4geltdICMgT0sKICBhIGEgYgoxIDEgMiAzCj4gelsxLCBdCiAgYSBhIGIKMSAxIDIgMwo+ICMjIGhhZCByb3cgbmFtZXMgYSwgYS4xLCBiIGluIDIuOC4wLgo+IAo+IAo+ICMjIGluY29ycmVjdCB3YXJuaW5nIGR1ZSB0byBsYWNrIG9mIGZ1enouCj4gVFMgPC0gIHRzKGNvMlsxOjE5Ml0sIGZyZXE9MjQpCj4gdG1wMiA8LSB3aW5kb3coVFMsIHN0YXJ0KFRTKSwgZW5kKFRTKSkKPiAjIyB3YXJuZWQgaW4gMi44LjAKPiAKPiAjIyBmYWlsZWQgdG8gYWRkIHRhZwo+IENhbGwgPC0gY2FsbCgiZm9vIiwgMSkKPiBDYWxsW1siYmFyIl1dIDwtIDIKPiBDYWxsCmZvbygxLCBiYXIgPSAyKQo+ICMjIHVubmFtZWQgY2FsbCBpbiAyLjguMQo+IAo+IG9wdGlvbnMoa2VlcC5zb3VyY2UgPSBUUlVFKQo+ICMjICQ8LSBvbiBwYWlybGlzdHMgZmFpbGVkIHRvIGR1cGxpY2F0ZSAoZnJvbSBGZWxpeCBBbmRyZXdzLAo+ICMjIGh0dHBzOi8vc3RhdC5ldGh6LmNoL3BpcGVybWFpbC9yLWRldmVsLzIwMDktSmFudWFyeS8wNTE2OTguaHRtbCkKPiBmb28gPC0gZnVuY3Rpb24oZ2l2ZW4gPSBOVUxMKSB7CisgICAgIGNhbGxPYmogPC0gcXVvdGUoY2FsbEZ1bmMoKSkKKyAgICAgaWYoIWlzLm51bGwoZ2l2ZW4pKSBjYWxsT2JqJGdpdmVuIDwtIGdpdmVuCisgICAgIGlmIChpcy5udWxsKGdpdmVuKSkgY2FsbE9iaiRkZWZhdWx0IDwtIFRSVUUKKyAgICAgY2FsbE9iagorIH0KPiAKPiBmb28oKQpjYWxsRnVuYyhkZWZhdWx0ID0gVFJVRSkKPiBmb28oZ2l2ZW4gPSBUUlVFKQpjYWxsRnVuYyhnaXZlbiA9IFRSVUUpCj4gZm9vKCJibGFoIGJsYWgiKQpjYWxsRnVuYyhnaXZlbiA9ICJibGFoIGJsYWgiKQo+IGZvbyhnaXZlbiA9IFRSVUUpCmNhbGxGdW5jKGdpdmVuID0gVFJVRSkKPiBmb28oKQpjYWxsRnVuYyhkZWZhdWx0ID0gVFJVRSkKPiAjIyBhbHRlcmVkIGZvbygpIGluIDIuOC4xLgo+IAo+ICMjIFVzaW5nICAnIycgZmxhZyBpbiAgc3ByaW50ZigpOgo+IGZvcm1zIDwtIGMoIiUjNy41ZyIsIiUjNS5mIiwgIiUjN3giLCAiJSM1ZCIsICIlIzkuMGUiKQo+IG51bXMgPC0gbGlzdCgtMy4xNDUsIC0zMSwgICAweGFiYywgIC0xMjNMLCAxMjM0NTYpCj4gcmJpbmQobWFwcGx5KHNwcmludGYsIGZvcm1zLCAgICAgICAgICAgICAgIG51bXMpLAorICAgICAgIG1hcHBseShzcHJpbnRmLCBzdWIoIiMiLCAnJywgZm9ybXMpLCBudW1zKSkKICAgICAlIzcuNWcgICAgJSM1LmYgICAlIzd4ICAgICAgJSM1ZCAgICAlIzkuMGUgICAgIApbMSxdICItMy4xNDUwIiAiIC0zMS4iICIgIDB4YWJjIiAiIC0xMjMiICIgICAxLmUrMDUiClsyLF0gIiAtMy4xNDUiICIgIC0zMSIgIiAgICBhYmMiICIgLTEyMyIgIiAgICAxZSswNSIKPiAjIyBnYXZlIGFuIGVycm9yIGluIHByZS1yZWxlYXNlIHZlcnNpb25zIG9mIDIuOS4wCj4gCj4gIyMgKGF1dG8pcHJpbnRpbmcgb2YgZnVuY3Rpb25zIHt3aXRoIC8gd2l0aG91dCBzb3VyY2UgYXR0cmlidXRlfSwKPiAjIyBpbmNsdWRpbmcgcHJpbWl0aXZlcwo+IHNpbmsoY29uIDwtIHRleHRDb25uZWN0aW9uKCJvZiIsICJ3IikpIDsgYyA7IHNpbmsoTlVMTCk7IGNsb3NlKGNvbikKPiBvZjIgPC0gY2FwdHVyZS5vdXRwdXQocHJpbnQoYykpCj4gc3RvcGlmbm90KGlkZW50aWNhbChvZjIsIG9mKSwKKyAgICAgICAgICAgaWRlbnRpY2FsKG9mMiwgImZ1bmN0aW9uICguLi4pICAuUHJpbWl0aXZlKFwiY1wiKSIpKQo+ICMjIF5eIHdvdWxkIGhhdmUgZmFpbGVkIHVwIHRvIFIgMi45LngKPiBmb28KZnVuY3Rpb24oZ2l2ZW4gPSBOVUxMKSB7CiAgICBjYWxsT2JqIDwtIHF1b3RlKGNhbGxGdW5jKCkpCiAgICBpZighaXMubnVsbChnaXZlbikpIGNhbGxPYmokZ2l2ZW4gPC0gZ2l2ZW4KICAgIGlmIChpcy5udWxsKGdpdmVuKSkgY2FsbE9iaiRkZWZhdWx0IDwtIFRSVUUKICAgIGNhbGxPYmoKfQo8Ynl0ZWNvZGU6IDB4MzQ5OWM1OD4KPiBwcmludChmb28sIHVzZVNvdXJjZSA9IEZBTFNFKQpmdW5jdGlvbiAoZ2l2ZW4gPSBOVUxMKSAKewogICAgY2FsbE9iaiA8LSBxdW90ZShjYWxsRnVuYygpKQogICAgaWYgKCFpcy5udWxsKGdpdmVuKSkgCiAgICAgICAgY2FsbE9iaiRnaXZlbiA8LSBnaXZlbgogICAgaWYgKGlzLm51bGwoZ2l2ZW4pKSAKICAgICAgICBjYWxsT2JqJGRlZmF1bHQgPC0gVFJVRQogICAgY2FsbE9iagp9CjxieXRlY29kZTogMHgzNDk5YzU4Pgo+IGF0dHIoZm9vLCAic3JjcmVmIikgPC0gTlVMTAo+IGZvbwpmdW5jdGlvbiAoZ2l2ZW4gPSBOVUxMKSAKewogICAgY2FsbE9iaiA8LSBxdW90ZShjYWxsRnVuYygpKQogICAgaWYgKCFpcy5udWxsKGdpdmVuKSkgCiAgICAgICAgY2FsbE9iaiRnaXZlbiA8LSBnaXZlbgogICAgaWYgKGlzLm51bGwoZ2l2ZW4pKSAKICAgICAgICBjYWxsT2JqJGRlZmF1bHQgPC0gVFJVRQogICAgY2FsbE9iagp9CjxieXRlY29kZTogMHgzNDk5YzU4Pgo+IChmIDwtIHN0cnVjdHVyZShmdW5jdGlvbigpe30sIG5vdGUgPSAianVzdCBhIG5vdGUiLAorICAgICAgICAgICAgICAgICB5YWRhID0gZnVuY3Rpb24oKSAibm90IHRoZSBzYW1lIikpCmZ1bmN0aW9uKCl7fQphdHRyKCwibm90ZSIpClsxXSAianVzdCBhIG5vdGUiCmF0dHIoLCJ5YWRhIikKZnVuY3Rpb24oKSAibm90IHRoZSBzYW1lIgo+IHByaW50KGYsIHVzZVNvdXJjZSA9IFRSVUUpCmZ1bmN0aW9uKCl7fQphdHRyKCwibm90ZSIpClsxXSAianVzdCBhIG5vdGUiCmF0dHIoLCJ5YWRhIikKZnVuY3Rpb24oKSAibm90IHRoZSBzYW1lIgo+IHByaW50KGYsIHVzZVNvdXJjZSA9IEZBTFNFKSAjIG11c3QgcHJpbnQgYXR0cmlidXRlcwpmdW5jdGlvbiAoKSAKewp9CmF0dHIoLCJub3RlIikKWzFdICJqdXN0IGEgbm90ZSIKYXR0cigsInlhZGEiKQpmdW5jdGlvbiAoKSAKIm5vdCB0aGUgc2FtZSIKPiBwcmludC5mdW5jdGlvbiA8LSBmdW5jdGlvbih4LCAuLi4pIHsKKyAgICAgY2F0KCJteSBwcmludCg8ZnVuY3Rpb24+KTogIik7IHN0cih4LCBnaXZlLmF0dHI9RkFMU0UpOyBpbnZpc2libGUoeCkgfQo+IHByaW50LmZ1bmN0aW9uCm15IHByaW50KDxmdW5jdGlvbj4pOiBmdW5jdGlvbiAoeCwgLi4uKSAgCj4gcHJpbnQocHJpbnQuZnVuY3Rpb24pCm15IHByaW50KDxmdW5jdGlvbj4pOiBmdW5jdGlvbiAoeCwgLi4uKSAgCj4gcm0ocHJpbnQuZnVuY3Rpb24pCj4gIyMgYXV0by1wcmludGluZyBhbmQgcHJpbnRpbmcgZGlmZmVyZWQgdXAgdG8gUiAyLjkueCAtLSBhbmQgdGhlbiAqQUdBSU4qIGluIFIgMy42LjAKPiAKPiAKPiAjIyBNYWtlIHN1cmUgZGVwYXJzaW5nIGRvZXMgbm90IHJlc2V0IHBhcmFtZXRlcnMKPiBwcmludChsaXN0KGYsIGV4cHJlc3Npb24oZm9vKSwgZiwgcXVvdGUoZm9vKSwgZiwgYmFzZTo6bGlzdCwgZiksCisgICAgICAgdXNlU291cmNlID0gRkFMU0UpCltbMV1dCmZ1bmN0aW9uICgpIAp7Cn0KYXR0cigsIm5vdGUiKQpbMV0gImp1c3QgYSBub3RlIgphdHRyKCwieWFkYSIpCmZ1bmN0aW9uICgpIAoibm90IHRoZSBzYW1lIgoKW1syXV0KZXhwcmVzc2lvbihmb28pCgpbWzNdXQpmdW5jdGlvbiAoKSAKewp9CmF0dHIoLCJub3RlIikKWzFdICJqdXN0IGEgbm90ZSIKYXR0cigsInlhZGEiKQpmdW5jdGlvbiAoKSAKIm5vdCB0aGUgc2FtZSIKCltbNF1dCmZvbwoKW1s1XV0KZnVuY3Rpb24gKCkgCnsKfQphdHRyKCwibm90ZSIpClsxXSAianVzdCBhIG5vdGUiCmF0dHIoLCJ5YWRhIikKZnVuY3Rpb24gKCkgCiJub3QgdGhlIHNhbWUiCgpbWzZdXQpmdW5jdGlvbiAoLi4uKSAgLlByaW1pdGl2ZSgibGlzdCIpCgpbWzddXQpmdW5jdGlvbiAoKSAKewp9CmF0dHIoLCJub3RlIikKWzFdICJqdXN0IGEgbm90ZSIKYXR0cigsInlhZGEiKQpmdW5jdGlvbiAoKSAKIm5vdCB0aGUgc2FtZSIKCj4gCj4gcHJpbnRDb2VmbWF0KGNiaW5kKDAsMSkpCiAgICAgWywxXSBbLDJdClsxLF0gICAgMCAgICAxCj4gIyMgd291bGQgcHJpbnQgTmFOIHVwIHRvIFIgMi45LjAKPiAKPiAKPiAjIyBjb250aW51aXR5IGNvcnJlY3Rpb24gZm9yIEtlbmRhbGwncyB0YXUuICBJbXByb3ZlcyB0aGlzIGV4YW1wbGUuCj4gY29yLnRlc3QoYygxLCAyLCAzLCA0LCA1KSwgYyg4LCA2LCA3LCA1LCAzKSwgbWV0aG9kID0gImtlbmRhbGwiLAorICAgICAgICAgIGV4YWN0ID0gVFJVRSkKCglLZW5kYWxsJ3MgcmFuayBjb3JyZWxhdGlvbiB0YXUKCmRhdGE6ICBjKDEsIDIsIDMsIDQsIDUpIGFuZCBjKDgsIDYsIDcsIDUsIDMpClQgPSAxLCBwLXZhbHVlID0gMC4wODMzMwphbHRlcm5hdGl2ZSBoeXBvdGhlc2lzOiB0cnVlIHRhdSBpcyBub3QgZXF1YWwgdG8gMApzYW1wbGUgZXN0aW1hdGVzOgogdGF1IAotMC44IAoKPiBjb3IudGVzdChjKDEsIDIsIDMsIDQsIDUpLCBjKDgsIDYsIDcsIDUsIDMpLCBtZXRob2QgPSAia2VuZGFsbCIsCisgICAgICAgICAgZXhhY3QgPSBGQUxTRSkKCglLZW5kYWxsJ3MgcmFuayBjb3JyZWxhdGlvbiB0YXUKCmRhdGE6ICBjKDEsIDIsIDMsIDQsIDUpIGFuZCBjKDgsIDYsIDcsIDUsIDMpCnogPSAtMS45NTk2LCBwLXZhbHVlID0gMC4wNTAwNAphbHRlcm5hdGl2ZSBoeXBvdGhlc2lzOiB0cnVlIHRhdSBpcyBub3QgZXF1YWwgdG8gMApzYW1wbGUgZXN0aW1hdGVzOgogdGF1IAotMC44IAoKPiBjb3IudGVzdChjKDEsIDIsIDMsIDQsIDUpLCBjKDgsIDYsIDcsIDUsIDMpLCBtZXRob2QgPSAia2VuZGFsbCIsCisgICAgICAgICAgZXhhY3QgPSBGQUxTRSwgY29udGludWl0eSA9IFRSVUUpCgoJS2VuZGFsbCdzIHJhbmsgY29ycmVsYXRpb24gdGF1CgpkYXRhOiAgYygxLCAyLCAzLCA0LCA1KSBhbmQgYyg4LCA2LCA3LCA1LCAzKQp6ID0gLTEuNzE0NiwgcC12YWx1ZSA9IDAuMDg2NDEKYWx0ZXJuYXRpdmUgaHlwb3RoZXNpczogdHJ1ZSB0YXUgaXMgbm90IGVxdWFsIHRvIDAKc2FtcGxlIGVzdGltYXRlczoKIHRhdSAKLTAuOCAKCj4gIyBhbmQgYSBsaXR0bGUgZm9yIFNwZWFybWFuJ3MKPiBjb3IudGVzdChjKDEsIDIsIDMsIDQsIDUpLCBjKDgsIDYsIDcsIDUsIDMpLCBtZXRob2QgPSAic3BlYXJtYW4iLAorICAgICAgICAgIGV4YWN0ID0gVFJVRSkKCglTcGVhcm1hbidzIHJhbmsgY29ycmVsYXRpb24gcmhvCgpkYXRhOiAgYygxLCAyLCAzLCA0LCA1KSBhbmQgYyg4LCA2LCA3LCA1LCAzKQpTID0gMzgsIHAtdmFsdWUgPSAwLjA4MzMzCmFsdGVybmF0aXZlIGh5cG90aGVzaXM6IHRydWUgcmhvIGlzIG5vdCBlcXVhbCB0byAwCnNhbXBsZSBlc3RpbWF0ZXM6CiByaG8gCi0wLjkgCgo+IGNvci50ZXN0KGMoMSwgMiwgMywgNCwgNSksIGMoOCwgNiwgNywgNSwgMyksIG1ldGhvZCA9ICJzcGVhcm1hbiIsCisgICAgICAgICAgZXhhY3QgPSBGQUxTRSkKCglTcGVhcm1hbidzIHJhbmsgY29ycmVsYXRpb24gcmhvCgpkYXRhOiAgYygxLCAyLCAzLCA0LCA1KSBhbmQgYyg4LCA2LCA3LCA1LCAzKQpTID0gMzgsIHAtdmFsdWUgPSAwLjAzNzM5CmFsdGVybmF0aXZlIGh5cG90aGVzaXM6IHRydWUgcmhvIGlzIG5vdCBlcXVhbCB0byAwCnNhbXBsZSBlc3RpbWF0ZXM6CiByaG8gCi0wLjkgCgo+IGNvci50ZXN0KGMoMSwgMiwgMywgNCwgNSksIGMoOCwgNiwgNywgNSwgMyksIG1ldGhvZCA9ICJzcGVhcm1hbiIsCisgICAgICAgICAgZXhhY3QgPSBGQUxTRSwgY29udGludWl0eSA9IFRSVUUpCgoJU3BlYXJtYW4ncyByYW5rIGNvcnJlbGF0aW9uIHJobwoKZGF0YTogIGMoMSwgMiwgMywgNCwgNSkgYW5kIGMoOCwgNiwgNywgNSwgMykKUyA9IDM4LCBwLXZhbHVlID0gMC4wOTY4OQphbHRlcm5hdGl2ZSBoeXBvdGhlc2lzOiB0cnVlIHJobyBpcyBub3QgZXF1YWwgdG8gMApzYW1wbGUgZXN0aW1hdGVzOgogcmhvIAotMC45IAoKPiAjIyBLZW5kYWxsIGNhc2UgaXMgd2lzaCBvZiBQUiMxMzY5MQo+IAo+IAo+ICMjIGNvcnJ1cHQgZGF0YSBmcmFtZSwgUFIjMTM3MjQKPiBmb28gPC0gbWF0cml4KDE6MTIsIG5yb3cgPSAzKQo+IGJhciA8LSBhcy5kYXRhLmZyYW1lKGZvbykKPiB2YWwgPC0gaW50ZWdlcigwKQo+IHRyeShiYXIkTmV3Q29sIDwtIHZhbCkKRXJyb3IgaW4gYCQ8LS5kYXRhLmZyYW1lYChgKnRtcCpgLCBOZXdDb2wsIHZhbHVlID0gaW50ZWdlcigwKSkgOiAKICByZXBsYWNlbWVudCBoYXMgMCByb3dzLCBkYXRhIGhhcyAzCj4gIyBzaW1pbGFyLCBub3QgaW4gdGhlIHJlcG9ydAo+IHRyeShiYXJbWyJOZXdDb2wiXV0gPC0gdmFsKQpFcnJvciBpbiBgW1s8LS5kYXRhLmZyYW1lYChgKnRtcCpgLCAiTmV3Q29sIiwgdmFsdWUgPSBpbnRlZ2VyKDApKSA6IAogIHJlcGxhY2VtZW50IGhhcyAwIHJvd3MsIGRhdGEgaGFzIDMKPiAjIFsgXSBpcyB0cmlja2VyLCBzbyBqdXN0IGNoZWNrIHRoZSByZXN1bHQgaXMgcmVhc29uYWJsZSBhbmQgcHJpbnRzCj4gYmFyWyJOZXdDb2wiXSA8LSB2YWwKPiBiYXJbLCAiTmV3Q29sMiJdIDwtIHZhbAo+IGJhcltGQUxTRSwgIk5ld0NvbDMiXSA8LSB2YWwKPiBiYXIKICBWMSBWMiBWMyBWNCBOZXdDb2wgTmV3Q29sMiBOZXdDb2wzCjEgIDEgIDQgIDcgMTAgICAgIE5BICAgICAgTkEgICAgICBOQQoyICAyICA1ICA4IDExICAgICBOQSAgICAgIE5BICAgICAgTkEKMyAgMyAgNiAgOSAxMiAgICAgTkEgICAgICBOQSAgICAgIE5BCj4gIyMgU3VjY2VlZGVkIGJ1dCBnYXZlIGNvcnJ1cHQgcmVzdWx0IGluIDIuOS4wCj4gCj4gCj4gIyMgUHJpbnRpbmcgTkFfY29tcGxleF8KPiBtMjIgPC0gbWF0cml4KGxpc3QoTkFfY29tcGxleF8sIDMsICJBIHN0cmluZyIsIE5BX2NvbXBsZXhfKSwgMiwyKQo+IHByaW50KG0yMikKICAgICBbLDFdIFssMl0gICAgICAKWzEsXSBOQSAgICJBIHN0cmluZyIKWzIsXSAzICAgIE5BICAgICAgICAKPiBwcmludChtMjIsIG5hLnByaW50PSI8bWlzc2luZyB2YWx1ZT4iKQogICAgIFssMV0gICAgICAgICAgICBbLDJdICAgICAgICAgICAKWzEsXSA8bWlzc2luZyB2YWx1ZT4gIkEgc3RyaW5nIiAgICAgClsyLF0gMyAgICAgICAgICAgICAgIDxtaXNzaW5nIHZhbHVlPgo+ICMjIHVzZWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiBDLCBub3RpY2FibHkgV2luZG93cywgZm9yIFIgPD0gMi45LjAKPiAKPiAKPiAjIyBub24tc3RhbmRhcmQgdmFyaWFibGUgbmFtZXMgaW4gdXBkYXRlIGV0Ywo+ICMjIG5ldmVyIGd1YXJhbnRlZWQgdG8gd29yaywgcmVxdWVzdGVkIGJ5IFN1bmRhciBEb3JhaS1SYWogaW4KPiAjIyBodHRwczovL3N0YXQuZXRoei5jaC9waXBlcm1haWwvci1kZXZlbC8yMDA5LUp1bHkvMDU0MTg0Lmh0bWwKPiB1cGRhdGUoYGE6IGJgIH4geCwgfiAuICsgeSkKYGE6IGJgIH4geCArIHkKPiAjIyAyLjkuMSBkcm9wcGVkIGJhY2t0aWNrcwo+IAo+IAo+ICMjIHByaW50KGxzLnN0ciguKSkgZGlkIGV2YWx1YXRlIGNhbGxzCj4gRSA8LSBuZXcuZW52KCk7IEUkY2wgPC0gY2FsbCgicHJpbnQiLCAiQm9vICEiKQo+IGxzLnN0cihFKQpjbCA6ICBsYW5ndWFnZSBwcmludCgiQm9vICEiKQo+ICMjIDIuMTAuMCBkaWQgcHJpbnQuLgo+IAo+IAo+ICMjIGNvbXBsZXRlLmNhc2VzIHdpdGggbm8gaW5wdXQKPiB0cnkoY29tcGxldGUuY2FzZXMoKSkKRXJyb3IgaW4gY29tcGxldGUuY2FzZXMoKSA6IG5vIGlucHV0IGhhcyBkZXRlcm1pbmVkIHRoZSBudW1iZXIgb2YgY2FzZXMKPiB0cnkoY29tcGxldGUuY2FzZXMobGlzdCgpLCBsaXN0KCkpKQpFcnJvciBpbiBjb21wbGV0ZS5jYXNlcyhsaXN0KCksIGxpc3QoKSkgOiAKICBubyBpbnB1dCBoYXMgZGV0ZXJtaW5lZCB0aGUgbnVtYmVyIG9mIGNhc2VzCj4gIyMgZ2F2ZSB1bmhlbHBmdWwgbWVzc2FnZXMgaW4gMi4xMC4wLCBzaWxseSByZXN1bHRzIGluIHByZS0yLjEwLjEKPiAKPiAKPiAjIyBlcnJvciBtZXNzYWdlcyBmcm9tIChDLWxldmVsKSBldmFsTGlzdAo+IHRzdCA8LSBmdW5jdGlvbih5KSB7IHN0b3BpZm5vdChpcy5udW1lcmljKHkpKTsgeSsgMSB9Cj4gdHJ5KHRzdCgpKSAjIGV2ZW4gbmljZXIgc2luY2UgUiAzLjUuMCdzIGNoYW5nZSB0byBzZXF1ZW50aWFsIHN0b3BpZm5vdCgpCkVycm9yIGluIHN0b3BpZm5vdChpcy5udW1lcmljKHkpKSA6IAogIGFyZ3VtZW50ICJ5IiBpcyBtaXNzaW5nLCB3aXRoIG5vIGRlZmF1bHQKPiB0cnkoYygxLCwyKSkKRXJyb3IgaW4gYygxLCAsIDIpIDogYXJndW1lbnQgMiBpcyBlbXB0eQo+ICMjIGNoYW5nZSBpbiAyLjguMCBtYWRlIHRoZXNlIGxlc3MgY2xlYXIKPiAKPiAKPiAjIyBlbXB0eSBsZXZlbHMgZnJvbSBjdXQuRGF0ZSAoY29zbWV0aWMsIFBSIzE0MTYyKQo+IHggPC0gYXMuRGF0ZShjKCIyMDA5LTAzLTIxIiwiMjAwOS0wMy0zMSIpKQo+IGN1dCh4LCBicmVha3M9ICJxdWFydGVyIikgIyBoYWQgdHdvIGxldmVscyBpbiAyLjEwLjEKWzFdIDIwMDktMDEtMDEgMjAwOS0wMS0wMQpMZXZlbHM6IDIwMDktMDEtMDEKPiBjdXQoYXMuUE9TSVhsdCh4KSwgYnJlYWtzPSAicXVhcnRlciIpClsxXSAyMDA5LTAxLTAxIDIwMDktMDEtMDEKTGV2ZWxzOiAyMDA5LTAxLTAxCj4gIyMgcmVtb3ZlIGVtcHR5IGZpbmFsIGxldmVsCj4gCj4gCj4gIyMgdGVzdHMgb2YgZXJyb3IgY29uZGl0aW9ucyBpbiBzd2l0Y2goKQo+IHN3aXRjaCgiYSIsIGE9LCBiPSwgYz0sIDQpClsxXSA0Cj4gc3dpdGNoKCJhIiwgYT0sIGI9LCBjPSwgKQo+IC5MYXN0LnZhbHVlCk5VTEwKPiBzd2l0Y2goImEiLCBhPSwgYj0sIGM9LCBpbnZpc2libGUoNCkpCj4gLkxhc3QudmFsdWUKWzFdIDQKPiAjIyB2aXNpYmxpbHR5IGNoYW5nZWQgaW4gMi4xMS4wCj4gCj4gCj4gIyMgcm91bmRpbmcgZXJyb3IgaW4gYWdncmVnYXRlLnRzCj4gIyMgaHR0cHM6Ly9zdGF0LmV0aHouY2gvcGlwZXJtYWlsL3ItZGV2ZWwvMjAxMC1BcHJpbC8wNTcyMjUuaHRtbAo+IHggPC0gcmVwKDY6MTAsIDE6NSkKPiBhZ2dyZWdhdGUoYXMudHMoeCksIEZVTiA9IG1lYW4sIG5kZWx0YXQgPSA1KQpUaW1lIFNlcmllczoKU3RhcnQgPSAxIApFbmQgPSAxMSAKRnJlcXVlbmN5ID0gMC4yIApbMV0gIDcuMiAgOC44IDEwLjAKPiB4IDwtIHJlcCg2OjEwLCAxOjUpCj4gYWdncmVnYXRlKGFzLnRzKHgpLCBGVU4gPSBtZWFuLCBuZnJlcXVlbmN5ID0gMC4yKQpUaW1lIFNlcmllczoKU3RhcnQgPSAxIApFbmQgPSAxMSAKRnJlcXVlbmN5ID0gMC4yIApbMV0gIDcuMiAgOC44IDEwLjAKPiAjIyBwbGF0Zm9ybS1kZXBlbmRlbnQgaW4gMi4xMC4xCj4gCj4gCj4gIyMgd2lzaCBvZiBQUiM5NTc0Cj4gYSA8LSBjKDAuMSwgMC4zLCAwLjQsIDAuNSwgMC4zLCAwLjAwMDEpCj4gZm9ybWF0LnB2YWwoYSwgZXBzPTAuMDEpClsxXSAiMC4xIiAgICIwLjMiICAgIjAuNCIgICAiMC41IiAgICIwLjMiICAgIjwwLjAxIgo+IGZvcm1hdC5wdmFsKGEsIGVwcz0wLjAxLCBuc21hbGwgPTIpClsxXSAiMC4xMCIgICIwLjMwIiAgIjAuNDAiICAiMC41MCIgICIwLjMwIiAgIjwwLjAxIgo+ICMjIGdyYW50ZWQgaW4gMi4xMi4wCj4gCj4gCj4gIyMgcHJpbnRpbmcgZnJhY3Rpb25hbCBkYXRlcwo+IGFzLkRhdGUoMC41LCBvcmlnaW49IjE5NjktMTItMzEiKQpbMV0gIjE5NjktMTItMzEiCj4gIyMgY2hhbmdlZCB0byByb3VuZCBkb3duIGluIDIuMTIuMQo+IAo+IAo+ICMjIHByaW50aW5nIGRhdGEgZnJhbWVzIHdpdGggICIiICBjb2xuYW1lcwo+IGRmciA8LSBkYXRhLmZyYW1lKHg9MTo2LCBDQz0xMToxNiwgZiA9IGdsKDMsMikpOyBjb2xuYW1lcyhkZnIpWzJdIDwtICIiCj4gZGZyCiAgeCAgICBmCjEgMSAxMSAxCjIgMiAxMiAxCjMgMyAxMyAyCjQgNCAxNCAyCjUgNSAxNSAzCjYgNiAxNiAzCj4gIyMgbm93IHByaW50cyB0aGUgc2FtZSBhcyBkYXRhLm1hdHJpeChkZnIpIGRvZXMgaGVyZQo+IAo+IAo+ICMjIGZvcm1hdCguLCB6ZXJvLnByaW50KSAtLT4gcHJldHR5TnVtKCkKPiBzZXQuc2VlZCg5KTsgbSA8LSBtYXRyaXgobG9jYWwoe3ggPC0gcm5vcm0oNDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduKHgpKnJvdW5kKGV4cCgyKngpKS8xMH0pLCA4LDUpCj4gbm9xdW90ZShmb3JtYXQobSwgemVyby5wcmludD0gIi4iKSkKICAgICBbLDFdIFssMl0gWywzXSBbLDRdIFssNV0KWzEsXSAgLiAgIC0wLjEgLTAuMSAgLiAgICAwLjgKWzIsXSAgLiAgICAuICAgIC4gICAyMS40ICAwLjEKWzMsXSAtMC4xICAxLjMgIDAuNiAgMC4yICAwLjEKWzQsXSAtMC4xICAuICAgIC4gICAgLiAgICAuICAKWzUsXSAgMC4yICAwLjEgIDMuNCAgMC4yICAwLjIKWzYsXSAgLiAgIC0wLjEgIDAuMSAgMC4yICAuICAKWzcsXSAgMS4xICA0LjAgLTAuMSAgLiAgICAwLjIKWzgsXSAtMC4xICAuICAgIDAuNiAtMC4xICAwLjEKPiAjIyB1c2VkIHRvIHByaW50ICAiLiAwIiBpbnN0ZWFkIG9mICIuICAiCj4gCj4gCj4gIyMgdGVzdHMgb2YgTkEgaGF2aW5nIHByZWNlZGVuY2Ugb3ZlciBOYU4gLS0gYWxsIG11c3QgcHJpbnQgIk5BIgo+IG1pbihjKE5hTiwgTkEpKQpbMV0gTkEKPiBtaW4oYyhOQSwgTmFOKSkgIyBOYU4gaW4gMi4xMi4yClsxXSBOQQo+IG1pbihOYU4sIE5BX3JlYWxfKSAgIyBOYU4gaW4gMi4xMi4yClsxXSBOQQo+IG1pbihOQV9yZWFsXywgTmFOKQpbMV0gTkEKPiBtYXgoYyhOYU4sIE5BKSkKWzFdIE5BCj4gbWF4KGMoTkEsIE5hTikpICAjIE5hTiBpbiAyLjEyLjIKWzFdIE5BCj4gbWF4KE5hTiwgTkFfcmVhbF8pICAjIE5hTiBpbiAyLjEyLjIKWzFdIE5BCj4gbWF4KE5BX3JlYWxfLCBOYU4pClsxXSBOQQo+ICMjIG1pZ2h0IGRlcGVuZCBvbiBjb21waWxlciA8IDIuMTMuMAo+IAo+IAo+ICMjIFBSIzE0NTE0Cj4gIyBEYXRhIGFyZSBmcm9tIENvbm92ZXIsICJOb25wYXJhbWV0cmljIFN0YXRpc3RpY3MiLCAzcmQgRWQsIHAuIDE5NywKPiAjIHJlLWFycmFuZ2VkIHRvIG1ha2UgYSBsb3dlci10YWlsIHRlc3QgdGhlIGlzc3VlIG9mIHJlbGV2YW5jZTogIHdlCj4gIyB3YW50IHRvIHNlZSBpZiBwcmVnbmFudCBudXJzZXMgZXhwb3NlZCB0byBuaXRyb3VzIG94aWRlIGhhdmUgaGlnaGVyCj4gIyByYXRlcyBvZiBtaXNjYXJyaWFnZSwgc3RyYXRpZnlpbmcgb24gdGhlIHR5cGUgb2YgbnVyc2UuCj4gTml0cm91cyA8LSBhcnJheShjKDMyLDIxMCw4LDI2LDE4LDIxLDMsMyw3LDc1LDAsMTApLCBkaW0gPSBjKDIsMiwzKSwKKyAgICAgICAgICAgICAgICAgIGRpbW5hbWVzID0gbGlzdChjKCJFeHBvc2VkIiwiTm90RXhwb3NlZCIpLAorICAgICAgICAgICAgICAgICAgYygiRnVsbFRlcm0iLCJNaXNjYXJyaWFnZSIpLAorICAgICAgICAgICAgICAgICAgYygiRGVudGFsQXNzdCIsIk9wZXJSb29tTnVyc2UiLCJPdXRwYXRpZW50TnVyc2UiKSkpCj4gbWFudGVsaGFlbi50ZXN0KE5pdHJvdXMsIGV4YWN0PVRSVUUsIGFsdGVybmF0aXZlPSJsZXNzIikKCglFeGFjdCBjb25kaXRpb25hbCB0ZXN0IG9mIGluZGVwZW5kZW5jZSBpbiAyIHggMiB4IGsgdGFibGVzCgpkYXRhOiAgTml0cm91cwpTID0gNTcsIHAtdmFsdWUgPSAwLjE5NTkKYWx0ZXJuYXRpdmUgaHlwb3RoZXNpczogdHJ1ZSBjb21tb24gb2RkcyByYXRpbyBpcyBsZXNzIHRoYW4gMQo5NSBwZXJjZW50IGNvbmZpZGVuY2UgaW50ZXJ2YWw6CiAwLjAwMDAwMCAxLjM4ODE5NwpzYW1wbGUgZXN0aW1hdGVzOgpjb21tb24gb2RkcyByYXRpbyAKICAgICAgICAwLjY2NTI0MTggCgo+IG1hbnRlbGhhZW4udGVzdChOaXRyb3VzLCBleGFjdD1GQUxTRSwgYWx0ZXJuYXRpdmU9Imxlc3MiKQoKCU1hbnRlbC1IYWVuc3plbCBjaGktc3F1YXJlZCB0ZXN0IHdpdGggY29udGludWl0eSBjb3JyZWN0aW9uCgpkYXRhOiAgTml0cm91cwpNYW50ZWwtSGFlbnN6ZWwgWC1zcXVhcmVkID0gMC43MTQzMiwgZGYgPSAxLCBwLXZhbHVlID0gMC4xOTkKYWx0ZXJuYXRpdmUgaHlwb3RoZXNpczogdHJ1ZSBjb21tb24gb2RkcyByYXRpbyBpcyBsZXNzIHRoYW4gMQo5NSBwZXJjZW50IGNvbmZpZGVuY2UgaW50ZXJ2YWw6CiAwLjAwMDAwMCAxLjI2MDA1MwpzYW1wbGUgZXN0aW1hdGVzOgpjb21tb24gb2RkcyByYXRpbyAKICAgICAgICAwLjY2NDUzNzQgCgo+ICMjIGV4YWN0ID0gRkFMU0UgZ2F2ZSB0aGUgd3JvbmcgdGFpbCBpbiAyLjEyLjIuCj4gCj4gCj4gIyMgc2NhbihzdHJpcC53aGl0ZT1UUlVFKSBjb3VsZCBzdHJpcCB0cmFpbGluZyAoYnV0IG5vdCBsZWFkaW5nKSBzcGFjZQo+ICMjIGluc2lkZSBxdW90ZWQgc3RyaW5ncy4KPiB3cml0ZUxpbmVzKCcgIiAgQSAgIjsgIkIiIDsiQyI7IiBEICI7IkUgIjsgIEYgIDtHICAnLCAiZm9vIikKPiBjYXQocmVhZExpbmVzKCJmb28iKSwgc2VwID0gIlxuIikKICIgIEEgICI7ICJCIiA7IkMiOyIgRCAiOyJFICI7ICBGICA7RyAgCj4gc2NhbignZm9vJywgbGlzdCgiIiksIHNlcD0iOyIpW1sxXV0KUmVhZCA3IHJlY29yZHMKWzFdICIgICBBICAiICIgQiAiICAgICJDIiAgICAgICIgRCAiICAgICJFICIgICAgICIgIEYgICIgICJHICAiICAgCj4gc2NhbignZm9vJywgIiIsIHNlcD0iOyIpClJlYWQgNyBpdGVtcwpbMV0gIiAgIEEgICIgIiBCICIgICAgIkMiICAgICAgIiBEICIgICAgIkUgIiAgICAgIiAgRiAgIiAgIkcgICIgICAKPiBzY2FuKCdmb28nLCBsaXN0KCIiKSwgc2VwPSI7Iiwgc3RyaXAud2hpdGUgPSBUUlVFKVtbMV1dClJlYWQgNyByZWNvcmRzClsxXSAiICBBICAiICJCIiAgICAgIkMiICAgICAiIEQgIiAgICJFICIgICAgIkYiICAgICAiRyIgICAgCj4gc2NhbignZm9vJywgIiIsIHNlcD0iOyIsIHN0cmlwLndoaXRlID0gVFJVRSkKUmVhZCA3IGl0ZW1zClsxXSAiICBBICAiICJCIiAgICAgIkMiICAgICAiIEQgIiAgICJFICIgICAgIkYiICAgICAiRyIgICAgCj4gdW5saW5rKCdmb28nKQo+IAo+IHdyaXRlTGluZXMoJyAiICBBICAiXG4gIkIiIFxuIkMiXG4iIEQgIlxuIkUgIlxuICBGICBcbkcgICcsICJmb28yIikKPiBzY2FuKCdmb28yJywgIiIpClJlYWQgNyBpdGVtcwpbMV0gIiAgQSAgIiAiQiIgICAgICJDIiAgICAgIiBEICIgICAiRSAiICAgICJGIiAgICAgIkciICAgIAo+IHNjYW4oJ2ZvbzInLCAiIiwgc3RyaXAud2hpdGU9VFJVRSkgIyBkb2N1bWVudGVkIHRvIGJlIGlnbm9yZWQgLi4uClJlYWQgNyBpdGVtcwpbMV0gIiAgQSAgIiAiQiIgICAgICJDIiAgICAgIiBEICIgICAiRSAiICAgICJGIiAgICAgIkciICAgIAo+IHVubGluaygnZm9vMicpCj4gIyMgQ2hhbmdlZCBmb3IgMi4xMy4wLCBmb3VuZCB3aGVuIGludmVzdGlnYXRpbmcgbm9uLWJ1ZyBQUiMxNDUyMi4KPiAKPiAKPiAjIyBQUiMxNDQ4ODogbWlzc2luZyB2YWx1ZXMgaW4gcmFuayBjb3JyZWxhdGlvbnMKPiBzZXQuc2VlZCgxKQo+IHggPC0gcnVuaWYoMTApCj4geSA8LSBydW5pZigxMCkKPiB4WzNdIDwtIE5BOyB5WzVdIDwtIE5BCj4geHkgPC0gY2JpbmQoeCwgeSkKPiAKPiBjb3IoeCwgeSwgbWV0aG9kID0gInNwZWFybWFuIiwgdXNlID0gImNvbXBsZXRlLm9icyIpClsxXSAwLjIzODA5NTIKPiBjb3IoeCwgeSwgbWV0aG9kID0gInNwZWFybWFuIiwgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlLm9icyIpClsxXSAwLjIzODA5NTIKPiBjb3IobmEub21pdCh4eSksICBtZXRob2QgPSAic3BlYXJtYW4iLCB1c2UgPSAiY29tcGxldGUub2JzIikKICAgICAgICAgIHggICAgICAgICB5CnggMS4wMDAwMDAwIDAuMjM4MDk1Mgp5IDAuMjM4MDk1MiAxLjAwMDAwMDAKPiBjb3IoeHksICBtZXRob2QgPSAic3BlYXJtYW4iLCB1c2UgPSAiY29tcGxldGUub2JzIikKICAgICAgICAgIHggICAgICAgICB5CnggMS4wMDAwMDAwIDAuMjM4MDk1Mgp5IDAuMjM4MDk1MiAxLjAwMDAwMDAKPiBjb3IoeHksICBtZXRob2QgPSAic3BlYXJtYW4iLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIikKICAgICAgICAgIHggICAgICAgICB5CnggMS4wMDAwMDAwIDAuMjM4MDk1Mgp5IDAuMjM4MDk1MiAxLjAwMDAwMDAKPiAjIyBpbmNvbnNpc3RlbnQgaW4gUiA8IDIuMTMuMAo+IAo+IAo+ICMjIGludGVnZXIgb3ZlcmZsb3cgaW4gcm93c3VtKCkgd2VudCB1bmRldGVjdGVkCj4gIyBodHRwczovL3N0YXQuZXRoei5jaC9waXBlcm1haWwvci1kZXZlbC8yMDExLU1hcmNoLzA2MDMwNC5odG1sCj4geCA8LSAyZTlMCj4gcm93c3VtKGMoeCwgeCksIGMoImEiLCAiYSIpKQogIFssMV0KYSAgIE5BCj4gcm93c3VtKGRhdGEuZnJhbWUoeiA9IGMoeCwgeCkpLCBjKCJhIiwgImEiKSkKICAgegphIE5BCj4gIyMgb3ZlcmZsb3cgaW4gUiA8IDIuMTMuMC4KPiAKPiAKPiAjIyBtZXRob2QgZGlzcGF0Y2ggaW4gW1suZGF0YS5mcmFtZToKPiAjIyBodHRwczovL3N0YXQuZXRoei5jaC9waXBlcm1haWwvci1kZXZlbC8yMDExLUFwcmlsLzA2MDQwOS5odG1sCj4gZCA8LSBkYXRhLmZyYW1lKG51bSA9IDE6NCwKKyAgICAgICAgICAgZmFjID0gZmFjdG9yKGxldHRlcnNbMTE6MTRdLCBsZXZlbHMgPSBsZXR0ZXJzWzE6MTVdKSwKKyAgICAgICAgICAgZGF0ZSA9IGFzLkRhdGUoIjIwMTEtMDQtMDEiKSArICgwOjMpLAorICAgICAgICAgICBwdiA9IHBhY2thZ2VfdmVyc2lvbihjKCIxLjItMyIsICI0LjUiLCAiNi43IiwgIjguOS0xMCIpKSkKPiBmb3IgKGkgaW4gc2VxX2Fsb25nKGQpKSBwcmludChkW1sxLCBpXV0pClsxXSAxClsxXSBrCkxldmVsczogYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8KWzFdICIyMDExLTA0LTAxIgpbMV0gJzEuMi4zJwo+ICMjIGRpZCBub3QgZGlzcGF0Y2ggaW4gUiA8IDIuMTQuMAo+IAo+IAo+ICMjIHNvbWUgdGVzdHMgb2YgMjQ6MDAgYXMgbWlkbmlnaHQKPiBhcy5QT1NJWGx0KCIyMDExLTA1LTE2IDI0OjAwOjAwIiwgdHogPSAiR01UIikKWzFdICIyMDExLTA1LTE3IEdNVCIKPiBhcy5QT1NJWGx0KCIyMDEwLTAxLTMxIDI0OjAwOjAwIiwgdHogPSAiR01UIikKWzFdICIyMDEwLTAyLTAxIEdNVCIKPiBhcy5QT1NJWGx0KCIyMDExLTAyLTI4IDI0OjAwOjAwIiwgdHogPSAiR01UIikKWzFdICIyMDExLTAzLTAxIEdNVCIKPiBhcy5QT1NJWGx0KCIyMDA4LTAyLTI4IDI0OjAwOjAwIiwgdHogPSAiR01UIikKWzFdICIyMDA4LTAyLTI5IEdNVCIKPiBhcy5QT1NJWGx0KCIyMDA4LTAyLTI5IDI0OjAwOjAwIiwgdHogPSAiR01UIikKWzFdICIyMDA4LTAzLTAxIEdNVCIKPiBhcy5QT1NJWGx0KCIyMDEwLTEyLTMxIDI0OjAwOjAwIiwgdHogPSAiR01UIikKWzFdICIyMDExLTAxLTAxIEdNVCIKPiAjIyBuZXcgaW4gMi4xNC4wCj4gCj4gCj4gIyMgVW53YXJyYW50ZWQgY29udmVyc2lvbiBvZiBsb2dpY2FsIHZhbHVlcwo+IHRyeShkb3VibGUoRkFMU0UpKQpFcnJvciBpbiBkb3VibGUoRkFMU0UpIDogaW52YWxpZCAnbGVuZ3RoJyBhcmd1bWVudAo+IHggPC0gMTozCj4gdHJ5KGxlbmd0aCh4KSA8LSBUUlVFKQpFcnJvciBpbiBsZW5ndGgoeCkgPC0gVFJVRSA6IGludmFsaWQgdmFsdWUKPiAjIyBjb2VyY2VkIHRvIGludGVnZXIgaW4gMi4xMy54Cj4gCj4gCj4gIyMgZmlsdGVyKHJlY3Vyc2l2ZSA9IFRSVUUpIG9uIGlucHV0IHdpdGggTkFzCj4gIyBodHRwczovL3N0YXQuZXRoei5jaC9waXBlcm1haWwvci1kZXZlbC8yMDExLUp1bHkvMDYxNTQ3Lmh0bWwKPiB4IDwtIGMoMTo0LCBOQSwgNjo5KQo+IGNiaW5kKHgsICIxIj1maWx0ZXIoeCwgMC41LCBtZXRob2Q9InJlY3Vyc2l2ZSIpLAorICAgICAgICAgICIyIj1maWx0ZXIoeCwgYygwLjUsIDAuMCksIG1ldGhvZD0icmVjdXJzaXZlIiksCisgICAgICAgICAgIjMiPWZpbHRlcih4LCBjKDAuNSwgMC4wLCAwLjApLCBtZXRob2Q9InJlY3Vyc2l2ZSIpKQpUaW1lIFNlcmllczoKU3RhcnQgPSAxIApFbmQgPSA5IApGcmVxdWVuY3kgPSAxIAogICB4ICAgICAxICAgICAyICAgICAzCjEgIDEgMS4wMDAgMS4wMDAgMS4wMDAKMiAgMiAyLjUwMCAyLjUwMCAyLjUwMAozICAzIDQuMjUwIDQuMjUwIDQuMjUwCjQgIDQgNi4xMjUgNi4xMjUgNi4xMjUKNSBOQSAgICBOQSAgICBOQSAgICBOQQo2ICA2ICAgIE5BICAgIE5BICAgIE5BCjcgIDcgICAgTkEgICAgTkEgICAgTkEKOCAgOCAgICBOQSAgICBOQSAgICBOQQo5ICA5ICAgIE5BICAgIE5BICAgIE5BCj4gIyMgTkFzIGluIHdyb25nIHBsYWNlIGluIFIgPD0gMi4xMy4xLgo+IAo+IAo+ICMjIFBSIzE0Njc5LiAgRm9ybWF0IGRlcGVuZHMgaWYgVFogaXMgc2V0Lgo+IHggPC0gYXMuUE9TSVhsdChjKCIyMDEwLTAyLTI3IDIyOjMwOjMzIiwgIjIwMDktMDgtMDkgMDY6MDE6MDMiLAorICAgICAgICAgICAgICAgICAgICIyMDEwLTA3LTIzIDE3OjI5OjU5IikpCj4gc3RvcGlmbm90KCFpcy5uYSh0cnVuYyh4LCB1bml0cyA9ICJkYXlzIilbMTozXSkpCj4gIyMgZ2F2ZSBOQXMgYWZ0ZXIgdGhlIGZpcnN0IGluIFIgPCAyLjEzLjIKPiAKPiAKPiAjIyBleHBsaWNpdCBlcnJvciBtZXNzYWdlIGZvciBzaWxseSBpbnB1dCAodG9sID0gMCkKPiBhYSA8LSBjKDEsIDIsIDMsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDEyLCAxMywgMTQpCj4gdHJ5KHNtb290aC5zcGxpbmUoYWEsIHNlcV9hbG9uZyhhYSkpKQpFcnJvciBpbiBzbW9vdGguc3BsaW5lKGFhLCBzZXFfYWxvbmcoYWEpKSA6IAogICd0b2wnIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUgYW5kIGZpbml0ZQo+IGZpdCA8LSBzbW9vdGguc3BsaW5lKGFhLCBzZXFfYWxvbmcoYWEpLCB0b2wgPSAwLjEpCj4gIyBhY3R1YWwgb3V0cHV0IGlzIHRvbyB1bnN0YWJsZSB0byBkaWZmLgo+ICMjIEJldHRlciBtZXNzYWdlIGZyb20gUiAyLjE0LjIKPiAKPiAKPiAjIyBQUiMxNDg0MAo+IGQgPC0gZGF0YS5mcmFtZSh4ID0gMTo5LAorICAgICAgICAgICAgICAgICB5ID0gMTo5ICsgMC4xKmMoMSwgMiwgLTEsIDAsIDEsIDEwMDAsIDAsIDEsIC0xKSwKKyAgICAgICAgICAgICAgICAgdyA9IGMoMSwgMC41LCAyLCAxLCAyLCAwLCAxLCAyLCAxKSkKPiBmaXQgPC0gbG0oeSB+IHgsIGRhdGE9ZCwgd2VpZ2h0cz13KQo+IHN1bW1hcnkoZml0KQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiB4LCBkYXRhID0gZCwgd2VpZ2h0cyA9IHcpCgpXZWlnaHRlZCBSZXNpZHVhbHM6CiAgICBNaW4gICAgICAxUSAgTWVkaWFuICAgICAgM1EgICAgIE1heCAKLTAuMTg4MyAtMC4wMzEwICAwLjAwMDAgIDAuMTAwNiAgMC4xMTY1IAoKQ29lZmZpY2llbnRzOgogICAgICAgICAgICBFc3RpbWF0ZSBTdGQuIEVycm9yIHQgdmFsdWUgUHIoPnx0fCkgICAgCihJbnRlcmNlcHQpICAwLjAzOTQ5ICAgIDAuMDg2MTIgICAwLjQ1OSAgICAwLjY2MyAgICAKeCAgICAgICAgICAgIDAuOTk3ODggICAgMC4wMTUwMiAgNjYuNDE5IDcuODNlLTEwICoqKgotLS0KU2lnbmlmLiBjb2RlczogIDAgJyoqKicgMC4wMDEgJyoqJyAwLjAxICcqJyAwLjA1ICcuJyAwLjEgJyAnIDEKClJlc2lkdWFsIHN0YW5kYXJkIGVycm9yOiAwLjEyMzIgb24gNiBkZWdyZWVzIG9mIGZyZWVkb20KTXVsdGlwbGUgUi1zcXVhcmVkOiAgMC45OTg2LAlBZGp1c3RlZCBSLXNxdWFyZWQ6ICAwLjk5ODQgCkYtc3RhdGlzdGljOiAgNDQxMiBvbiAxIGFuZCA2IERGLCAgcC12YWx1ZTogNy44MzRlLTEwCgo+ICMjIGlzc3VlIGlzIGhvdyB0aGUgNS1udW1iZXIgc3VtbWFyeSBpcyBsYWJlbGxlZAo+ICMjIChhbHNvIHNlZW4gaW4gZXhhbXBsZShjYXNlLm5hbWVzKSkKPiAKPiAKPiAjIyBpcy51bnNvcnRlZCBnb3QgaXQgYmFja3dhcmRzIGZvciBkYXRhZnJhbWVzIG9mIG1vcmUgdGhhbiBvbmUgY29sdW1uCj4gIyMgaXQgaXMgc3VwcG9zZWQgdG8gbG9vayBmb3IgdmlvbGF0aW9ucyBvZiB4WzJdID4geFsxXSwgeFszXSA+IHhbMl0sIGV0Yy4KPiBpcy51bnNvcnRlZChkYXRhLmZyYW1lKHg9MjoxKSkKWzFdIEZBTFNFCj4gaXMudW5zb3J0ZWQoZGF0YS5mcmFtZSh4PTE6MiwgeT0zOjQpKQpbMV0gRkFMU0UKPiBpcy51bnNvcnRlZChkYXRhLmZyYW1lKHg9Mzo0LCB5PTE6MikpClsxXSBUUlVFCj4gIyMgUiA8IDIuMTUuMSBnb3QgdGhlc2UgYXMgRkFMU0UsIFRSVUUsIEZBTFNFLgo+IAo+IAo+IGxpYnJhcnkoIm1ldGhvZHMiKSMgKG5vdCBuZWVkZWQgaGVyZSkKPiBhc3NlcnRFcnJvciA8LSB0b29sczo6YXNzZXJ0RXJyb3IKPiBhc3NlcnRFcnJvciggZ2V0TWV0aG9kKGxzLCAiYmFyIiwgZmRlZj1scyksIHZlcmJvc2U9VFJVRSkKQXNzZXJ0ZWQgZXJyb3I6IG5vIGdlbmVyaWMgZnVuY3Rpb24gZm91bmQgZm9yICdscycKPiBhc3NlcnRFcnJvciggZ2V0TWV0aG9kKHNob3csICJiYXIiKSwgdmVyYm9zZT1UUlVFKQpBc3NlcnRlZCBlcnJvcjogbm8gbWV0aG9kIGZvdW5kIGZvciBmdW5jdGlvbiAnc2hvdycgYW5kIHNpZ25hdHVyZSBiYXIKPiAjIyBSIDwgMi4xNS4xIGdhdmUKPiAjIyAgIGNhbm5vdCBjb2VyY2UgdHlwZSAnY2xvc3VyZScgdG8gdmVjdG9yIG9mIHR5cGUgJ2NoYXJhY3RlcicKPiAKPiAKPiAjIyBjb3JuZXIgY2FzZXMgZm9yIGFycmF5Cj4gIyBhbGxvd2VkLCBnYXZlIG5vbi1hcnJheSBpbiAyLjE1LngKPiB0cnkoYXJyYXkoMSwgaW50ZWdlcigpKSkKRXJyb3IgaW4gYXJyYXkoMSwgaW50ZWdlcigpKSA6ICdkaW1zJyBjYW5ub3QgYmUgb2YgbGVuZ3RoIDAKPiAjIGlmIG5vIGRpbXMsIGFuIGVycm9yIHRvIHN1cHBseSBkaW1uYW1lcwo+IHRyeShhcnJheSgxLCBpbnRlZ2VyKCksIGxpc3QoMSwgMikpKQpFcnJvciBpbiBhcnJheSgxLCBpbnRlZ2VyKCksIGxpc3QoMSwgMikpIDogJ2RpbXMnIGNhbm5vdCBiZSBvZiBsZW5ndGggMAo+ICMjCj4gCj4gCj4gIyMgaXMubmEoKSBvbiBhbiBlbXB0eSBkYXRhZnJhbWUgKFBSIzE0MDU5KQo+IERGIDwtIGRhdGEuZnJhbWUocm93Lm5hbWVzPTE6MykKPiBpcy5uYShERik7IHN0ciguTGFzdC52YWx1ZSkKIAoxCjIKMwogbG9naVsxOjMsIDAgXSAKIC0gYXR0cigqLCAiZGltbmFtZXMiKT1MaXN0IG9mIDIKICAuLiQgOiBjaHIgWzE6M10gIjEiICIyIiAiMyIKICAuLiQgOiBOVUxMCj4gaXMubmEoREZbRkFMU0UsIF0pOyBzdHIoLkxhc3QudmFsdWUpCjwwIHggMCBtYXRyaXg+CiBsb2dpWzAgLCAwIF0gCj4gIyMgZmlyc3QgZmFpbGVkIGluIFIgMi4xNS4xLCBzZWNvbmQgZ2F2ZSBOVUxMCj4gCj4gCj4gIyMgc3BsaXQoKSB3aXRoIGRvdHMgaW4gbGV2ZWxzCj4gZGYgPC0gZGF0YS5mcmFtZSh4ID0gcmVwKGMoImEiLCAiYS5iIiksIDNMKSwgeSA9IHJlcChjKCJiLmMiLCAiYyIpLCAzTCksCisgICAgICAgICAgICAgICAgICB6ID0gMTo2KQo+IGRmCiAgICB4ICAgeSB6CjEgICBhIGIuYyAxCjIgYS5iICAgYyAyCjMgICBhIGIuYyAzCjQgYS5iICAgYyA0CjUgICBhIGIuYyA1CjYgYS5iICAgYyA2Cj4gc3BsaXQoZGYsIGRmWywgMToyXSkgIyBkZWZhdWx0IGlzIHNlcCA9ICIuIgokYS5iLmMKICAgIHggICB5IHoKMSAgIGEgYi5jIDEKMiBhLmIgICBjIDIKMyAgIGEgYi5jIDMKNCBhLmIgICBjIDQKNSAgIGEgYi5jIDUKNiBhLmIgICBjIDYKCiRhLmIuYi5jClsxXSB4IHkgego8MCByb3dzPiAob3IgMC1sZW5ndGggcm93Lm5hbWVzKQoKJGEuYwpbMV0geCB5IHoKPDAgcm93cz4gKG9yIDAtbGVuZ3RoIHJvdy5uYW1lcykKCj4gc3BsaXQoZGYsIGRmWywgMToyXSwgc2VwID0gIjoiKQokYGE6Yi5jYAogIHggICB5IHoKMSBhIGIuYyAxCjMgYSBiLmMgMwo1IGEgYi5jIDUKCiRgYS5iOmIuY2AKWzFdIHggeSB6CjwwIHJvd3M+IChvciAwLWxlbmd0aCByb3cubmFtZXMpCgokYGE6Y2AKWzFdIHggeSB6CjwwIHJvd3M+IChvciAwLWxlbmd0aCByb3cubmFtZXMpCgokYGEuYjpjYAogICAgeCB5IHoKMiBhLmIgYyAyCjQgYS5iIGMgNAo2IGEuYiBjIDYKCj4gIyMKPiAKPiAKPiAjIyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNvcnQubGlzdCBhbmQgb3JkZXIKPiB6IDwtIGMoNEwsIE5BLCAyTCwgM0wsIE5BLCAxTCkKPiBvcmRlcih6LCBuYS5sYXN0ID0gTkEpClsxXSA2IDMgNCAxCj4gc29ydC5saXN0KHosIG5hLmxhc3QgPSBOQSkKWzFdIDQgMiAzIDEKPiBzb3J0Lmxpc3QoeiwgbmEubGFzdCA9IE5BLCBtZXRob2QgPSAic2hlbGwiKQpbMV0gNCAyIDMgMQo+IHNvcnQubGlzdCh6LCBuYS5sYXN0ID0gTkEsIG1ldGhvZCA9ICJxdWljayIpClsxXSA0IDIgMyAxCj4gc29ydC5saXN0KHosIG5hLmxhc3QgPSBOQSwgbWV0aG9kID0gInJhZGl4IikKWzFdIDQgMiAzIDEKPiAjIyBEaWZmZXJlbmNlcyBmaXJzdCBkb2N1bWVudGVkIGluIFIgMi4xNS4yCj4gCj4gCj4gIyMgUFIjMTUwMjg6IG5hbWVzIGxvbmdlciB0aGFuIGN1dG9mZiBOQiAoPSAxMDAwKQo+IE5CIDwtIDEwMDAKPiBsbnMgPC0gY2FwdHVyZS5vdXRwdXQoCisgICAgIHNldE5hbWVzKGMoMjU1LCAxMDAwLCAzMDAwMCksCisgICAgICAgICAgICAgIGMocGFzdGUocmVwLmludCgiYSIsIE5CKzIpLCBjb2xsYXBzZT0iIiksCisgICAgICAgICAgICAgICAgcGFzdGUocmVwLmludCgiYiIsIE5CKzIpLCBjb2xsYXBzZT0iIiksCisgICAgICAgICAgICAgICAgcGFzdGUocmVwLmludCgiYyIsIE5CKzIpLCBjb2xsYXBzZT0iIikpKSkKPiBzdWIoIl4gKyIsICcnLCBsbnNbMiogMTozXSkKWzFdICIyNTUgIiAgICIxMDAwICIgICIzMDAwMCAiCj4gIyMgKnZhbHVlcyogd2VyZSBjdXRvZmYgd2hlbiBwcmludGVkCj4gCj4gCj4gIyMgYWxsb3dzIGRlcGFyc2UgbGltaXRzIHRvIGJlIHNldAo+IGZvcm0gPC0gcmVhbGx5bG9uZ25hbWV5IH4gcmVhbGx5bG9uZ25hbWV4MCArIHJlYWxseWxvbmduYW1leDEgKyByZWFsbHlsb25nbmFtZXgyICsgcmVhbGx5bG9uZ25hbWV4Mwo+IGZvcm0KcmVhbGx5bG9uZ25hbWV5IH4gcmVhbGx5bG9uZ25hbWV4MCArIHJlYWxseWxvbmduYW1leDEgKyByZWFsbHlsb25nbmFtZXgyICsgCiAgICByZWFsbHlsb25nbmFtZXgzCj4gb3AgPC0gb3B0aW9ucyhkZXBhcnNlLmN1dG9mZj04MCkKPiBmb3JtCnJlYWxseWxvbmduYW1leSB+IHJlYWxseWxvbmduYW1leDAgKyByZWFsbHlsb25nbmFtZXgxICsgcmVhbGx5bG9uZ25hbWV4MiArIHJlYWxseWxvbmduYW1leDMKPiBvcHRpb25zKGRlcGFyc2UuY3V0b2ZmPTUwKQo+IGZvcm0KcmVhbGx5bG9uZ25hbWV5IH4gcmVhbGx5bG9uZ25hbWV4MCArIHJlYWxseWxvbmduYW1leDEgKyAKICAgIHJlYWxseWxvbmduYW1leDIgKyByZWFsbHlsb25nbmFtZXgzCj4gb3B0aW9ucyhvcCkKPiAjIyBmaXhlZCB0byA2MCBpbiBSIDIuMTUueAo+IAo+IAo+ICMjIFBSIzE1MTc5OiB1c2VyIGRlZmluZWQgYmluYXJ5IG9wcyB3ZXJlIG5vdCBkZXBhcnNlZCBwcm9wZXJseQo+IHF1b3RlKCBgJV4lYCh4LCBgJV4lYCh5LHopKSApCnggJV4lICh5ICVeJSB6KQo+IHF1b3RlKCBgJV4lYCh4KSApCmAlXiVgKHgpCj4gIyMKPiAKPiAKPiAjIyBBbm9ueW1vdXMgZnVuY3Rpb24gY2FsbHMgd2VyZSBub3QgZGVwYXJzZWQgcHJvcGVybHkKPiBzdWJzdGl0dXRlKGYoeCksIGxpc3QoZiA9IGZ1bmN0aW9uKHgpIHggKyAxKSkKKGZ1bmN0aW9uKHgpIHggKyAxKSh4KQo+IHN1YnN0aXR1dGUoZih4KSwgbGlzdChmID0gcXVvdGUoZnVuY3Rpb24oeCkgeCArIDEpKSkKKGZ1bmN0aW9uKHgpIHggKyAxKSh4KQo+IHN1YnN0aXR1dGUoZih4KSwgbGlzdChmID0gcXVvdGUoZitnKSkpCihmICsgZykoeCkKPiBzdWJzdGl0dXRlKGYoeCksIGxpc3QoZiA9IHF1b3RlKGJhc2U6Om1lYW4pKSkKYmFzZTo6bWVhbih4KQo+IHN1YnN0aXR1dGUoZih4KSwgbGlzdChmID0gcXVvdGUoYVtuXSkpKQphW25dKHgpCj4gc3Vic3RpdHV0ZShmKHgpLCBsaXN0KGYgPSBxdW90ZShnKHkpKSkpCmcoeSkoeCkKPiAjIyBUaGUgZmlyc3QgdGhyZWUgbmVlZCBwYXJlbnMsIHRoZSBsYXN0IHRocmVlIGRvbid0Lgo+IAo+IAo+ICMjIFBSIzE1MjQ3IDogc3RyKCkgb24gaW52YWxpZCBkYXRhIGZyYW1lIG5hbWVzICh3aGVyZSBwcmludCgpIHdvcmtzKToKPiBkIDwtIGRhdGEuZnJhbWUoMTozLCAiQiIsIDQpOyBuYW1lcyhkKSA8LSBjKCJBIiwgIkJceGJhIiwiQ1x4YWJjZCIpCj4gc3RyKGQpCidkYXRhLmZyYW1lJzoJMyBvYnMuIG9mICAzIHZhcmlhYmxlczoKICQgQSAgICAgIDogaW50ICAxIDIgMwogJCBCuiAgOiBGYWN0b3Igdy8gMSBsZXZlbCAiQiI6IDEgMSAxCiAkIEOrY2Q6IG51bSAgNCA0IDQKPiAjIyBnYXZlIGFuIGVycm9yIGluIFIgPD0gMy4wLjAKPiAKPiAKPiAjIyBQUiMxNTI5OSA6IGFkZGluZyBhIHNpbXBsZSB2ZWN0b3IgdG8gYSBjbGFzc2VkIG9iamVjdCBwcm9kdWNlZCBhIGJhZCByZXN1bHQ6Cj4gMToyICsgdGFibGUoMToyKQoKMSAyIAoyIDMgCj4gIyMgUHJpbnRlZCB0aGUgY2xhc3MgYXR0cmlidXRlIGluIFIgPD0gMy4wLjAKPiAKPiAKPiAjIyBQUiMxNTMxMSA6IHJlZ21hdGNoZXM8LSBtaXNoYW5kbGVkIHJlZ2V4cHIgcmVzdWx0cy4KPiAgIHggPC0gYygnMScsICdCJywgJzMnKQo+ICAgbSA8LSByZWdleHByKCdcXGQnLCB4KQo+ICAgcmVnbWF0Y2hlcyh4LCBtKSA8LSBjKCdBJywgJ0MnKQo+ICAgcHJpbnQoeCkKWzFdICJBIiAiQiIgIkMiCj4gIyMgR2F2ZSBhIHdhcm5pbmcgYW5kIGEgd3JvbmcgcmVzdWx0IHVwIHRvIDMuMC4xCj4gCj4gCj4gIyMgQmFkIHdhcm5pbmcgZm91bmQgYnkgUmFkZm9yZCBOZWFsCj4gICBzYXZlb3B0IDwtIG9wdGlvbnMod2FyblBhcnRpYWxNYXRjaERvbGxhcj1UUlVFKQo+ICAgcGwgPC0gcGFpcmxpc3QoYWJjPTEsIGRlZj0yKQo+ICAgcGwkYWIKWzFdIDEKV2FybmluZyBtZXNzYWdlOgpJbiBwbCRhYiA6IHBhcnRpYWwgbWF0Y2ggb2YgJ2FiJyB0byAnYWJjJwo+ICAgaWYgKCFpcy5udWxsKHNhdmVvcHRbWyJ3YXJuUGFydGlhbE1hdGNoRG9sbGFyIl1dKSkgb3B0aW9ucyhzYXZlb3B0KQo+ICMjICdhYmMnIHdhcyBqdXN0ICcnCj4gCj4gCj4gIyMgc2VxKCkgd2l0aCBOYU4gZXRjIGlucHV0cyBub3cgZ2l2ZXMgZXhwbGljaXQgZXJyb3IgbWVzc2FnZXMKPiB0cnkoc2VxKE5hTikpCkVycm9yIGluIHNlcS5kZWZhdWx0KE5hTikgOiAnZnJvbScgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIKPiB0cnkoc2VxKHRvID0gTmFOKSkKRXJyb3IgaW4gc2VxLmRlZmF1bHQodG8gPSBOYU4pIDogJ3RvJyBtdXN0IGJlIGEgZmluaXRlIG51bWJlcgo+IHRyeShzZXEoTmFOLCBOYU4pKQpFcnJvciBpbiBzZXEuZGVmYXVsdChOYU4sIE5hTikgOiAnZnJvbScgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIKPiB0cnkoc2VxLmludChOYU4pKQpFcnJvciBpbiBzZXEuaW50KE5hTikgOiAnZnJvbScgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIKPiB0cnkoc2VxLmludCh0byA9IE5hTikpCkVycm9yIGluIHNlcS5pbnQodG8gPSBOYU4pIDogJ3RvJyBtdXN0IGJlIGEgZmluaXRlIG51bWJlcgo+IHRyeShzZXEuaW50KE5hTiwgTmFOKSkKRXJyb3IgaW4gc2VxLmludChOYU4sIE5hTikgOiAnZnJvbScgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIKPiAjIyBSIDMuMC4xIGdhdmUgbWVzc2FnZXMgZnJvbSAnOicgb3IgYWJvdXQgbmVnYXRpdmUtbGVuZ3RoIHZlY3RvcnMuCj4gCj4gCj4gIyMgU29tZSBkaW1uYW1lcyB3ZXJlIGxvc3QgZnJvbSAxRCBhcnJheXM6IFBSIzE1MzAxCj4geCA8LSBhcnJheSgwOjIsIGRpbT0zLCBkaW1uYW1lcz1saXN0KGQxPUxFVFRFUlNbMTozXSkpCj4geApkMQpBIEIgQyAKMCAxIDIgCj4geFtdCmQxCkEgQiBDIAowIDEgMiAKPiB4WzM6MV0KZDEKQyBCIEEgCjIgMSAwIAo+IHggPC0gYXJyYXkoMCwgZGltbmFtZXM9bGlzdChkMT0iQSIpKQo+IHgKZDEKQSAKMCAKPiB4W10KZDEKQSAKMCAKPiB4W2Ryb3AgPSBGQUxTRV0KZDEKQSAKMCAKPiAjIyBsb3N0IGRpbW5hbWVzIGluIDMuMC4xCj4gCj4gCj4gIyMgUFIjMTUzOTYKPiBsb2FkKGZpbGUucGF0aChTeXMuZ2V0ZW52KCdTUkNESVInKSwgJ2FyaW1hLnJkYScpKQo+IChmMSA8LSBhcmltYSh4LCB4cmVnID0geHJlZywgb3JkZXIgPSBjKDEsMSwxKSwgc2Vhc29uYWwgPSBjKDEsMCwxKSkpCgpDYWxsOgphcmltYSh4ID0geCwgb3JkZXIgPSBjKDEsIDEsIDEpLCBzZWFzb25hbCA9IGMoMSwgMCwgMSksIHhyZWcgPSB4cmVnKQoKQ29lZmZpY2llbnRzOgogICAgICAgICAgYXIxICAgICBtYTEgICAgc2FyMSAgICAgc21hMSAgICB4cmVnCiAgICAgIC0wLjQ3OTEgIDAuMzUyNSAgMC45ODc3ICAtMC44Mjk1ICAwLjM1NzQKcy5lLiAgIDAuNDE2MiAgMC40NDIwICAwLjAzMjkgICAwLjIyMDkgIDAuNzQ0MAoKc2lnbWFeMiBlc3RpbWF0ZWQgYXMgMC4wMDE0OTk6ICBsb2cgbGlrZWxpaG9vZCA9IDE2My43OSwgIGFpYyA9IC0zMTUuNTgKPiAoZjIgPC0gYXJpbWEoZGlmZih4KSwgeHJlZyA9IGRpZmYoeHJlZyksIG9yZGVyID0gYygxLDAsMSksIHNlYXNvbmFsID0gYygxLDAsMSksCisgICAgICAgICAgICAgIGluY2x1ZGUubWVhbiA9IEZBTFNFKSkKCkNhbGw6CmFyaW1hKHggPSBkaWZmKHgpLCBvcmRlciA9IGMoMSwgMCwgMSksIHNlYXNvbmFsID0gYygxLCAwLCAxKSwgeHJlZyA9IGRpZmYoeHJlZyksIAogICAgaW5jbHVkZS5tZWFuID0gRkFMU0UpCgpDb2VmZmljaWVudHM6CiAgICAgICAgICBhcjEgICAgIG1hMSAgICBzYXIxICAgICBzbWExICBkaWZmKHhyZWcpCiAgICAgIC0wLjQ3OTEgIDAuMzUyNiAgMC45ODc3ICAtMC44Mjk1ICAgICAgMC4zNTcxCnMuZS4gICAwLjQxNjIgIDAuNDQyMCAgMC4wMzI5ICAgMC4yMjEwICAgICAgMC43NDQxCgpzaWdtYV4yIGVzdGltYXRlZCBhcyAwLjAwMTQ5OTogIGxvZyBsaWtlbGlob29kID0gMTYzLjc5LCAgYWljID0gLTMxNS41OAo+IHN0b3BpZm5vdChhbGwuZXF1YWwoY29lZihmMSksIGNvZWYoZjIpLCB0b2xlcmFuY2UgPSAxZS0zLCBjaGVjay5uYW1lcyA9IEZBTFNFKSkKPiAjIyBmaXJzdCBnYXZlIGxvY2FsIG9wdGltIGluIDMuMC4xCj4gCj4gIyMgYWxsLmVxdWFsIGFsd2F5cyBjaGVja2VkIHRoZSBuYW1lcwo+IHggPC0gYyhhPTEsIGI9MikKPiB5IDwtIGMoYT0xLCBkPTIpCj4gYWxsLmVxdWFsKHgsIHksIGNoZWNrLm5hbWVzID0gRkFMU0UpClsxXSBUUlVFCj4gIyMgZmFpbGVkIG9uIG1pc21hdGNoZWQgYXR0cmlidXRlcwo+IAo+IAo+ICMjIFBSIzE1NDExLCBwbHVzIGRpZ2l0cyBjaGFuZ2UKPiBmb3JtYXQoOTk5MiwgZGlnaXRzID0gMykKWzFdICI5OTkyIgo+IGZvcm1hdCg5OTk2LCBkaWdpdHMgPSAzKQpbMV0gIjk5OTYiCj4gZm9ybWF0KDAuMDAwMiwgZGlnaXRzID0gMCwgbnNtYWxsID0gMikKWzFdICIwLjAwIgo+IGZvcm1hdChwaSoxMCwgZGlnaXRzID0gMCwgbnNtYWxsID0gMSkKWzFdICIzMS40Igo+ICMjIHNlY29uZCBhZGRlZCBhbiBleHRyYSBzcGFjZTsgM3JkIGFuZCA0dGggd2VyZSBub3QgYWxsb3dlZC4KPiAKPiAjIyBhbmQgb25lIGJyYW5jaCBvZiB0aGlzIHdhcyB3cm9uZzoKPiB4eCA8LSBjKC04Njg3MDI2OCwgMTA3ODMzMzU4LCAzMDI1MzY5ODUsIDQ4MTAxNTMwOSwgNjc1NzE4OTM1LCA4NTQxOTcyNTksCisgICAgICAgICAxMDE2NDUwMjgxLCAxMTc4NzAzMzAzLCAxMzI0NzMxMDIzLCAxNDU0NTMzNDQxKQo+IHh4CiBbMV0gIC04Njg3MDI2OCAgMTA3ODMzMzU4ICAzMDI1MzY5ODUgIDQ4MTAxNTMwOSAgNjc1NzE4OTM1ICA4NTQxOTcyNTkKIFs3XSAxMDE2NDUwMjgxIDExNzg3MDMzMDMgMTMyNDczMTAyMyAxNDU0NTMzNDQxCj4gIyMgZHJvcHBlZCBzcGFjZXMgd2l0aG91dCBsb25nIGRvdWJsZXMKPiAKPiAjIyBhbmQgcm91bmRpbmcgd2FzIGJlaW5nIGRldGVjdGVkIGltcHJvcGVybHkgKFBSIzE1NTgzKQo+IDEwMDAqICgoMTBeKDEvNCkpIF4gYygwOjQpKQpbMV0gIDEwMDAuMDAwICAxNzc4LjI3OSAgMzE2Mi4yNzggIDU2MjMuNDEzIDEwMDAwLjAwMAo+IDcvMC4wNwpbMV0gMTAwCj4gIyMgU3BhY2luZyB3YXMgaW5jb3JyZWN0Cj4gCj4gCj4gIyMgUFIjMTU0NjgKPiBNIDwtIG1hdHJpeCgxMToxNCwgbmNvbD0yLCBkaW1uYW1lcz1saXN0KHBhc3RlMCgiUm93IiwgMToyKSwgcGFzdGUwKCJDb2wiLAorIDE6MikpKQo+IEwgPC0gbGlzdChlbGVtMT0xLCBlbGVtMj0yKQo+IHJiaW5kKE0sIEwpCiAgICAgQ29sMSBDb2wyClJvdzEgMTEgICAxMyAgClJvdzIgMTIgICAxNCAgCkwgICAgMSAgICAyICAgCj4gcmJpbmQoTCwgTSkKICAgICBlbGVtMSBlbGVtMgpMICAgIDEgICAgIDIgICAgClJvdzEgMTEgICAgMTMgICAKUm93MiAxMiAgICAxNCAgIAo+IGNiaW5kKE0sIEwpCiAgICAgQ29sMSBDb2wyIEwKUm93MSAxMSAgIDEzICAgMQpSb3cyIDEyICAgMTQgICAyCj4gY2JpbmQoTCwgTSkKICAgICAgTCBDb2wxIENvbDIKZWxlbTEgMSAxMSAgIDEzICAKZWxlbTIgMiAxMiAgIDE0ICAKPiAjIyBsb3N0IHRoZSBkaW0gb2YgTSwgc28gcmV0dXJuZWQgTlVMTCBlbnRyaWVzCj4gCj4gCj4gIyMgTkFfY2hhcmFjdGVyXyB3YXMgbm90IGhhbmRsZWQgcHJvcGVybHkgaW4gbWluIGFuZCBtYXggKHJlcG9ydGVkIGJ5IE1hZ251cyBUaG9yIFRvcmZhc29uKQo+IHN0cihtaW4oTkEsICJibGEiKSkKIGNociBOQQo+IHN0cihtaW4oImJsYSIsIE5BKSkKIGNociBOQQo+IHN0cihtaW4oTkFfY2hhcmFjdGVyXywgImJsYSIpKQogY2hyIE5BCj4gc3RyKG1heChOQSwgImJsYSIpKQogY2hyIE5BCj4gc3RyKG1heCgiYmxhIiwgTkEpKQogY2hyIE5BCj4gc3RyKG1heChOQV9jaGFyYWN0ZXJfLCAiYmxhIikpCiBjaHIgTkEKPiAjIyBOQV9jaGFyYWN0ZXJfIGNvdWxkIGJlIHRyZWF0ZWQgYXMgIk5BIjsgZGVwZW5kaW5nIG9uIHRoZSBsb2NhbGUsIGl0IHdvdWxkIG5vdCBuZWNlc3NhcmlseQo+ICMjIGJlIHRoZSBtaW4gb3IgbWF4Lgo+IAo+IAo+ICMjIFdoZW4gdHdvIGVudHJpZXMgbmVlZGVkIHRvIGJlIGN1dCB0byB3aWR0aCwgc3RyKCkgbWl4ZWQgdXAKPiAjIyB0aGUgdmFsdWVzIChyZXBvcnRlZCBieSBHZXJyaXQgRWljaG5lcikKPiBvbGRvcHRzIDwtIG9wdGlvbnMod2lkdGg9NzAsIHN0cmluZ3NBc0ZhY3RvcnM9VFJVRSkKPiBuIDwtIDExICAgICAgIyBudW1iZXIgb2Ygcm93cyBvZiBkYXRhIGZyYW1lCj4gTSA8LSAxMDAwMCAgICMgb3JkZXIgb2YgbWFnbml0dWRlIG9mIG51bWVyaWNhbCB2YWx1ZXMKPiBsb25nZXIuY2hhci5zdHJpbmcgPC0gInpqdHZvcmttb3lkc2VwbnhrYWJtZW9uZHJqYWFudXRqbWZ4bGd6bXJianAiCj4gWCA8LSBkYXRhLmZyYW1lKCBBID0gMTpuICogTSwKKyAgICAgICAgICAgICAgICAgIEIgPSByZXAoIGxvbmdlci5jaGFyLnN0cmluZywgbikpCj4gc3RyKCBYLCBzdHJpY3Qud2lkdGggPSAiY3V0IikKJ2RhdGEuZnJhbWUnOgkxMSBvYnMuIG9mICAyIHZhcmlhYmxlczoKICQgQTogbnVtICAxZSswNCAyZSswNCAzZSswNCA0ZSswNCA1ZSswNCA2ZSswNCA3ZSswNCA4ZSswNCA5ZSswNCAxZSsuLgogJCBCOiBGYWN0b3Igdy8gMSBsZXZlbCAiemp0dm9ya21veWRzZXBueGthYm1lb25kcmphYW51dGptZnhsZ3ptcmJqIi4uCj4gb3B0aW9ucyhvbGRvcHRzKQo+ICMjIFRoZSBmaXJzdCByb3cgb2YgdGhlIHN0cigpIHJlc3VsdCB3YXMgZHVwbGljYXRlZC4KPiAKPiAKPiAjIyBQUjE1NjI0OiByb3VuZGluZyBpbiBleHRyZW1lIGNhc2VzCj4gZHBvaXMoMl41MiwxLDEpClsxXSAtMS41NzgyMjZlKzE3Cj4gZHBvaXMoMl41MisxLDEsMSkKWzFdIC0xLjU3ODIyNmUrMTcKPiAjIyBzZWNvbmQgd2FybmVkIGluIFIgMy4wLjIuCj4gCj4gCj4gIyMgRXhhbXBsZSBmcm9tIFBSMTU2MjUKPiBmIDwtIGZpbGUucGF0aChTeXMuZ2V0ZW52KCdTUkNESVInKSwgJ0VtYmVkZGVkTnVscy5jc3YnKQo+ICMjIFRoaXMgaXMgYSBmaWxlIHdpdGggYSBVVEYtOCBCT00gYW5kIHNvbWUgZmllbGRzIHdoaWNoIGFyZSBhIHNpbmdsZSBudWwuCj4gIyMgVGhlIG91dHB1dCBkb2VzIHJlbHkgb24gdGhpcyBiZWluZyBydW4gaW4gYSBub24tVVRGLTggbG9jYWxlIChDIGluIHRlc3RzKS4KPiByZWFkLmNzdihmKSAjIHdhcm5zCiAgWC4uLkNvbEEgQ29sQiBDb2xDCjEgICAgICAgIGEgICBOQSAgIE5BCjIgICAgICAgIGIgICBOQSAgIE5BCjMgICAgICAgIGMgICBOQSAgIE5BCjQgICAgICAgIGQgICBOQSAgIE5BCjUgICAgICAgIGUgICBOQSAgICAxCjYgICAgICAgIGYgICBOQSAgICAxCldhcm5pbmcgbWVzc2FnZXM6CjE6IEluIHJlYWQudGFibGUoZmlsZSA9IGZpbGUsIGhlYWRlciA9IGhlYWRlciwgc2VwID0gc2VwLCBxdW90ZSA9IHF1b3RlLCAgOgogIGxpbmUgMiBhcHBlYXJzIHRvIGNvbnRhaW4gZW1iZWRkZWQgbnVsbHMKMjogSW4gcmVhZC50YWJsZShmaWxlID0gZmlsZSwgaGVhZGVyID0gaGVhZGVyLCBzZXAgPSBzZXAsIHF1b3RlID0gcXVvdGUsICA6CiAgbGluZSAzIGFwcGVhcnMgdG8gY29udGFpbiBlbWJlZGRlZCBudWxscwozOiBJbiByZWFkLnRhYmxlKGZpbGUgPSBmaWxlLCBoZWFkZXIgPSBoZWFkZXIsIHNlcCA9IHNlcCwgcXVvdGUgPSBxdW90ZSwgIDoKICBsaW5lIDQgYXBwZWFycyB0byBjb250YWluIGVtYmVkZGVkIG51bGxzCjQ6IEluIHJlYWQudGFibGUoZmlsZSA9IGZpbGUsIGhlYWRlciA9IGhlYWRlciwgc2VwID0gc2VwLCBxdW90ZSA9IHF1b3RlLCAgOgogIGxpbmUgNSBhcHBlYXJzIHRvIGNvbnRhaW4gZW1iZWRkZWQgbnVsbHMKNTogSW4gc2NhbihmaWxlID0gZmlsZSwgd2hhdCA9IHdoYXQsIHNlcCA9IHNlcCwgcXVvdGUgPSBxdW90ZSwgZGVjID0gZGVjLCAgOgogIGVtYmVkZGVkIG51bChzKSBmb3VuZCBpbiBpbnB1dAo+IHJlYWQuY3N2KGYsIHNraXBOdWwgPSBUUlVFLCBmaWxlRW5jb2RpbmcgPSAiVVRGLTgtQk9NIikKICBDb2xBIENvbEIgQ29sQwoxICAgIGEgICBOQSAgICAxCjIgICAgYiAgIE5BICAgIDEKMyAgICBjICAgTkEgICAgMQo0ICAgIGQgICBOQSAgICAxCjUgICAgZSAgIE5BICAgIDEKNiAgICBmICAgTkEgICAgMQo+ICMjICdza2lwTnVsJyBpcyBuZXcgaW4gMy4xLjAuICBTaG91bGQgbm90IHdhcm4gb24gQk9NLCBpZ25vcmUgaW4gc2Vjb25kLgo+IAo+IAo+ICMjIGFsbC5lcXVhbCBkYXRldGltZSBtZXRob2QKPiB4IDwtIFN5cy50aW1lKCkKPiBhbGwuZXF1YWwoeCx4KQpbMV0gVFJVRQo+IGFsbC5lcXVhbCh4LCBhcy5QT1NJWGx0KHgpKQpbMV0gVFJVRQo+IGFsbC5lcXVhbCh4LCBhcy5QT1NJWGx0KHgsIHR6ID0gIkVTVDVFRFQiKSkKWzFdIFRSVUUKPiBhbGwuZXF1YWwoeCwgeCsxZS00KQpbMV0gVFJVRQo+IGlzVFJVRShhbGwuZXF1YWwoeCwgeCswLjAwMikpICMgbWVzc2FnZSB3aWxsIGRlcGVuZCBvbiByZXByZXNlbnRhdGlvbiBlcnJvcgpbMV0gRkFMU0UKPiAjIyBhcy5QT1NJWHQgbWV0aG9kIGlzIG5ldyBpbiAzLjEuMC4KPiAKPiAKPiAKPiAjIyBNaXN1c2Ugb2YgUFIjMTU2MzMKPiB0cnkoYmFydGxldHQudGVzdCh5aWVsZCB+IGJsb2NrKk4sIGRhdGEgPSBucGspKQpFcnJvciBpbiBiYXJ0bGV0dC50ZXN0LmZvcm11bGEoeWllbGQgfiBibG9jayAqIE4sIGRhdGEgPSBucGspIDogCiAgJ2Zvcm11bGEnIHNob3VsZCBiZSBvZiB0aGUgZm9ybSByZXNwb25zZSB+IGdyb3VwCj4gdHJ5KGZsaWduZXIudGVzdCAoeWllbGQgfiBibG9jaypOLCBkYXRhID0gbnBrKSkKRXJyb3IgaW4gZmxpZ25lci50ZXN0LmZvcm11bGEoeWllbGQgfiBibG9jayAqIE4sIGRhdGEgPSBucGspIDogCiAgJ2Zvcm11bGEnIHNob3VsZCBiZSBvZiB0aGUgZm9ybSByZXNwb25zZSB+IGdyb3VwCj4gIyMgdXNlZCB0aGUgZmlyc3QgZmFjdG9yIHdpdGggYW4gaW5jb3JyZWN0IGRlc2NyaXB0aW9uIGluIFIgPCAzLjAuMwo+IAo+IAo+ICMjIE1pc2d1aWRlZCBleHBlY3RhdGlvbiBvZiBQUiMxNTY4Nwo+IHh4IDwtIHdpbmRvdyhBaXJQYXNzZW5nZXJzLCBzdGFydCA9IDE5NjApCj4gY2JpbmQoeHgsIHh4KQogICAgICAgICAgeHggIHh4CkphbiAxOTYwIDQxNyA0MTcKRmViIDE5NjAgMzkxIDM5MQpNYXIgMTk2MCA0MTkgNDE5CkFwciAxOTYwIDQ2MSA0NjEKTWF5IDE5NjAgNDcyIDQ3MgpKdW4gMTk2MCA1MzUgNTM1Ckp1bCAxOTYwIDYyMiA2MjIKQXVnIDE5NjAgNjA2IDYwNgpTZXAgMTk2MCA1MDggNTA4Ck9jdCAxOTYwIDQ2MSA0NjEKTm92IDE5NjAgMzkwIDM5MApEZWMgMTk2MCA0MzIgNDMyCj4gb3AgPC0gb3B0aW9ucyhkaWdpdHMgPSAyKQo+IGNiaW5kKHh4LCB4eCkKICAgICAgICAgIHh4ICB4eApKYW4gMTk2MCA0MTcgNDE3CkZlYiAxOTYwIDM5MSAzOTEKTWFyIDE5NjAgNDE5IDQxOQpBcHIgMTk2MCA0NjEgNDYxCk1heSAxOTYwIDQ3MiA0NzIKSnVuIDE5NjAgNTM1IDUzNQpKdWwgMTk2MCA2MjIgNjIyCkF1ZyAxOTYwIDYwNiA2MDYKU2VwIDE5NjAgNTA4IDUwOApPY3QgMTk2MCA0NjEgNDYxCk5vdiAxOTYwIDM5MCAzOTAKRGVjIDE5NjAgNDMyIDQzMgo+IG9wdGlvbnMob3ApCj4gIyMgJ2RpZ2l0cycgd2FzIGFwcGxpZWQgdG8gdGhlIHRpbWUuCj4gCj4gCj4gIyMgUmVsYXRlZCB0byBQUiMxNTE5MAo+IGRpZmZ0aW1lKAorICAgICBhcy5QT1NJWGN0KGMoIjE5NzAtMDEtMDEgMDA6MDA6MDAiLCAiMTk3MC0wMS0wMSAxMjowMDowMCIpLCB0ej0iRVNUNUVEVCIpLAorICAgICBhcy5QT1NJWGN0KGMoIjE5NzAtMDEtMDEgMDA6MDA6MDAiLCAiMTk3MC0wMS0wMSAwMDowMDowMCIpLCB0ej0iVVRDIikpClRpbWUgZGlmZmVyZW5jZXMgaW4gaG91cnMKWzFdICA1IDE3Cj4gIyMga2VwdCB0em9uZSBmcm9tIGZpcnN0IGFyZy4KPiAKPiAKPiAjIyBQUiMxNTcwNgo+IHgxIDwtIGFzLmRlbmRyb2dyYW0oaGNsdXN0KGRpc3QoYyhpPTEsaWk9MixpaWk9Myx2PTUsdmk9Nix2aWk9NykpKSkKPiBhdHRyKGNvcGhlbmV0aWMoeDEpLCAiTGFiZWxzIikKWzFdICJpaWkiICJpIiAgICJpaSIgICJ2aWkiICJ2IiAgICJ2aSIgCj4gIyMgZ2F2ZSBhIG1hdHJpeCBpbiAzLjAuMwo+IAo+IAo+ICMjIFBSIzE1NzA4Cj4gYWEgPC0gYW5vdmEoIGxtKHNyIH4gLiwgZGF0YSA9IExpZmVDeWNsZVNhdmluZ3MpICkKPiBvcCA8LSBvcHRpb25zKHdpZHRoID0gNTApCj4gYWEKQW5hbHlzaXMgb2YgVmFyaWFuY2UgVGFibGUKClJlc3BvbnNlOiBzcgogICAgICAgICAgRGYgU3VtIFNxIE1lYW4gU3EgRiB2YWx1ZSAgICBQcig+RikgICAgCnBvcDE1ICAgICAgMSAyMDQuMTIgMjA0LjExOCAxNC4xMTU3IDAuMDAwNDkyMiAqKioKcG9wNzUgICAgICAxICA1My4zNCAgNTMuMzQzICAzLjY4ODkgMC4wNjExMjU1IC4gIApkcGkgICAgICAgIDEgIDEyLjQwICAxMi40MDEgIDAuODU3NiAwLjM1OTM1NTEgICAgCmRkcGkgICAgICAgMSAgNjMuMDUgIDYzLjA1NCAgNC4zNjA1IDAuMDQyNDcxMSAqICAKUmVzaWR1YWxzIDQ1IDY1MC43MSAgMTQuNDYwICAgICAgICAgICAgICAgICAgICAgIAotLS0KU2lnbmlmLiBjb2RlczogIAowICcqKionIDAuMDAxICcqKicgMC4wMSAnKicgMC4wNSAnLicgMC4xICcgJyAxCj4gb3B0aW9ucyh3aWR0aCA9IDQwKQo+IGFhIDsgb3B0aW9ucyhvcCkKQW5hbHlzaXMgb2YgVmFyaWFuY2UgVGFibGUKClJlc3BvbnNlOiBzcgogICAgICAgICAgRGYgU3VtIFNxIE1lYW4gU3EgRiB2YWx1ZQpwb3AxNSAgICAgIDEgMjA0LjEyIDIwNC4xMTggMTQuMTE1Nwpwb3A3NSAgICAgIDEgIDUzLjM0ICA1My4zNDMgIDMuNjg4OQpkcGkgICAgICAgIDEgIDEyLjQwICAxMi40MDEgIDAuODU3NgpkZHBpICAgICAgIDEgIDYzLjA1ICA2My4wNTQgIDQuMzYwNQpSZXNpZHVhbHMgNDUgNjUwLjcxICAxNC40NjAgICAgICAgIAogICAgICAgICAgICAgUHIoPkYpICAgIApwb3AxNSAgICAgMC4wMDA0OTIyICoqKgpwb3A3NSAgICAgMC4wNjExMjU1IC4gIApkcGkgICAgICAgMC4zNTkzNTUxICAgIApkZHBpICAgICAgMC4wNDI0NzExICogIApSZXNpZHVhbHMgICAgICAgICAgICAgIAotLS0KU2lnbmlmLiBjb2RlczogIAogIDAgJyoqKicgMC4wMDEgJyoqJyAwLjAxICcqJyAwLjA1CiAgJy4nIDAuMSAnICcgMQo+ICMjIGRpZCBub3QgbGluZSB3cmFwICJTaWduaWYuIGNvZGVzIiBwcmV2aW91c2x5Cj4gCj4gCj4gIyMgUFIjMTU3MTgKPiBkIDwtIGRhdGEuZnJhbWUoYT0xKQo+IGRbaW50ZWdlcigpLCAiYSJdIDwtIDIKPiAjIyB3YXJuZWQgaW4gMy4wLjMuCj4gCj4gCj4gIyMgUFIjMTU3ODEKPiBvcHRpb25zKGZvbyA9IDEpCj4gcHJpbnQob3B0aW9ucyhmb28gPSBOVUxMKSkKJGZvbwpbMV0gMQoKPiAjIyBwcmludGVkIHdyb25nIHZhbHVlIGluIDMuMS4wCj4gCj4gCj4gIyMgZ2V0UGFyc2VEYXRhIGJ1ZyByZXBvcnRlZCBieSBBbmRyZXcgUmVkZAo+IHJhdyA8LSAiCisgZnVuY3Rpb24oIGEgICAjIHBhcmFtZXRlciAxCisgICAgICAgICAgLCBiPTIgIyBwYXJhbWV0ZXIgMgorICAgICAgICAgICl7YStifSIKPiBwIDwtIHBhcnNlKHRleHQgPSByYXcpCj4gZ2V0UGFyc2VEYXRhKHApCiAgIGxpbmUxIGNvbDEgbGluZTIgY29sMiBpZCBwYXJlbnQgICAgICAgICAgdG9rZW4gdGVybWluYWwgICAgICAgICAgdGV4dAozMSAgICAgMiAgICAxICAgICA0ICAgMTUgMzEgICAgICAwICAgICAgICAgICBleHByICAgIEZBTFNFICAgICAgICAgICAgICAKMyAgICAgIDIgICAgMSAgICAgMiAgICA4ICAzICAgICAzMSAgICAgICBGVU5DVElPTiAgICAgVFJVRSAgICAgIGZ1bmN0aW9uCjQgICAgICAyICAgIDkgICAgIDIgICAgOSAgNCAgICAgMzEgICAgICAgICAgICAnKCcgICAgIFRSVUUgICAgICAgICAgICAgKAo1ICAgICAgMiAgIDExICAgICAyICAgMTEgIDUgICAgIDMxIFNZTUJPTF9GT1JNQUxTICAgICBUUlVFICAgICAgICAgICAgIGEKNiAgICAgIDIgICAxNSAgICAgMiAgIDI3ICA2ICAgICAzMSAgICAgICAgQ09NTUVOVCAgICAgVFJVRSAjIHBhcmFtZXRlciAxCjggICAgICAzICAgMTAgICAgIDMgICAxMCAgOCAgICAgMzEgICAgICAgICAgICAnLCcgICAgIFRSVUUgICAgICAgICAgICAgLAoxMCAgICAgMyAgIDEyICAgICAzICAgMTIgMTAgICAgIDMxIFNZTUJPTF9GT1JNQUxTICAgICBUUlVFICAgICAgICAgICAgIGIKMTEgICAgIDMgICAxMyAgICAgMyAgIDEzIDExICAgICAzMSAgICAgRVFfRk9STUFMUyAgICAgVFJVRSAgICAgICAgICAgICA9CjEyICAgICAzICAgMTQgICAgIDMgICAxNCAxMiAgICAgMTMgICAgICBOVU1fQ09OU1QgICAgIFRSVUUgICAgICAgICAgICAgMgoxMyAgICAgMyAgIDE0ICAgICAzICAgMTQgMTMgICAgIDMxICAgICAgICAgICBleHByICAgIEZBTFNFICAgICAgICAgICAgICAKMTQgICAgIDMgICAxNiAgICAgMyAgIDI4IDE0ICAgICAzMSAgICAgICAgQ09NTUVOVCAgICAgVFJVRSAjIHBhcmFtZXRlciAyCjE2ICAgICA0ICAgMTAgICAgIDQgICAxMCAxNiAgICAgMzEgICAgICAgICAgICAnKScgICAgIFRSVUUgICAgICAgICAgICAgKQoyOCAgICAgNCAgIDExICAgICA0ICAgMTUgMjggICAgIDMxICAgICAgICAgICBleHByICAgIEZBTFNFICAgICAgICAgICAgICAKMTggICAgIDQgICAxMSAgICAgNCAgIDExIDE4ICAgICAyOCAgICAgICAgICAgICd7JyAgICAgVFJVRSAgICAgICAgICAgICB7CjI1ICAgICA0ICAgMTIgICAgIDQgICAxNCAyNSAgICAgMjggICAgICAgICAgIGV4cHIgICAgRkFMU0UgICAgICAgICAgICAgIAoxOSAgICAgNCAgIDEyICAgICA0ICAgMTIgMTkgICAgIDIxICAgICAgICAgU1lNQk9MICAgICBUUlVFICAgICAgICAgICAgIGEKMjEgICAgIDQgICAxMiAgICAgNCAgIDEyIDIxICAgICAyNSAgICAgICAgICAgZXhwciAgICBGQUxTRSAgICAgICAgICAgICAgCjIwICAgICA0ICAgMTMgICAgIDQgICAxMyAyMCAgICAgMjUgICAgICAgICAgICAnKycgICAgIFRSVUUgICAgICAgICAgICAgKwoyMiAgICAgNCAgIDE0ICAgICA0ICAgMTQgMjIgICAgIDI0ICAgICAgICAgU1lNQk9MICAgICBUUlVFICAgICAgICAgICAgIGIKMjQgICAgIDQgICAxNCAgICAgNCAgIDE0IDI0ICAgICAyNSAgICAgICAgICAgZXhwciAgICBGQUxTRSAgICAgICAgICAgICAgCjIzICAgICA0ICAgMTUgICAgIDQgICAxNSAyMyAgICAgMjggICAgICAgICAgICAnfScgICAgIFRSVUUgICAgICAgICAgICAgfQo+ICMjIEdvdCBzb21lIHBhcmVudHMgd3JvbmcKPiAKPiAKPiAjIyB3aXNoIG9mIFBSIzE1ODE5Cj4gc2V0LnNlZWQoMTIzKTsgeCA8LSBydW5pZigxMCk7IHkgPC0gcm5vcm0oMTApCj4gb3AgPC0gb3B0aW9ucyhPdXREZWMgPSAiLCIpCj4gZml0IDwtIGxtKHkgfiB4KQo+IHN1bW1hcnkoZml0KQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiB4KQoKUmVzaWR1YWxzOgogICAgIE1pbiAgICAgICAxUSAgIE1lZGlhbiAgICAgICAzUSAgICAgIE1heCAKLTEsNjIxNTUgLTAsMzM0NzEgIDAsMDUyMzggIDAsNTUyMjcgIDEsMTk3NDIgCgpDb2VmZmljaWVudHM6CiAgICAgICAgICAgIEVzdGltYXRlIFN0ZC4gRXJyb3IgdCB2YWx1ZSBQcig+fHR8KQooSW50ZXJjZXB0KSAgIDAsODk5NCAgICAgMCw2MjgyICAgMSw0MzIgICAgMCwxOTAKeCAgICAgICAgICAgIC0xLDMyNzUgICAgIDAsOTc4MCAgLTEsMzU3ICAgIDAsMjEyCgpSZXNpZHVhbCBzdGFuZGFyZCBlcnJvcjogMCw4NjQ4IG9uIDggZGVncmVlcyBvZiBmcmVlZG9tCk11bHRpcGxlIFItc3F1YXJlZDogIDAsMTg3MiwJQWRqdXN0ZWQgUi1zcXVhcmVkOiAgMCwwODU1NyAKRi1zdGF0aXN0aWM6IDEsODQyIG9uIDEgYW5kIDggREYsICBwLXZhbHVlOiAwLDIxMTcKCj4gb3B0aW9ucyhvcCkKPiAjIyB0aG9zZSBwYXJ0cyB1c2luZyBmb3JtYXRDIHN0aWxsIHVzZWQgYSBkZWNpbWFsIHBvaW50Lgo+IAo+IAo+ICMjIFByaW50aW5nIGEgbGlzdCB3aXRoICJiYWQiIGNvbXBvbmVudCBuYW1lcwo+IEwgPC0gbGlzdChgYVxcYmAgPSAxLCBgYVxcY2AgPSAyLCBgYVxiY2AgPSAiYmFja3NwYWNlIikKPiBzZXRDbGFzcygiZm9vIiwgcmVwcmVzZW50YXRpb24oYFxcQ2AgPSAibnVtZXJpYyIpKQo+ICMjIHRoZSBuZXh0IHRocmVlIGFsbCBwcmludCBjb3JyZWN0bHk6Cj4gbmFtZXMoTCkKWzFdICJhXFxiIiAiYVxcYyIgImFcYmMiCj4gdW5saXN0KEwpCiAgICAgICBhXFxiICAgICAgICBhXFxjICAgICAgICBhXGJjIAogICAgICAgICIxIiAgICAgICAgICIyIiAiYmFja3NwYWNlIiAKPiBhcy5wYWlybGlzdChMKQokYGFcXGJgClsxXSAxCgokYGFcXGNgClsxXSAyCgokYGFcYmNgClsxXSAiYmFja3NwYWNlIgoKPiBjYXQobmFtZXMoTCksICJcbiIpIyB5ZXMsIGJhY2tzcGFjZSBpcyBiYWNrc3BhY2UgaGVyZQphXGIgYVxjIGEIYyAKPiBMCiRgYVxcYmAKWzFdIDEKCiRgYVxcY2AKWzFdIDIKCiRgYVxiY2AKWzFdICJiYWNrc3BhY2UiCgo+IG5ldygiZm9vIikKQW4gb2JqZWN0IG9mIGNsYXNzICJmb28iClNsb3QgIlxcQyI6Cm51bWVyaWMoMCkKCj4gIyMgdGhlIGxhc3QgdHdvIGxpbmVzIHByaW50ZWQgd3JvbmdseSBpbiBSIDw9IDMuMS4xCj4gCj4gCj4gIyMgUHJpbnRpbmcgb2YgYXJyYXlzIHdoZXJlIGxhc3QgZGltKC4pID09IDAgOgo+IHIgPC0gbWF0cml4KCwwLDQsIGRpbW5hbWVzPWxpc3QoUm93PU5VTEwsIENvbD1wYXN0ZTAoImMiLDE6NCkpKQo+IHIKICAgICAgQ29sClJvdyAgICBjMSBjMiBjMyBjNAo+IHQocikgIyBkaWQgbm90IHByaW50ICJSb3ciLCAiQ29sIgogICAgUm93CkNvbCAKICBjMQogIGMyCiAgYzMKICBjNAo+IEEgPC0gYXJyYXkoZGltPTM6MCwgZGltbmFtZXM9bGlzdChEMT1jKCJhIiwiYiIsImMiKSwgRDI9YygiWCIsIlkiKSwgRDM9IkkiLCBEND1OVUxMKSkKPiBBICMjIGRpZCBub3QgcHJpbnQgKmFueXRoaW5nKgo8MyB4IDIgeCAxIHggMCBhcnJheSBvZiBsb2dpY2FsPgogICBEMgpEMSAgWCBZCiAgYQogIGIKICBjCgo+IEFbLCwiSSIsXSAjIGRpdHRvCjwzIHggMiB4IDAgYXJyYXkgb2YgbG9naWNhbD4KICAgRDIKRDEgIFggWQogIGEKICBiCiAgYwoKPiBBWywsMCxdICAgIyBkaXR0bwo8MyB4IDIgeCAwIHggMCBhcnJheSBvZiBsb2dpY2FsPgogICBEMgpEMSAgWCBZCiAgYQogIGIKICBjCgo+IGFwZXJtKEEsIGMoMzoxLDQpKSAgICMgZGl0dG8KPDEgeCAyIHggMyB4IDAgYXJyYXkgb2YgbG9naWNhbD4KICAgRDIKRDMgIFggWQogIEkKCj4gYXBlcm0oQSwgYygxOjIsIDQ6MykpIyBkaXR0bwo8MyB4IDIgeCAwIHggMSBhcnJheSBvZiBsb2dpY2FsPgogICBEMgpEMSAgWCBZCiAgYQogIGIKICBjCgo+IHVubmFtZShBKSAgICAgICAgICAgICMgZGl0dG8KPDMgeCAyIHggMSB4IDAgYXJyYXkgb2YgbG9naWNhbD4KICAgICBbLDFdIFssMl0KWzEsXQpbMixdClszLF0KCj4gZm9ybWF0KEFbLCwxLF0pCSAgICAgIyBkaXR0bwo8MyB4IDIgeCAwIGFycmF5IG9mIGNoYXJhY3Rlcj4KICAgRDIKRDEgIFggWQogIGEKICBiCiAgYwoKPiBhcGVybShBLCA0OjEpICMgd2FzIG9rLCBpcyB1bmNoYW5nZWQKLCAsIEQyID0gWCwgRDEgPSBhCgogICAgICBEMwpENCAgICAgSQoKLCAsIEQyID0gWSwgRDEgPSBhCgogICAgICBEMwpENCAgICAgSQoKLCAsIEQyID0gWCwgRDEgPSBiCgogICAgICBEMwpENCAgICAgSQoKLCAsIEQyID0gWSwgRDEgPSBiCgogICAgICBEMwpENCAgICAgSQoKLCAsIEQyID0gWCwgRDEgPSBjCgogICAgICBEMwpENCAgICAgSQoKLCAsIEQyID0gWSwgRDEgPSBjCgogICAgICBEMwpENCAgICAgSQoKPiAjIyBzb21ldGltZXMgbm90IHByaW50aW5nIGFueXRoaW5nIGluIFIgPD0gMy4xLjEKPiAKPiAKPiAjIyBQcmludGluZyBvYmplY3RzIHdpdGggdmVyeSBsb25nIG5hbWVzIGN1dCBvZmYgbGl0ZXJhbCB2YWx1ZXMgKFBSIzE1OTk5KQo+IG1ha2VfbG9uZ19uYW1lIDwtIGZ1bmN0aW9uKG4pCisgeworICAgcGFzdGUwKHJlcCgiYSIsIG4pLCBjb2xsYXBzZSA9ICIiKQorIH0KPiBzZXROYW1lcyhUUlVFLCBtYWtlX2xvbmdfbmFtZSgxMDAwKSkgICMgdmFsdWUgcHJpbnRlZCBhcyBUUlUKYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIAo+IHNldE5hbWVzKFRSVUUsIG1ha2VfbG9uZ19uYW1lKDEwMDIpKSAgIyB2YWx1ZSBwcmludGVkIGFzIFQKYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgCj4gc2V0TmFtZXMoVFJVRSwgbWFrZV9sb25nX25hbWUoMTAwMykpICAjIHZhbHVlIG5vdCBwcmludGVkCmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSAKPiAjIwo+IAo+IAo+ICMjIFBSIzE2NDM3Cj4gZGQgPC0gZGF0YS5mcmFtZShGID0gZmFjdG9yKHJlcChjKCJBIiwiQiIsIkMiKSwgZWFjaCA9IDMpKSwgbnVtID0gMTo5KQo+IGNzIDwtIGxpc3QoRiA9IGNvbnRyLnN1bSgzLCBjb250cmFzdHMgPSBGQUxTRSkpCj4gYTEgPC0gYW92KG51bSB+IEYsIGRhdGEgPSBkZCwgY29udHJhc3RzID0gY3MpCj4gbW9kZWwudGFibGVzKGExLCAibWVhbnMiKQpUYWJsZXMgb2YgbWVhbnMKR3JhbmQgbWVhbgogIAo1IAoKIEYgCkYKQSBCIEMgCjIgNSA4IAo+IHQxIDwtIFR1a2V5SFNEKGExKSAjIyBkb24ndCBwcmludCB0byBhdm9pZCBwcmVjaXNpb24gaXNzdWVzLgo+IGEyIDwtIGFvdihudW0gfiAwK0YsIGRhdGEgPSBkZCwgY29udHJhc3RzID0gY3MpCj4gbW9kZWwudGFibGVzKGEyLCAibWVhbnMiKQpUYWJsZXMgb2YgbWVhbnMKCiBGIApGCkEgQiBDIAoyIDUgOCAKPiB0MiA8LSBUdWtleUhTRChhMikKPiBhdHRyKHQxLCAib3JpZy5jYWxsIikgPC0gYXR0cih0MiwgIm9yaWcuY2FsbCIpCj4gc3RvcGlmbm90KGFsbC5lcXVhbCh0MSwgdDIpKQo+ICMjIGZ1bmN0aW9ucyBib3RoIGZhaWxlZCBvbiBhMiBpbiBSIDw9IDMuMi4yLgo+IAo+IAo+ICMjIGRlcGFyc2UoKSBkaWQgbm90IGFkZCBwYXJlbnMgYmVmb3JlIFsKPiBzdWJzdGl0dXRlKGFbMV0sIGxpc3QoYSA9IHF1b3RlKHggKiB5KSkpCih4ICogeSlbMV0KPiAjIyBzaG91bGQgYmUgKHggKiB5KVsxXSwgd2FzIHggKiB5WzFdCj4gIyBDaGVjayBhbGwgbGV2ZWxzIG9mIHByZWNlZGVuY2UKPiAjIChDb21tZW50IG91dCBpbGxlZ2FsIG9uZXMpCj4gcXVvdGUoYCRgKGEgOjogYiwgYykpCmE6OmIkYwo+ICMgcXVvdGUoYDo6YChhICQgYiwgYyAkIGQpKQo+IHF1b3RlKGBbYChhICQgYiwgYyAkIGQpKQphJGJbYyRkXQo+IHF1b3RlKGAkYChhW2JdLCBjKSkKYVtiXSRjCj4gcXVvdGUoYF5gKGFbYl0sIGNbZF0pKQphW2JdXmNbZF0KPiBxdW90ZShgW2AoYSBeIGIsIGMgXiBkKSkKKGFeYilbY15kXQo+IHF1b3RlKGAtYChhIF4gYikpCi1hXmIKPiBxdW90ZShgXmAoLWIsIC1kKSkKKC1iKV4tZAo+IHF1b3RlKGA6YCgtYiwgLWQpKQotYjotZAo+IHF1b3RlKGAtYChhIDogYikpCi0oYTpiKQo+IHF1b3RlKGAlaW4lYChhIDogYiwgYyA6IGQpKQphOmIgJWluJSBjOmQKPiBxdW90ZShgOmAoYSAlaW4lIGIsIGMgJWluJSBkKSkKKGEgJWluJSBiKTooYyAlaW4lIGQpCj4gcXVvdGUoYCpgKGEgJWluJSBiLCBjICVpbiUgZCkpCmEgJWluJSBiICogYyAlaW4lIGQKPiBxdW90ZShgJWluJWAoYSAqIGIsIGMgKiBkKSkKKGEgKiBiKSAlaW4lIChjICogZCkKPiBxdW90ZShgK2AoYSAqIGIsIGMgKiBkKSkKYSAqIGIgKyBjICogZAo+IHF1b3RlKGAqYChhICsgYiwgYyArIGQpKQooYSArIGIpICogKGMgKyBkKQo+IHF1b3RlKGA8YChhICsgYiwgYyArIGQpKQphICsgYiA8IGMgKyBkCj4gcXVvdGUoYCtgKGEgPCBiLCBjIDwgZCkpCihhIDwgYikgKyAoYyA8IGQpCj4gcXVvdGUoYCFgKGEgPCBiKSkKIWEgPCBiCj4gcXVvdGUoYDxgKCFiLCAhZCkpCighYikgPCAhZAo+IHF1b3RlKGAmYCghYiwgIWQpKQohYiAmICFkCj4gcXVvdGUoYCFgKGEgJiBiKSkKIShhICYgYikKPiBxdW90ZShgfGAoYSAmIGIsIGMgJiBkKSkKYSAmIGIgfCBjICYgZAo+IHF1b3RlKGAmYChhIHwgYiwgYyB8IGQpKQooYSB8IGIpICYgKGMgfCBkKQo+IHF1b3RlKGB+YChhIHwgYiwgYyB8IGQpKQphIHwgYiB+IGMgfCBkCj4gcXVvdGUoYHxgKGEgfiBiLCBjIH4gZCkpCihhIH4gYikgfCAoYyB+IGQpCj4gcXVvdGUoYC0+YChhIH4gYiwgZCkpCmAtPmAoYSB+IGIsIGQpCj4gcXVvdGUoYH5gKGEgLT4gYiwgYyAtPiBkKSkKKGIgPC0gYSkgfiAoZCA8LSBjKQo+IHF1b3RlKGA8LWAoYSwgYyAtPiBkKSkKYSA8LSBkIDwtIGMKPiBxdW90ZShgLT5gKGEgPC0gYiwgYykpCmAtPmAoYSA8LSBiLCBjKQo+IHF1b3RlKGA9YChhLCBjIDwtIGQpKQphID0gYyA8LSBkCj4gcXVvdGUoYDwtYChhLCBgPWAoYywgZCkpKQphIDwtIChjID0gZCkKPiBxdW90ZShgP2AoYD1gKGEsIGIpLCBgPWAoYywgZCkpKQpgP2AoKGEgPSBiKSwgKGMgPSBkKSkKPiBxdW90ZShgPWAoYSwgYyA/IGQpKQphID0gYD9gKGMsIGQpCj4gcXVvdGUoYD9gKGEgPSBiKSkKYD9gKGEgPSBiKQo+IHF1b3RlKGA9YChiLCA/ZCkpCmIgPSBgP2AoZCkKPiAKPiAjIyBkcHV0KCkgcXVvdGVkIHRoZSBlbXB0eSBzeW1ib2wgKFBSIzE2Njg2KQo+IGEgPC0gYWxpc3Qob25lID0gMSwgdHdvID0gKQo+IGRwdXQoYSkKbGlzdChvbmUgPSAxLCB0d28gPSApCj4gIyMgZGVwYXJzZWQgdHdvIHRvIHF1b3RlKCkKPiAKPiAjIyBEZXBhcnNpbmcgb2YgcmVwZWF0ZWQgdW5hcnkgb3BlcmF0b3JzOyB0aGUgZmlyc3QgMyB3ZXJlICJhbHdheXMiIG9rOgo+IHF1b3RlKH5+eCkKfn54Cj4gcXVvdGUoKyt4KQorK3gKPiBxdW90ZSgtLXgpCi0teAo+IHF1b3RlKCEheCkgIyB3YXMgYCEoIXgpYAohIXgKPiBxdW90ZSg/P3gpICMgU3Vib3B0aW1hbApgP2AoYD9gKHgpKQo+IHF1b3RlKH4rLSE/eCkgIyBkaXR0bzogLi4uLmA/YCh4KQp+Ky0hYD9gKHgpCj4gIyMgYCFgIG5vIGxvbmdlciBwcm9kdWNlcyBwYXJlbnRoZXNlcyBub3cKPiAKPiAKPiAjIyBzdW1tYXJ5LmRhdGEuZnJhbWUoKSB3aXRoIE5BcyBpbiBjb2x1bW5zIG9mIGNsYXNzICJEYXRlIiAtLSBQUiMxNjcwOQo+IHggPC0gYygxODAwMDAwMCwgMTg4MTA5MjQsIDE5MDkxMjI3LCAxOTAyNzIzMywgMTkzMTA1MjYsIDE5NjkxMjI4LCBOQSkKPiB4LkRhdGUgPC0gYXMuRGF0ZShhcy5jaGFyYWN0ZXIoeCksIGZvcm1hdCA9ICIlWSVtJWQiKQo+IHN1bW1hcnkoeC5EYXRlKQogICAgICAgIE1pbi4gICAgICAxc3QgUXUuICAgICAgIE1lZGlhbiAgICAgICAgIE1lYW4gICAgICAzcmQgUXUuICAgICAgICAgTWF4LiAKIjE4ODEtMDktMjQiICIxOTAyLTEyLTA0IiAiMTkyMC0wOS0xMCIgIjE5MjMtMDQtMTIiICIxOTQxLTAxLTE3IiAiMTk2OS0xMi0yOCIgCiAgICAgICAgTkEncyAKICAgICAgICAgIjMiIAo+IERGLkRhdGVzIDwtIGRhdGEuZnJhbWUoYzEgPSB4LkRhdGUpCj4gc3VtbWFyeShERi5EYXRlcykgIyMgTkEncyBtaXNzaW5nIGZyb20gb3V0cHV0IDoKICAgICAgIGMxICAgICAgICAgICAgCiBNaW4uICAgOjE4ODEtMDktMjQgIAogMXN0IFF1LjoxOTAyLTEyLTA0ICAKIE1lZGlhbiA6MTkyMC0wOS0xMCAgCiBNZWFuICAgOjE5MjMtMDQtMTIgIAogM3JkIFF1LjoxOTQxLTAxLTE3ICAKIE1heC4gICA6MTk2OS0xMi0yOCAgCiBOQSdzICAgOjMgICAgICAgICAgIAo+IERGLkRhdGVzJHgxIDwtIDE6Nwo+IHN1bW1hcnkoREYuRGF0ZXMpICMjIE5BJ3Mgc3RpbGwgbWlzc2luZwogICAgICAgYzEgICAgICAgICAgICAgICAgICAgeDEgICAgIAogTWluLiAgIDoxODgxLTA5LTI0ICAgTWluLiAgIDoxLjAgIAogMXN0IFF1LjoxOTAyLTEyLTA0ICAgMXN0IFF1LjoyLjUgIAogTWVkaWFuIDoxOTIwLTA5LTEwICAgTWVkaWFuIDo0LjAgIAogTWVhbiAgIDoxOTIzLTA0LTEyICAgTWVhbiAgIDo0LjAgIAogM3JkIFF1LjoxOTQxLTAxLTE3ICAgM3JkIFF1Ljo1LjUgIAogTWF4LiAgIDoxOTY5LTEyLTI4ICAgTWF4LiAgIDo3LjAgIAogTkEncyAgIDozICAgICAgICAgICAgICAgICAgICAgICAgIAo+IERGLkRhdGVzJHgyIDwtIGMoMTo2LCBOQSkKPiAjIyBub3csIE5BJ3Mgc2hvdyBmaW5lOgo+IHN1bW1hcnkoREYuRGF0ZXMpCiAgICAgICBjMSAgICAgICAgICAgICAgICAgICB4MSAgICAgICAgICAgIHgyICAgICAgCiBNaW4uICAgOjE4ODEtMDktMjQgICBNaW4uICAgOjEuMCAgIE1pbi4gICA6MS4wMCAgCiAxc3QgUXUuOjE5MDItMTItMDQgICAxc3QgUXUuOjIuNSAgIDFzdCBRdS46Mi4yNSAgCiBNZWRpYW4gOjE5MjAtMDktMTAgICBNZWRpYW4gOjQuMCAgIE1lZGlhbiA6My41MCAgCiBNZWFuICAgOjE5MjMtMDQtMTIgICBNZWFuICAgOjQuMCAgIE1lYW4gICA6My41MCAgCiAzcmQgUXUuOjE5NDEtMDEtMTcgICAzcmQgUXUuOjUuNSAgIDNyZCBRdS46NC43NSAgCiBNYXguICAgOjE5NjktMTItMjggICBNYXguICAgOjcuMCAgIE1heC4gICA6Ni4wMCAgCiBOQSdzICAgOjMgICAgICAgICAgICAgICAgICAgICAgICAgIE5BJ3MgICA6MSAgICAgCj4gIyMgMiBvZiA0ICBzdW1tYXJ5KC4pIGFib3ZlIGRpZCBub3Qgc2hvdyBOQSdzICBpbiBSIDw9IDMuMi4zCj4gCj4gCj4gIyMgUHJpbnRpbmcgY29tcGxleCBtYXRyaXgKPiBtYXRyaXgoMWksMiwxMykKICAgICBbLDFdIFssMl0gWywzXSBbLDRdIFssNV0gWyw2XSBbLDddIFssOF0gWyw5XSBbLDEwXSBbLDExXSBbLDEyXSBbLDEzXQpbMSxdIDArMWkgMCsxaSAwKzFpIDArMWkgMCsxaSAwKzFpIDArMWkgMCsxaSAwKzFpICAwKzFpICAwKzFpICAwKzFpICAwKzFpClsyLF0gMCsxaSAwKzFpIDArMWkgMCsxaSAwKzFpIDArMWkgMCsxaSAwKzFpIDArMWkgIDArMWkgIDArMWkgIDArMWkgIDArMWkKPiAjIyBTcGFjaW5nIHdhcyB3cm9uZyBpbiBSIDw9IDMuMi40Cj4gCj4gCj4gRSA8LSBleHByZXNzaW9uKHBvbHkgPSB4XjMgLSAzICogeF4yKQo+IHN0cihFKQogIGV4cHJlc3Npb24ocG9seSA9IHheMyAtIDMgKiB4XjIpCj4gIyMgbm8gbG9uZ2VyIHNob3dzICJzdHJ1Y3R1cmUoLi4uLiwgLk5hbWVzID0gLi4pIgo+IAo+IAo+ICMjIHN1bW1hcnkoPGxvZ2ljYWw+KSB3b3JraW5nIHZpYSB0YWJsZSgpOgo+IGxvZ2kgPC0gYyhOQSwgbG9naWNhbCgzKSwgTkEsICFsb2dpY2FsKDIpLCBOQSkKPiBzdW1tYXJ5KGxvZ2kpCiAgIE1vZGUgICBGQUxTRSAgICBUUlVFICAgIE5BJ3MgCmxvZ2ljYWwgICAgICAgMyAgICAgICAyICAgICAgIDMgCj4gc3VtbWFyeShsb2dpWyFpcy5uYShsb2dpKV0pCiAgIE1vZGUgICBGQUxTRSAgICBUUlVFIApsb2dpY2FsICAgICAgIDMgICAgICAgMiAKPiBzdW1tYXJ5KFRSVUUpCiAgIE1vZGUgICAgVFJVRSAKbG9naWNhbCAgICAgICAxIAo+ICMjIHdhcyBhbHdheXMgc2hvd2luZyBjb3VudHMgZm9yIE5BJ3MgZXZlbiB3aGVuIDAgaW4gIDIuOC4wIDw9IFIgPD0gMy4zLjEKPiBpaSA8LSBhcy5pbnRlZ2VyKGxvZ2kpCj4gc3VtbWFyeShpaSkKICAgTWluLiAxc3QgUXUuICBNZWRpYW4gICAgTWVhbiAzcmQgUXUuICAgIE1heC4gICAgTkEncyAKICAgIDAuMCAgICAgMC4wICAgICAwLjAgICAgIDAuNCAgICAgMS4wICAgICAxLjAgICAgICAgMyAKPiBzdW1tYXJ5KGlpWyFpcy5uYShpaSldKQogICBNaW4uIDFzdCBRdS4gIE1lZGlhbiAgICBNZWFuIDNyZCBRdS4gICAgTWF4LiAKICAgIDAuMCAgICAgMC4wICAgICAwLjAgICAgIDAuNCAgICAgMS4wICAgICAxLjAgCj4gc3VtbWFyeSgxTCkKICAgTWluLiAxc3QgUXUuICBNZWRpYW4gICAgTWVhbiAzcmQgUXUuICAgIE1heC4gCiAgICAgIDEgICAgICAgMSAgICAgICAxICAgICAgIDEgICAgICAgMSAgICAgICAxIAo+IAo+IAo+ICMjIHN0ci5kZWZhdWx0KCkgZm9yICJBc0lzIiBhcnJheXMKPiBzdHIoSShtIDwtIG1hdHJpeChwaSoxOjQsIDIpKSkKICdBc0lzJyBudW0gWzE6MiwgMToyXSAzLjE0IDYuMjggOS40MiAxMi41Nwo+ICMjIGRpZCBsb29rIHVnbHkgKGJlY2F1c2Ugb2YgdG9TdHJpbmcoKSBmb3IgbnVtYmVycykgaW4gUiA8PSAzLjMuMQo+IAo+IAo+ICMjIGNoZWNrIGF1dG9tYXRpYyBjb2VyY2lvbnMgZnJvbSBkb3VibGUgdG8gaW50ZWdlcgo+ICMjCj4gIyMgdGhlc2Ugc2hvdWxkIHdvcmsgZHVlIHRvIGNvZXJjaW9uCj4gc3ByaW50ZigiJWQiLCAxKQpbMV0gIjEiCj4gc3ByaW50ZigiJWQiLCBOQV9yZWFsXykKWzFdICJOQSIKPiBzcHJpbnRmKCIlZCIsIGMoMSwyKSkKWzFdICIxIiAiMiIKPiBzcHJpbnRmKCIlZCIsIGMoMSxOQSkpClsxXSAiMSIgICJOQSIKPiBzcHJpbnRmKCIlZCIsIGMoTkEsMSkpClsxXSAiTkEiICIxIiAKPiAjIwo+ICMjIHRoZXNlIHNob3VsZCBmYWlsCj4gc3ByaW50ZigiJWQiLCAxLjEpCkVycm9yIGluIHNwcmludGYoIiVkIiwgMS4xKSA6IAogIGludmFsaWQgZm9ybWF0ICclZCc7IHVzZSBmb3JtYXQgJWYsICVlLCAlZyBvciAlYSBmb3IgbnVtZXJpYyBvYmplY3RzCj4gc3ByaW50ZigiJWQiLCBjKDEuMSwxKSkKRXJyb3IgaW4gc3ByaW50ZigiJWQiLCBjKDEuMSwgMSkpIDogCiAgaW52YWxpZCBmb3JtYXQgJyVkJzsgdXNlIGZvcm1hdCAlZiwgJWUsICVnIG9yICVhIGZvciBudW1lcmljIG9iamVjdHMKPiBzcHJpbnRmKCIlZCIsIGMoMSwxLjEpKQpFcnJvciBpbiBzcHJpbnRmKCIlZCIsIGMoMSwgMS4xKSkgOiAKICBpbnZhbGlkIGZvcm1hdCAnJWQnOyB1c2UgZm9ybWF0ICVmLCAlZSwgJWcgb3IgJWEgZm9yIG51bWVyaWMgb2JqZWN0cwo+IHNwcmludGYoIiVkIiwgTmFOKQpFcnJvciBpbiBzcHJpbnRmKCIlZCIsIE5hTikgOiAKICBpbnZhbGlkIGZvcm1hdCAnJWQnOyB1c2UgZm9ybWF0ICVmLCAlZSwgJWcgb3IgJWEgZm9yIG51bWVyaWMgb2JqZWN0cwo+IHNwcmludGYoIiVkIiwgYygxLE5hTikpCkVycm9yIGluIHNwcmludGYoIiVkIiwgYygxLCBOYU4pKSA6IAogIGludmFsaWQgZm9ybWF0ICclZCc7IHVzZSBmb3JtYXQgJWYsICVlLCAlZyBvciAlYSBmb3IgbnVtZXJpYyBvYmplY3RzCj4gCj4gCj4gIyMgZm9ybWF0dGluZyBvZiBuYW1lZCByYXdzOgo+IHNldE5hbWVzKGFzLnJhdygxOjMpLCBjKCJhIiwgImJiYmIiLCAiYyIpKQogICBhIGJiYmIgICAgYyAKICAwMSAgIDAyICAgMDMgCj4gIyMgd2FzIHF1aXRlIHVnbHkgZm9yIFIgPD0gMy40LjIKPiAKPiAKPiAjIyBzdHIoeCkgd2hlbiBpcy52ZWN0b3IoeCkgaXMgZmFsc2UgOgo+IHN0cihzdHJ1Y3R1cmUoYyhhID0gMSwgYiA9IDI6NyksIGNvbG9yID0gImJsdWUiKSkKIE5hbWVkIG51bSBbMTo3XSAxIDIgMyA0IDUgNiA3CiAtIGF0dHIoKiwgIm5hbWVzIik9IGNociBbMTo3XSAiYSIgImIxIiAiYjIiICJiMyIgLi4uCiAtIGF0dHIoKiwgImNvbG9yIik9IGNociAiYmx1ZSIKPiAjIyBkaWQgcHJpbnQgIiBhdG9taWMgWzE6N10gLi4uIiBpbiBSIDw9IDMuNC54Cj4gCj4gCj4gIyMgY2hlY2sgc3RvcGlmbm90KGV4cHJzID0gLi4uLikKPiB0cnlDYXRjaChzdG9waWZub3QoZXhwcnMgPSB7CisgICBhbGwuZXF1YWwocGksIDMuMTQxNTkyNykKKyAgIDIgPCAyCisgICBjYXQoIktpbHJveSB3YXMgaGVyZSFcbiIpCisgICBhbGwoMToxMCA8IDEyKQorICAgImEiIDwgImIiCisgfSksIGVycm9yID0gZnVuY3Rpb24oZSkgZSRtZXNzYWdlKSAtPiBNIDsgY2F0KCJFcnJvcjogIiwgTSwgIlxuIikKRXJyb3I6ICAyIDwgMiBpcyBub3QgVFJVRSAKPiAKPiB0cnlDYXRjaChzdG9waWZub3QoZXhwcnMgPSB7CisgICBhbGwuZXF1YWwocGksIDMuMTQxNTkyNykKKyAgIHsgY2F0KCJLaWxyb3kgd2FzIGhlcmUhXG4iKTsgVFJVRSB9CisgICBwaSA8IDMKKyAgIGNhdCgid2hlcmVhcyBJIHdvbid0IGJlIHByaW50ZWQgLi4uXG4iKQorICAgYWxsKDE6MTAgPCAxMikKKyAgICJhIiA8ICJiIgorIH0pLCBlcnJvciA9IGZ1bmN0aW9uKGUpIGUkbWVzc2FnZSkgLT4gTTIgOyBjYXQoIkVycm9yOiAiLCBNMiwgIlxuIikKS2lscm95IHdhcyBoZXJlIQpFcnJvcjogIHBpIDwgMyBpcyBub3QgVFJVRSAKPiAKPiBzdG9waWZub3QoZXhwcnMgPSB7CisgICBhbGwuZXF1YWwocGksIDMuMTQxNTkyNykKKyAgIHsgY2F0KCJcbktpbHJveSB3YXMgaGVyZSEgLi4uICIpOyBUUlVFIH0KKyAgIHBpID4gMworICAgYWxsKDE6MTAgPCAxMikKKyAgICJhIiA8ICJiIgorICAgeyBjYXQoImFuZCBJJ20gcHJpbnRlZCBhcyB3ZWxsIC4uLlxuIik7IFRSVUV9CisgfSkKCktpbHJveSB3YXMgaGVyZSEgLi4uIGFuZCBJJ20gcHJpbnRlZCBhcyB3ZWxsIC4uLgo+ICMjIHdpdGhvdXQgInsgLi4gfSIgOgo+IHN0b3BpZm5vdChleHBycyA9IDIgPT0gMikKPiB0cnkoc3RvcGlmbm90KGV4cHJzID0gMSA+IDIpKQpFcnJvciA6IDEgPiAyIGlzIG5vdCBUUlVFCj4gIyMgcGFzc2luZyBhbiBleHByZXNzaW9uIG9iamVjdDoKPiBzdG9waWZub3QoZXhwcnMgPSBleHByZXNzaW9uKDIgPT0gMiwgcGkgPCA0KSkKPiB0cnlDYXRjaChzdG9waWZub3QoZXhwcnMgPSBleHByZXNzaW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgMiA9PSAyLAorICAgICAgICAgICAgICAgICAgICAgICAgeyBjYXQoIlxuIEtpbHJveSBhZ2FpbiAuLiIpOyBUUlVFIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBwaSA8IDQsCisgICAgICAgICAgICAgICAgICAgICAgICAwID09IDEsCisgICAgICAgICAgICAgICAgICAgICAgICB7IGNhdCgiXG4gbm8gd2F5Li5cbiIpOyBUUlVFIH0pKSwKKyAgICAgICAgICBlcnJvciA9IGZ1bmN0aW9uKGUpIGUkbWVzc2FnZSkgLT4gTTMKCiBLaWxyb3kgYWdhaW4gLi4+IGNhdCgiRXJyb3I6ICIsIE0zLCAiXG4iKQpFcnJvcjogIDAgPT0gMSBpcyBub3QgVFJVRSAKPiAjIyB3YXMgcGFydGx5IG5vdCBvayBmb3IgbWFueSB3ZWVrcyBpbiBSLWRldmVsLCBlYXJseSAyMDE4Cj4gCj4gCj4gIyMgcHJpbnQuaHRlc3QoKSB3aXRoIHNtYWxsICdkaWdpdHMnCj4gcHJpbnQodC50ZXN0KDE6MjgpLCBkaWdpdHMgPSAzKQoKCU9uZSBTYW1wbGUgdC10ZXN0CgpkYXRhOiAgMToyOAp0ID0gOSwgZGYgPSAyNywgcC12YWx1ZSA9IDZlLTEwCmFsdGVybmF0aXZlIGh5cG90aGVzaXM6IHRydWUgbWVhbiBpcyBub3QgZXF1YWwgdG8gMAo5NSBwZXJjZW50IGNvbmZpZGVuY2UgaW50ZXJ2YWw6CiAxMS4zIDE3LjcKc2FtcGxlIGVzdGltYXRlczoKbWVhbiBvZiB4IAogICAgIDE0LjUgCgo+ICMjIHNob3dlZCAnZGYgPSAzMCcgZnJvbSBzaWduaWYoKiwgZGlnaXRzPTEpIGFuZCB0b28gbWFueSBkaWdpdHMgZm9yIENJLCBpbiBSIDw9IDMuNS4xCj4gCg==